Use case
Ring is the default library provided by rust to handle TLS in HTTP request. (to be accurate, we use Reqwest, which uses rustls which uses ring)
This is an issue because, on windows, it requires the Visual Studio C++ libraries to be built AND executed, meaning we have to bundle them in the binary itself if we want our implant to be portable on all windows instance.
Sister task on the implant: OpenAEV-Platform/implant#158
Current workaround
Current workaround is to provide, though a rust flag at compile time (see cargo config file), a binary file with the DLL embedded.
Proposed solution
Switch out of ring and use another library. As of time of writing, the leading rust library to prefer is aws_lc_rs.
It's stil dependent on a C compiler, but only at compile time, not during execution
This would mean defining crates like this:
[dependencies]
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs", "tls12"] }
Additional information
Regression tests must be performed on brand new VMs on all arch and all platform, to make sure we didn't already configured some stuff before that could interfer.
Use case
Ring is the default library provided by rust to handle TLS in HTTP request. (to be accurate, we use Reqwest, which uses rustls which uses ring)
This is an issue because, on windows, it requires the Visual Studio C++ libraries to be built AND executed, meaning we have to bundle them in the binary itself if we want our implant to be portable on all windows instance.
Sister task on the implant: OpenAEV-Platform/implant#158
Current workaround
Current workaround is to provide, though a rust flag at compile time (see cargo config file), a binary file with the DLL embedded.
Proposed solution
Switch out of ring and use another library. As of time of writing, the leading rust library to prefer is aws_lc_rs.
It's stil dependent on a C compiler, but only at compile time, not during execution
This would mean defining crates like this:
Additional information
Regression tests must be performed on brand new VMs on all arch and all platform, to make sure we didn't already configured some stuff before that could interfer.