syncthing-security.7 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. .\" Man page generated from reStructuredText.
  2. .
  3. .TH "SYNCTHING-SECURITY" "7" "June 14, 2015" "v0.11" "Syncthing"
  4. .SH NAME
  5. syncthing-security \- Security Principles
  6. .
  7. .nr rst2man-indent-level 0
  8. .
  9. .de1 rstReportMargin
  10. \\$1 \\n[an-margin]
  11. level \\n[rst2man-indent-level]
  12. level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
  13. -
  14. \\n[rst2man-indent0]
  15. \\n[rst2man-indent1]
  16. \\n[rst2man-indent2]
  17. ..
  18. .de1 INDENT
  19. .\" .rstReportMargin pre:
  20. . RS \\$1
  21. . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
  22. . nr rst2man-indent-level +1
  23. .\" .rstReportMargin post:
  24. ..
  25. .de UNINDENT
  26. . RE
  27. .\" indent \\n[an-margin]
  28. .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
  29. .nr rst2man-indent-level -1
  30. .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
  31. .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
  32. ..
  33. .sp
  34. Security is one of the primary project goals. This means that it should not be
  35. possible for an attacker to join a cluster uninvited, and it should not be
  36. possible to extract private information from intercepted traffic. Currently this
  37. is implemented as follows.
  38. .sp
  39. All traffic is protected by TLS. To prevent uninvited nodes from joining a
  40. cluster, the certificate fingerprint of each node is compared to a preset list
  41. of acceptable nodes at connection establishment. The fingerprint is computed as
  42. the SHA\-256 hash of the certificate and displayed in BASE32 encoding to form a
  43. reasonably compact and convenient string.
  44. .sp
  45. Incoming requests for file data are verified to the extent that the requested
  46. file name must exist in the local index and the global model.
  47. .sp
  48. For information about ensuring you are running the code you think you are and
  49. for reporting security vulnerabilities, please see the official \fI\%security page\fP <\fBhttp://syncthing.net/security.html\fP>\&.
  50. .SH INFORMATION LEAKAGE
  51. .SS Global Discovery
  52. .sp
  53. When global discovery is enabled, Syncthing sends an announcement packet every
  54. 30 minutes to the global discovery server, so that it can keep a mapping between
  55. your device ID and external IP. Also, when connecting to other devices that have
  56. not been seen on the local network, a query is sent to the global discovery
  57. server containing the device ID of the requested device. The discovery server is
  58. currently hosted by \fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\&. Global discovery defaults to \fBon\fP\&.
  59. .sp
  60. When turned off, devices with dynamic addresses not on the local network cannot
  61. be found and connected to.
  62. .sp
  63. If a different global discovery server is configured, no data is sent to the
  64. default global discovery server.
  65. .SS Local Discovery
  66. .sp
  67. When local discovery is enabled, Syncthing sends broadcast (IPv4) and multicast
  68. (IPv6) packets to the local network every 30 seconds. The packets contain the
  69. device ID and listening port. Local discovery defaults to \fBon\fP\&.
  70. .sp
  71. An eavesdropper on the local network can deduce which machines are running
  72. Syncthing with local discovery enabled, and what their device IDs are.
  73. .sp
  74. When turned off, devices with dynamic addresses on the local network cannot be
  75. found and connected to.
  76. .SS Upgrade Checks
  77. .sp
  78. When automatic upgrades are enabled, Syncthing checks for a new version at
  79. startup and then once every twelve hours. This is by an HTTPS request to the
  80. download site for releases, currently \fBhosted at GitHub\fP\&. Automatic upgrades
  81. default to \fBon\fP (unless Syncthing was compiled with upgrades disabled).
  82. .sp
  83. Even when automatic upgrades are disabled in the configuration, an upgrade check
  84. as above is done when the GUI is loaded, in order to show the "Upgrade to ..."
  85. button when necessary. This can be disabled only by compiling syncthing with
  86. upgrades disabled.
  87. .sp
  88. In effect this exposes the majority of the Syncthing population to tracking by
  89. the operator of the download site (currently GitHub). That data is not available
  90. to outside parties (including \fI\%@calmh\fP <\fBhttps://github.com/calmh\fP> etc), except that download counts
  91. per release binary are available in the GitHub API. The upgrade check (or
  92. download) requests \fIdo not\fP contain any identifiable information about the user,
  93. device, Syncthing version, etc.
  94. .SS Usage Reporting
  95. .sp
  96. When usage reporting is enabled, Syncthing reports usage data at startup and
  97. then every 24 hours. The report is sent as an HTTPS POST to the usage reporting
  98. server, currently hosted by \fI\%@calmh\fP <\fBhttps://github.com/calmh\fP>\&. The contents of the usage report can
  99. be seen behind the "Preview" link in settings. Usage reporting defaults to
  100. \fBoff\fP but the GUI will ask once about enabling it, shortly after the first
  101. install.
  102. .sp
  103. The reported data is protected from eavesdroppers, but the connection to the
  104. usage reporting server itself may expose the client as running Syncthing.
  105. .SS Sync Connections (BEP)
  106. .sp
  107. Sync connections are attempted to all configured devices, when the address is
  108. possible to resolve. The sync connection is based on TLS 1.2. The TLS
  109. certificates are sent in clear text (as in HTTPS etc), meaning that the
  110. certificate Common Name (by default \fBsyncthing\fP) is visible.
  111. .sp
  112. An eavesdropper can deduce that this is a Syncthing connection and calculate the
  113. device ID:s involved based on the hashes of the sent certificates.
  114. .sp
  115. Likewise, if the sync port (default 22000) is accessible from the internet, a
  116. port scanner may discover it, attempt a TLS negotiation and thus obtain the
  117. device certificate. This provides the same information as in the eavesdropper
  118. case.
  119. .SS Web GUI
  120. .sp
  121. If the web GUI is accessible, it exposes the device as running Syncthing. The
  122. web GUI defaults to being reachable from the \fBlocal host only\fP\&.
  123. .SH IN SHORT
  124. .sp
  125. Parties doing surveillance on your network (whether that be corporate IT, the
  126. NSA or someone else) will be able to see that you use Syncthing, and your device
  127. ID\(aqs \fI\%are OK to share anyway\fP <\fBhttp://docs.syncthing.net/users/faq.html#should-i-keep-my-device-ids-secret\fP>,
  128. but the actual transmitted data is protected as well as we can. Knowing your
  129. device ID can expose your IP address, using global discovery.
  130. .SH AUTHOR
  131. The Syncthing Authors
  132. .SH COPYRIGHT
  133. 2015, The Syncthing Authors
  134. .\" Generated by docutils manpage writer.
  135. .