TLS-Attacker - A Java-based Framework for Analyzing
Oleh
chmood
Perpustakaan TLS-Penyerang adalah kerangka berbasis Java untuk menganalisis TLS perpustakaan. Hal ini dapat mengirim pesan protokol sewenang-wenang dalam urutan yang sewenang-wenang kepada rekan TLS, dan menentukan modifikasi mereka menggunakan antarmuka yang disediakan.
Hal ini memberikan pengembang kesempatan untuk dengan mudah menentukan aliran protokol TLS kustom dan mengujinya terhadap perpustakaan TLS nya.
Harap dicatat:
TLS-Penyerang adalah alat penelitian ditujukan untuk pengembang TLS dan pentesters. Tidak ada GUI dan tidak ada lampu hijau / merah. Ini adalah versi pertama dan dapat berisi beberapa bug.
Kompilasi
Dalam rangka untuk mengkompilasi dan menggunakan TLS-Penyerang, Anda harus memiliki Java diinstal. Jalankan perintah maven dari direktori TLS-Penyerang:
Atau, jika Anda sedang terburu-buru, Anda dapat melewati tes dengan menggunakan:
Struktur kode
TLS-Penyerang terdiri dari beberapa (maven) proyek:
Didukung Standar dan Cipher Suites Saat ini, fitur berikut ini didukung:
Hal ini memberikan pengembang kesempatan untuk dengan mudah menentukan aliran protokol TLS kustom dan mengujinya terhadap perpustakaan TLS nya.
Harap dicatat:
TLS-Penyerang adalah alat penelitian ditujukan untuk pengembang TLS dan pentesters. Tidak ada GUI dan tidak ada lampu hijau / merah. Ini adalah versi pertama dan dapat berisi beberapa bug.
Kompilasi
Dalam rangka untuk mengkompilasi dan menggunakan TLS-Penyerang, Anda harus memiliki Java diinstal. Jalankan perintah maven dari direktori TLS-Penyerang:
$ cd TLS-Attacker
$ ./mvnw clean package
Atau, jika Anda sedang terburu-buru, Anda dapat melewati tes dengan menggunakan:
$ ./mvnw clean package -DskipTests=true
Struktur kode
TLS-Penyerang terdiri dari beberapa (maven) proyek:
- Transportasi:utilitas transportasi untuk TCP dan UDP.
- ModifiableVariable: Berisi variabel dimodifikasi yang memungkinkan seseorang untuk mengeksekusi modifikasi variabel (tertentu serta random) selama arus protokol. ModifiableVariables digunakan dalam pesan protokol.
- TLS: implementasi Protokol, saat ini (D) TLS1.2 kompatibel.
- Serangan:
- Pelaksanaan beberapa serangan terkenal dan tes untuk serangan ini. Fuzzer: Kerangka Fuzzing diimplementasikan di atas fungsi TLS-Penyerang. 000 Anda dapat menemukan informasi lebih lanjut tentang modul ini di Wiki
Didukung Standar dan Cipher Suites Saat ini, fitur berikut ini didukung:
TLS versi 1.0 (RFC-2246),
1.1 (RFC-4346) dan 1,2 (RFC-5246)
DTLS 1.2 (RFC-6347)
algoritma pertukaran kunci (EC) DH dan RSA
AES CBC cipher suite
Ekstensi: EC, format titik EC, Heartbeat, Max panjang fragmen, nama Server, Signature dan Hash algoritma
TLS klien dan server
Penggunaan
Berikut ini, kami menyajikan beberapa
contoh yang sangat sederhana untuk menggunakan TLS-Penyerang.
Pertama, Anda perlu untuk memulai server TLS. Anda dapat menggunakan server Java yang disediakan:
... Atau Anda dapat menggunakan server yang berbeda, misalnya OpenSSL:
Kedua perintah mulai server TLS pada port 4433. Jika Anda ingin terhubung ke server, Anda dapat menggunakan perintah ini:
Anda dapat menggunakan cipher suite yang berbeda, versi TLS, atau terhubung ke port yang berbeda dengan parameter berikut:
Klien berbasis otentikasi juga didukung, hanya menggunakannya sebagai berikut. Pertama, mulai s_server openssl:
Kemudian mulai klien dengan:
Untuk lebih parameter, jalankan:
Anda sekarang dapat juga menggunakan server TLS:
Saat ini, hanya satu jabat tangan TLS akan diproduksi, setelah itu Anda harus me-restart server lagi. Serangan modul berisi beberapa serangan, Anda bisa untuk tes misalnya untuk kerentanan bantalan oracle:
Dalam kasus Anda adalah seorang pengembang yang lebih berpengalaman, Anda dapat membuat aliran pesan TLS sendiri. Sebagai contoh:
Saya tahu banyak dari Anda benci Jawa. Oleh karena itu, Anda juga dapat menggunakan struktur XML dan menjalankan protokol TLS disesuaikan Anda dari XML:
CLIENT
SECP192R1
SECP256R1
SECP384R1
SECP521R1
UNCOMPRESSED
SHA512
RSA
SHA512
ECDSA
SHA256
RSA
SHA256
ECDSA
SHA1
RSA
SHA1
ECDSA
NULL
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
SERVER
SERVER
SERVER
SERVER
CLIENT
CLIENT
CLIENT
SERVER
SERVER
Mengingat struktur XML ini terletak di config.xml, Anda hanya akan perlu menjalankan:
Variabel dimodifikasi
TLS-Penyerang bergantung pada konsep variabel dimodifikasi. Variabel dimodifikasi memungkinkan seseorang untuk mengatur modifikasi tipe dasar, misalnya Integer, dan memodifikasi nilai-nilai mereka dengan menjalankan metode getter. Cara terbaik untuk menyajikan fungsi dari konsep ini adalah dengan cara contoh sederhana:
Dalam contoh ini, kita mendefinisikan ModifiableInteger baru dan set nilainya ke 30. Selanjutnya, kita mendefinisikan AddModification modifikasi baru yang hanya mengembalikan jumlah dari dua bilangan bulat. Kami set nilainya ke 20. Jika kita menjalankan program di atas, hasil 50 dicetak. Kami tentu saja dapat menggunakan konsep ini dengan membangun alur kerja TLS kami. Bayangkan Anda ingin menguji server untuk kerentanan Heartbleed. Untuk tujuan ini, Anda perlu meningkatkan panjang payload dalam permintaan sekejap. Dengan TLS-Penyerang, Anda dapat melakukan ini sebagai berikut:
CLIENT
PEER_ALLOWED_TO_SEND
NULL
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
SERVER
SERVER
SERVER
SERVER
CLIENT
CLIENT
CLIENT
SERVER
SERVER
CLIENT
2000
SERVER
Seperti yang Anda lihat, kita secara eksplisit meningkatkan panjang payload dari pesan Heartbeat oleh 2000. Jika Anda menjalankan serangan terhadap server rentan
(misalnya, OpenSSL 1.0.1f), Anda akan melihat respon Heartbeat valid. Contoh lebih lanjut tentang serangan dan fuzzing berada di Wiki. Ucapan berikut orang kode untuk Proyek TLS-Penyerang kontribusi: Florian Pfützenreuter:
DTLS 1.2 Felix Lange: EAP-TLS Philip Riese: implementasi Server, TLS Man-in-the-Tengah penanganan Christian Mainka: dukungan Desain dan banyak saran implementasi. Kontribusi lebih lanjut tarik permintaan dipersilakan.
TLS-Penyerang Proyek TLS-Penyerang telah digunakan dalam karya ilmiah berikut dan proyek-proyek: Tibor Jager, Jörg Schwenk, Juraj Somorovsky. Pada Keamanan TLS 1.3 dan QUIC Terhadap Kelemahan dalam PKCS # 1 v1.5 Enkripsi. CCS'15.
Https://www.nds.rub.de/research/publications/ccs15Tibor Jager, Jörg Schwenk, Juraj Somorovsky. Praktis Serangan Curve valid pada TLS-ECDH. ESORICS'15.
Https://www.nds.rub.de/research/publications/ESORICS15 Quellcode-basierte Untersuchung von kryptographisch relevanten Aspekten der OpenSSL-Bibliothek.
https://www.bsi.bund.de/DE/Publikationen/Studien/OpenSSL-Bibliothek/opensslbibliothek.html . Itu selanjutnya digunakan untuk menemukan bug dalam berbagai implementasi TLS, lihat Wiki Jika Anda punya ide penelitian atau membutuhkan dukungan dengan menggunakan TLS-Penyerang
(misalnya Anda ingin memasukkannya dalam suite pengujian Anda), jangan ragu untuk menghubungi hackmanit.de . Jika TLS-Penyerang membantu Anda untuk menemukan bug dalam implementasi TLS, silakan mengakui alat ini. Terima kasih!
Download TLS-Attacker
$ cd TLS-Server
$ java -jar target/TLS-Server-1.0.jar ../resources/rsa1024.jks password TLS 4433
... Atau Anda dapat menggunakan server yang berbeda, misalnya OpenSSL:
$ cd resources
$ openssl s_server -key rsa1024key.pem -cert rsa1024cert.pem
Kedua perintah mulai server TLS pada port 4433. Jika Anda ingin terhubung ke server, Anda dapat menggunakan perintah ini:
$ cd Runnable
$ java -jar target/TLS-Attacker-1.0.jar client
Anda dapat menggunakan cipher suite yang berbeda, versi TLS, atau terhubung ke port yang berbeda dengan parameter berikut:
$ java -jar target/TLS-Attacker-1.0.jar client -connect localhost:4433 -cipher TLS_RSA_WITH_AES_256_CBC_SHA -version TLS11
Klien berbasis otentikasi juga didukung, hanya menggunakannya sebagai berikut. Pertama, mulai s_server openssl:
$ cd resources
$ openssl s_server -key rsa1024key.pem -cert rsa1024cert.pem -verify ec256cert.pem
Kemudian mulai klien dengan:
$ java -jar target/TLS-Attacker-1.0.jar client -connect localhost:4433 -cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA -keystore ../resources/ec256.jks -password password -alias alias -client_authentication
Untuk lebih parameter, jalankan:
$ java -jar target/TLS-Attacker-1.0.jar client -help
Anda sekarang dapat juga menggunakan server TLS:
$ java -jar target/TLS-Attacker-1.1.jar server -port 4444 -keystore ../resources/rsa1024.jks -password password -alias alias
Saat ini, hanya satu jabat tangan TLS akan diproduksi, setelah itu Anda harus me-restart server lagi. Serangan modul berisi beberapa serangan, Anda bisa untuk tes misalnya untuk kerentanan bantalan oracle:
$ cd Runnable
$ java -jar target/TLS-Attacker-1.0.jar padding_oracle
Dalam kasus Anda adalah seorang pengembang yang lebih berpengalaman, Anda dapat membuat aliran pesan TLS sendiri. Sebagai contoh:
GeneralConfig generalConfig = new GeneralConfig();
ConfigHandler configHandler = ConfigHandlerFactory.createConfigHandler("client");
configHandler.initialize(generalConfig);
ClientCommandConfig config = new ClientCommandConfig();
config.setConnect("localhost:" + PORT);
config.setWorkflowTraceType(WorkflowTraceType.CLIENT_HELLO);
TransportHandler transportHandler = configHandler.initializeTransportHandler(config);
TlsContext tlsContext = configHandler.initializeTlsContext(config);
WorkflowTrace trace = tlsContext.getWorkflowTrace();
trace.add(new ServerHelloMessage(ConnectionEnd.SERVER));
trace.add(new CertificateMessage(ConnectionEnd.SERVER));
trace.add(new ServerHelloDoneMessage(ConnectionEnd.SERVER));
trace.add(new RSAClientKeyExchangeMessage(ConnectionEnd.CLIENT));
trace.add(new ChangeCipherSpecMessage(ConnectionEnd.CLIENT));
trace.add(new FinishedMessage(ConnectionEnd.CLIENT));
trace.add(new ChangeCipherSpecMessage(ConnectionEnd.SERVER));
trace.add(new FinishedMessage(ConnectionEnd.SERVER));
WorkflowExecutor workflowExecutor = configHandler.initializeWorkflowExecutor(transportHandler, tlsContext);
workflowExecutor.executeWorkflow();
transportHandler.closeConnection();
Saya tahu banyak dari Anda benci Jawa. Oleh karena itu, Anda juga dapat menggunakan struktur XML dan menjalankan protokol TLS disesuaikan Anda dari XML:
Mengingat struktur XML ini terletak di config.xml, Anda hanya akan perlu menjalankan:
$ java -jar target/TLS-Attacker-1.0.jar client -workflow_input config.xml
Variabel dimodifikasi
TLS-Penyerang bergantung pada konsep variabel dimodifikasi. Variabel dimodifikasi memungkinkan seseorang untuk mengatur modifikasi tipe dasar, misalnya Integer, dan memodifikasi nilai-nilai mereka dengan menjalankan metode getter. Cara terbaik untuk menyajikan fungsi dari konsep ini adalah dengan cara contoh sederhana:
ModifiableInteger i = new ModifiableInteger();
i.setOriginalValue(30);
i.setModification(new AddModification(20));
System.out.println(i.getValue()); // 50
Dalam contoh ini, kita mendefinisikan ModifiableInteger baru dan set nilainya ke 30. Selanjutnya, kita mendefinisikan AddModification modifikasi baru yang hanya mengembalikan jumlah dari dua bilangan bulat. Kami set nilainya ke 20. Jika kita menjalankan program di atas, hasil 50 dicetak. Kami tentu saja dapat menggunakan konsep ini dengan membangun alur kerja TLS kami. Bayangkan Anda ingin menguji server untuk kerentanan Heartbleed. Untuk tujuan ini, Anda perlu meningkatkan panjang payload dalam permintaan sekejap. Dengan TLS-Penyerang, Anda dapat melakukan ini sebagai berikut:
Seperti yang Anda lihat, kita secara eksplisit meningkatkan panjang payload dari pesan Heartbeat oleh 2000. Jika Anda menjalankan serangan terhadap server rentan
(misalnya, OpenSSL 1.0.1f), Anda akan melihat respon Heartbeat valid. Contoh lebih lanjut tentang serangan dan fuzzing berada di Wiki. Ucapan berikut orang kode untuk Proyek TLS-Penyerang kontribusi: Florian Pfützenreuter:
DTLS 1.2 Felix Lange: EAP-TLS Philip Riese: implementasi Server, TLS Man-in-the-Tengah penanganan Christian Mainka: dukungan Desain dan banyak saran implementasi. Kontribusi lebih lanjut tarik permintaan dipersilakan.
TLS-Penyerang Proyek TLS-Penyerang telah digunakan dalam karya ilmiah berikut dan proyek-proyek: Tibor Jager, Jörg Schwenk, Juraj Somorovsky. Pada Keamanan TLS 1.3 dan QUIC Terhadap Kelemahan dalam PKCS # 1 v1.5 Enkripsi. CCS'15.
Https://www.nds.rub.de/research/publications/ccs15Tibor Jager, Jörg Schwenk, Juraj Somorovsky. Praktis Serangan Curve valid pada TLS-ECDH. ESORICS'15.
Https://www.nds.rub.de/research/publications/ESORICS15 Quellcode-basierte Untersuchung von kryptographisch relevanten Aspekten der OpenSSL-Bibliothek.
https://www.bsi.bund.de/DE/Publikationen/Studien/OpenSSL-Bibliothek/opensslbibliothek.html . Itu selanjutnya digunakan untuk menemukan bug dalam berbagai implementasi TLS, lihat Wiki Jika Anda punya ide penelitian atau membutuhkan dukungan dengan menggunakan TLS-Penyerang
(misalnya Anda ingin memasukkannya dalam suite pengujian Anda), jangan ragu untuk menghubungi hackmanit.de . Jika TLS-Penyerang membantu Anda untuk menemukan bug dalam implementasi TLS, silakan mengakui alat ini. Terima kasih!
Download TLS-Attacker
Category
Komentar