Commit Graph

1326 Commits

Author SHA1 Message Date
Norbert Federa 939f1c639a Standard RDP Security Layer Levels/Method Overhaul
[MS-RDPBCGR] Section 5.3 describes the encryption level and method values for
standard RDP security.

Looking at the current usage of these values in the FreeRDP code gives me
reason to believe that there is a certain lack of understanding of how these
values should be handled.

The encryption level is only configured on the server side in the "Encryption
Level" setting found in the Remote Desktop Session Host Configuration RDP-Tcp
properties dialog and this value is never transferred from the client to the
server over the wire.
The possible options are "None", "Low", "Client Compatible", "High" and
"FIPS Compliant". The client receices this value in the Server Security Data
block (TS_UD_SC_SEC1), probably only for informational purposes and maybe to
give the client the possibility to verify if the server's decision for the
encryption method confirms to the server's encryption level.
The possible encryption methods are "NONE", "40BIT", "56BIT", "128BIT" and
"FIPS" and the RDP client advertises the ones it supports to the server in the
Client Security Data block (TS_UD_CS_SEC).
The server's configured encryption level value restricts the possible final
encryption method.
Something that I was not able to find in the documentation is the priority
level of the individual encryption methods based on which the server makes its
final method decision if there are several options.
My analysis with Windows Servers reveiled that the order is 128, 56, 40, FIPS.
The server only chooses FIPS if the level is "FIPS Comliant" or if it is the
only method advertised by the client.

Bottom line:
* FreeRDP's client side does not need to set settings->EncryptionLevel
(which was done quite frequently).
* FreeRDP's server side does not have to set the supported encryption methods
list in settings->EncryptionMethods

Changes in this commit:

Removed unnecessary/confusing changes of EncryptionLevel/Methods settings

Refactor settings->DisableEncryption
* This value actually means "Advanced RDP Encryption (NLA/TLS) is NOT used"
* The old name caused lots of confusion among developers
* Renamed it to "UseRdpSecurityLayer" (the compare logic stays untouched)

Any client's setting of settings->EncryptionMethods were annihilated
* All clients "want" to set all supported methods
* Some clients forgot 56bit because 56bit was not supported at the time the
code was written
* settings->EncryptionMethods was overwritten anyways in nego_connect()
* Removed all client side settings of settings->EncryptionMethods
The default is "None" (0)
* Changed nego_connect() to advertise all supported methods if
settings->EncryptionMethods is 0 (None)
* Added a commandline option /encryption-methods:comma separated list of the
values "40", "56", "128", "FIPS". E.g. /encryption-methods:56,128
* Print warning if server chooses non-advertised method

Verify received level and method in client's gcc_read_server_security_data
* Only accept valid/known encryption methods
* Verify encryption level/method combinations according to MS-RDPBCGR 5.3.2

Server implementations can now set settings->EncryptionLevel
* The default for settings->EncryptionLevel is 0 (None)
* nego_send_negotiation_response() changes it to ClientCompatible in that case
* default to ClientCompatible if the server implementation set an invalid level

Fix server's gcc_write_server_security_data
* Verify server encryption level value set by server implementations
* Choose rdp encryption method based on level and supported client methods
* Moved FIPS to the lowest priority (only used if other methods are possible)

Updated sample server
* Support RDP Security (RdpKeyFile was not set)
* Added commented sample code for setting the security level
2014-12-12 02:17:12 +01:00
Marc-André Moreau fdd2dc7601 freerdp: patch valgrind leaks, cleanup 2014-12-03 14:17:27 -05:00
Marc-André Moreau 6ccce86140 Merge branch 'master' of github.com:FreeRDP/FreeRDP
Conflicts:
	winpr/libwinpr/thread/thread.c
2014-12-03 10:10:50 -05:00
Marc-André Moreau c17a831367 Merge pull request #2240 from nfedera/fix-2014-12-01-01
xfreerdp: pinch/pan fixes and smart-sizing
2014-12-02 14:04:49 -05:00
Armin Novak e6fa0911a3 Fixed missing extern C 2014-12-01 13:12:51 +01:00
Norbert Federa 25f66d2e6d xfreerdp: added smart sizing, mt gesture fixes
- removed setting ScalingFactor
- added settings SmartSizingWidth and SmartSizingHeight
- changed option /smart-sizing to optionally support <width>x<height>
- consolidated transformation of input event coordinates
- rdp8 gfx ignored scaling and panning offsets: fixed
- never resize window on panning/pinching
- simplified keyboard multitouch gesture debugging emulation
- disabled keyboard multitouch gesture emulation debug code via define
2014-12-01 11:56:44 +01:00
Marc-André Moreau ba5389d9d0 Merge branch 'master' of github.com:awakecoding/FreeRDP 2014-11-21 15:10:48 -05:00
Marc-André Moreau 7881ec762e server/shadow: avoid sending pointer updates when not active, fix remdesk leak 2014-11-21 15:10:39 -05:00
Hardening ed6f380434 Add server-side RDPEI
This patch mutualize code between client and server for RDPEI. And add support for
the server-side.
2014-11-20 22:19:29 +01:00
Marc-André Moreau 1c9231acf8 libfreerdp-rail: remove 2014-11-12 19:51:17 -05:00
Marc-André Moreau ddedc574f3 freerdp: remove tcp, uds utils 2014-11-12 14:06:34 -05:00
Marc-André Moreau 8c98cbc247 libfreerdp-utils: remove old time utils 2014-11-12 13:45:03 -05:00
Marc-André Moreau 986dae429b freerdp: remove deprecated svc_plugin.c utils 2014-11-12 13:34:07 -05:00
Marc-André Moreau 0e7c95c421 freerdp: remove deprecated eventing system 2014-11-12 13:18:18 -05:00
Marc-André Moreau 589c21d819 libfreerdp-utils: remove rail utils 2014-11-12 10:18:53 -05:00
Marc-André Moreau a48ed7239d Merge branch 'master' of github.com:FreeRDP/FreeRDP
Conflicts:
	libfreerdp/core/update.c
