Saya baru menyadari bahwa serangan SSL man-in-the-middle jauh lebih umum daripada yang saya kira, terutama di lingkungan perusahaan. Saya telah mendengar dan melihat sendiri beberapa perusahaan yang memiliki server proxy SSL transparan. Semua klien dikonfigurasikan untuk mempercayai sertifikat proksi ini. Ini pada dasarnya berarti bahwa majikan secara teoritis dapat mencegat lalu lintas terenkripsi bahkan SSL tanpa peringatan di browser muncul. Seperti disebutkan di atas, klien datang dengan sertifikat yang dipercaya. Ini hanya dapat diungkapkan dengan memvalidasi sertifikat yang sedang digunakan secara manual.
Bagi saya, tampaknya majikan memanfaatkan posisi atasannya untuk memata-matai lalu lintas SSL karyawan. Bagi saya, ini membuat seluruh konsep SSL tidak dapat dipercaya. Saya sendiri telah berhasil menguji pengaturan serupa menggunakan mitmproxy dan dapat membaca komunikasi antara klien dan server perbankan elektronik saya. Ini adalah informasi yang tidak boleh diungkapkan kepada siapa pun.
Jadi, pertanyaan saya agak sederhana: Bagaimana saya bisa memvalidasi rantai kepercayaan di sisi server? Saya ingin memastikan klien menggunakan sertifikat server saya dan hanya satu rantai kepercayaan. Saya ingin tahu apakah ini dapat dicapai dengan konfigurasi SSL Apache? Ini akan nyaman karena dapat diterapkan ke banyak aplikasi dengan mudah. Jika ini tidak memungkinkan, apakah ada yang tahu cara untuk melakukan ini di PHP? Atau Anda punya saran lain?
sumber
Jawaban:
Saya pikir pertanyaan ini akan lebih sesuai untuk security.stackexchange.com mana topik MITM dibahas dalam banyak pertanyaan. Tapi bagaimanapun juga:
Validasi sertifikat server hanya dilakukan pada klien dan tidak dapat dipindahkan ke server karena titik validasi sertifikat pada klien adalah, bahwa klien perlu memastikan bahwa itu berbicara ke server yang benar dan tidak dapat mempercayai Server (tidak dipercaya) untuk membuat keputusan ini untuk klien.
Dalam hal intersepsi SSL, klien TLS dari perspektif server adalah firewall intersepsi SSL / AV. Dengan demikian masalah di sisi server adalah mendeteksi apakah ia berbicara dengan klien yang diharapkan (browser) atau tidak (firewall / AV). Cara teraman untuk melakukan ini adalah dengan menggunakan sertifikat klien untuk mengotentikasi klien - dan pada kenyataannya intersepsi SSL tidak akan berfungsi jika otentikasi klien digunakan, yaitu jabat tangan TLS akan gagal karena MITM tidak dapat memberikan sertifikat klien yang diharapkan.
Hanya saja, sertifikat klien jarang digunakan. Selain itu, jabat tangan TLS yang gagal tidak berarti bahwa klien dapat berkomunikasi ke server tanpa intersepsi SSL tetapi klien tidak dapat berkomunikasi dengan server sama sekali. Cara alternatif adalah dengan menggunakan beberapa heuristik untuk mendeteksi jenis klien TLS berdasarkan sidik jari dari jabat tangan TLS, yaitu jenis dan urutan cipher, penggunaan ekstensi spesifik ... Sementara proxy intersepsi SSL secara teori dapat meniru yang asli ClientHello sangat tidak. Lihat juga Deteksi man-in-the-middle di sisi server untuk HTTPS atau bagian III Heuristik Implementasi TLS dalam Dampak Keamanan dari Interception HTTPS .
sumber
Masalahnya bukan dalam konsep SSL atau dalam implementasi teknis, melainkan bahwa orang lain memiliki kontrol penuh atas satu titik akhir koneksi, yaitu workstation Anda.
Itu adalah akar dari risiko keamanan aktual ...
Dari perspektif keamanan, workstation Anda yang dikompromikan yang memutuskan rantai kepercayaan bahwa dalam keadaan normal mencegah MITM untuk berhasil.
Kamu tidak bisa Itu dilakukan sisi klien.
Tergantung pada kasus penggunaan Anda, apa yang dapat Anda lakukan adalah RFC 7469 HTTP Public Key Pinning di mana Anda mengirim header tambahan ke klien dengan daftar (hashes) sertifikat SSL aktual Anda atau CA yang Anda gunakan.
sumber
Itu cara yang salah. Bukan server yang memeriksa rantai kepercayaan. Itu adalah Klien. Jadi alasan mengapa perusahaan menggunakan cara ini adalah untuk mengamankan perusahaan dan memeriksa apa yang dilakukan karyawan dalam waktu kerjanya.
sumber
Anda BISA (agak), tetapi pertanyaan sebenarnya adalah apakah Anda HARUS .
Namun berhati-hatilah, ini tidak sesederhana mengubah bendera di apache.conf.
Juga, karena "penyerang" (mis. Majikan) mengendalikan komputer klien, mereka selalu dapat menggagalkan usaha Anda jika mereka cenderung untuk menginvestasikan usaha yang cukup (di sisi baiknya, kecuali jika Anda adalah ikan yang sangat besar, mereka kemungkinan besar tidak cenderung, sehingga Anda akan mencapai tujuan Anda bahwa pengguna Anda tidak akan dapat terhubung dengan Anda kecuali itu aman))
Anda dapat menerapkan kembali TLS dalam javascript , dan melakukan pengecekan di sana jika sertifikat yang terhubung klien adalah sertifikat situs web Anda.
jika Anda beruntung , pengguna mungkin menggunakan peramban tempat Javascript sisi-klien bisa mendapatkan info tentang sertifikat jarak jauh yang digunakan (dan karenanya dengan mudah memverifikasinya terhadap nilai hardcod dari sertifikat server Anda).
Anda dapat menggunakan JavaScript untuk menjalankan enkripsi khusus Anda . Jadi, bahkan ketika perusahaan jahat TLS MiTM berhasil, itu masih tidak akan memberikannya akses ke data Anda. Tentu saja, jika ada yang cukup tertarik (dan karena mereka mengendalikan klien), mereka bisa langsung mengganti javascript aman Anda dengan javascript mereka sendiri yang juga mencatat (atau mengubah) semua informasi dalam perjalanan.
Juga, karena bisnis yang menggunakan proxy TLS MiTM juga biasanya mengendalikan komputer klien sepenuhnya, mereka dapat dengan mudah menginstal layar dan keylogger untuk hanya merekam video dari semua yang dilihat pengguna, dan merekam semua penekanan tombol (dan gerakan mouse) yang diketikkan oleh pengguna. Seperti yang Anda lihat, ketika penyerang adalah klien, tidak ada cara yang benar-benar aman untuk membodohinya. Ini benar-benar hanya sebuah pertanyaan berapa banyak mereka akan repot-repot ... Dan beberapa solusi di atas mungkin cukup baik untuk Anda.
sumber