2014-11-11 09:55:48 -05:00
Marc-André Moreau ee7299ec3f channels/tsmf: remove dependency on deprecated eventing system 2014-11-10 16:33:34 -05:00
Marc-André Moreau a6bb185760 channels/tsmf: add new callback interface 2014-11-07 18:33:45 -05:00
Marc-André Moreau 04299bb18b shadow: improve pointer updates 2014-11-07 13:51:10 -05:00
Vic Lee 8eaeeebecc libfreerdp-core: support continuous auto-detection. 2014-11-07 16:18:49 +08:00
Hardening e04f90eada Offer to disable bulk compression when using remoteFx
This patch adds a skipCompression field in surface commands struct so that
we can disable bulk compression with remoteFx.
2014-11-04 16:14:53 +01:00
Vic Lee 18428a43d0 libfreerdp-core: distinguish continuous/connect-time autodetect. 2014-11-04 13:41:04 +08:00
Hardening 7b108f1aa8 Merge pull request #2141 from zhangzl2013/polyline
fix polyline.
2014-10-31 22:15:13 +01:00
Norbert Federa 62dbcac0c7 xfreerdp: fix glyph index primary drawing order
The fOpRedundant field of the GlyphIndex primary drawing order
(MS-RDPEGDI, chapter 2.2.2.2.1.1.2.13) was neglected which resulted in some
severe text rendering errors.
2014-10-29 20:56:26 +01:00
Vic Lee 152d525a05 libfreerdp-core: server-side auto-detect feature. 2014-10-29 00:49:49 +08:00
Marc-André Moreau f01bb56ac5 channels/cliprdr: add missing clipboard data format definitions 2014-10-23 18:33:10 -04:00
Marc-André Moreau f76f8e3599 channels/cliprdr: add missing callbacks and message definitions 2014-10-23 18:17:53 -04:00
Marc-André Moreau 1c7ed224b6 wfreerdp: start preparing cliprdr code for migration to cliprdr callback interface 2014-10-23 15:38:19 -04:00
Marc-André Moreau 23e4963102 xfreerdp: remove dependency on clrconv 2014-10-21 22:19:11 -04:00
Marc-André Moreau 5f95f0776f libfreerdp-codec: add freerdp_image_copy_from_monochrome replacement function for deprecated freerdp_mono_image_convert 2014-10-21 21:56:10 -04:00
Marc-André Moreau 0aab1e7ee5 libfreerdp-codec: fix and enhance cursor image conversion 2014-10-21 20:46:15 -04:00
Marc-André Moreau 83ecddd6c1 xfreerdp: replace cliprdr to wire format conversion 2014-10-17 20:40:11 -04:00
Marc-André Moreau a1e660d92e freerdp: unify clipboard standard format id definitions 2014-10-16 22:20:12 -04:00
Marc-André Moreau 334dec3c1f winpr: add pragma pack, bitmap + clipboard definitions 2014-10-16 21:45:47 -04:00
Marc-André Moreau 1d47b16f3c Merge branch 'master' of github.com:FreeRDP/FreeRDP 2014-10-14 20:59:37 -04:00
Marc-André Moreau 00e3533230 libfreerdp-core: expose API for FreeRDS WTSVirtualChannelRead 2014-10-10 17:19:38 -04:00
Marc-André Moreau 11ae267518 libfreerdp-core: expose new API to allow FreeRDS virtual channel hooking 2014-10-10 16:11:42 -04:00
Marc-André Moreau 9ce862edc8 Merge pull request #2135 from erbth/wfreerdp
Added lock key synchronization to wfreerdp
2014-10-09 09:05:58 -04:00
Zhang Zhaolong 3de5c62bf3 fix polyline. 2014-10-09 18:11:38 +08:00
erbth 58c392e72e Added lock key synchronization to wfreerdp 2014-10-03 16:27:47 +02:00
Bernhard Miklautz f40053577f core: add support for set keyboard indicators PDU
Server Set Keyboard Indicators PDU MS-RDPBCGR 2.2.8.2.1

* add server side code
* add support for client callback
2014-10-03 12:10:44 +02:00
Marc-André Moreau abd87ace55 rdtk: initial commit 2014-09-29 16:08:08 -04:00
Marc-André Moreau 6eeace868b shadow: start bitmap font loader 2014-09-28 21:41:12 -04:00
Marc-André Moreau 668aa17a22 shadow: add X11 PAM authentication 2014-09-26 19:03:48 -04:00
Marc-André Moreau ca1cec64d8 libfreerdp-core: update RDP8 virtual channels 2014-09-25 17:31:05 -04:00
Marc-André Moreau 4f1fae38bb freerdp: fix headers for C++ 2014-09-25 14:15:57 -04:00
Marc-André Moreau 8b1ad6a6cd libfreerdp-gdi: remove some dead code 2014-09-25 10:39:23 -04:00
Marc-André Moreau c762a4d5a2 Merge branch 'master' of github.com:awakecoding/FreeRDP into shadow 2014-09-25 10:35:14 -04:00
Marc-André Moreau bbf4732470 Merge branch 'master' of github.com:FreeRDP/FreeRDP
Conflicts:
	libfreerdp/gdi/gdi.c
2014-09-25 10:34:56 -04:00
Marc-André Moreau 86b4123cf0 Merge pull request #2101 from eledoux/ports
Ports
2014-09-25 10:38:07 -04:00