Dijital dünyada veri iletişiminde gizliliği sağlamak için kullanılan protokoller hayati öneme sahiptir. SSL (Secure Sockets Layer) ve TLS (Transport Layer Security) bilgisayar ağı üzerinde güvenli haberleşmeyi sağlamak için kullanılan popüler kriptolama protokolleridir. Günümüzde SSL kullanımdan kaldırılmış, yerine daha gelişmiş versiyonu olan TLS sürümleri kullanılmaktadır. Bu makalede, TLS 1.3 bağlantı yapısı ve TLS Fingerprint çalışma süreci üzerinde durulacaktır.
TLS (Transport Layer Security)
Bir web sitesine bağlanırken ya da bir uygulama kullanırken arka planda çalışan ve verilerimizi koruyan TLS, dijital dünyada işlerimizi sorunsuz şekilde yürütmemizi sağlar. Peki bunu nasıl yapıyor?
HTTPS, HTTP protokolünün şifrelenmiş bir versiyonudur ve TLS kullanarak verilerin şifrelenmesini sağlar. Bu sayede, kullanıcının tarayıcısı ile sunucu arasındaki veri iletimi güvenli hale gelir. OSI referans modelinde Session (Oturum) katmanında başlatılır ve Presentation (Sunum) katmanında çalıştırılır. X.509 sertifikaları, TLS protokolünde kimlik doğrulama için kullanılan dijital sertifikalardır. Sertifikalar, bir sertifika otoritesi (CA) tarafından imzalanır ve sunucunun kimliğini doğrulamak için kullanılır. Bu sertifikalar, kullanıcılara sunucunun güvenilir olduğunu kanıtlar ve veri iletimini şifrelemek için gerekli anahtar bilgilerini sağlar. Bu protokol, başlatılırken istemci ve sunucu arasında güvenli bir kanal oluşturmak için bir Handshake (el sıkışma) süreci gerçekleştirir.
Detaylı Handshake işlemi (RFC 8446)
Handshake Protokolü
El sıkışma protokolü, istemci ve sunucu arasındaki güvenli iletişimi başlatır. Bu süreçte taraflar, kriptografik parametreler üzerinde anlaşır ve güvenli bir iletişim kanalı oluşturur. Alt bölümde yer alan başlıklar TLS Handshake işleminin detaylı olaylarını barındırıyor.
1. Key Exchange Messages
Bu mesajlar, istemci ve sunucunun güvenlik yeteneklerini belirlemek ve paylaşılan gizli anahtarları oluşturmak için kullanılır.
1.1 Cryptographic Negotiation
TLS'de kriptografik pazarlık, istemcinin ClientHello mesajında belirttiği seçeneklerle başlar. Bu seçenekler şunlardır:
· CipherSuites: Desteklenen AEAD algoritmaları ve HKDF hash çiftleri.
· SupportedGroups ve Key Share:(EC) DHE grupları ve bu gruplar için anahtar paylaşımları.
· SignatureAlgorithms: Kabul edilen imza algoritmaları.
· Pre-SharedKey ve PSK Key Exchange Modes: Simetrik anahtar kimlikleri ve PSK ile kullanılabilecek anahtar değişim modları.
1.2 ClientHello
ClientHello mesajı, istemcinin desteklediği protokol sürümlerini, şifreleme algoritmalarını ve diğer güvenlik parametrelerini sunucuya bildirir.
1.3 ServerHello
ServerHello mesajı, sunucunun seçilen protokol sürümü, şifreleme algoritması ve diğer parametreleri istemciye bildirdiği mesajdır.
1.4 HelloRetry Request
Eğer sunucu, istemcinin sunduğu parametrelerle uyumlu bir anahtar paylaşımı bulamazsa, istemciye HelloRetryRequest mesajı gönderir ve yeni bir deneme yapmasını ister.
2. Extensions
Bu bölüm, TLS el sıkışma sürecinde kullanılan uzantıları açıklar.
2.1 Supported Versions
Bu uzantı, istemcinin desteklediği TLS protokol sürümlerini belirtir.
2.2 Cookie
Sunucu tarafından istemciye gönderilen bir cookie, istemci kimliğini doğrulamak için kullanılır.
2.3 Signature Algorithms
Bu uzantı, istemcinin kabul edebileceği imza algoritmalarını belirtir.
2.4 Certificate Authorities
Bu uzantı, istemcinin kabul edebileceği sertifika otoritelerini belirtir.
2.5 OID Filters
Bu uzantı, belirli nesne tanımlama numaralarını (OID) filtrelemek için kullanılır.
2.6 Post-Handshake Client Authentication
Bu uzantı, el sıkışma sonrası istemci kimlik doğrulamasını destekler.
2.7 Supported Groups
Bu uzantı, istemcinin desteklediği (EC) DHE gruplarını belirtir.
2.8 KeyShare
Bu uzantı, istemcinin belirttiği (EC) DHE grupları için anahtar paylaşımlarını içerir.
2.9 Pre-Shared Key Exchange Modes
Bu uzantı, PSKile kullanılabilecek anahtar değişim modlarını belirtir.
2.10 EarlyData Indication
Bu uzantı erken veri gönderimini destekleyen istemciler için kullanılır.
2.11 Pre-Shared Key Extension
Bu uzantı, önceden paylaşılmış anahtarları (PSK) belirtir.
3. Server Parameters
Sunucunun istemciye bildirdiği parametreleri içerir.
3.1 Encrypted Extensions
Sunucunun el sıkışma sürecinde gönderdiği şifrelenmiş uzantılar.
3.2 Certificate Request
Sunucunun istemciden sertifika talep ettiği mesaj.
4. Authentication Messages
Bu bölüm, TLS el sıkışma sürecinde kullanılan kimlik doğrulama mesajlarını açıklar.
4.1. The Transcript Hash
El sıkışma sürecindeki tüm mesajların hash değerini içerir.
4.2. Certificate
Sunucu tarafından istemciye gönderilen sertifika.
4.3. Certificate Verify
Sunucu tarafından istemciye gönderilen ve sertifikayı doğrulayan mesaj.
4.4. Finished
El sıkışma sürecini tamamlayan mesaj.
5. End of Early Data
Erken veri gönderiminin sona erdiğini belirtir.
6. Post-Handshake Messages
El sıkışma sonrası kullanılan mesajlar.
6.1 New Session Ticket Message
Yeni oturum bileti mesajı.
6.2 Post-Handshake Authentication
El sıkışma sonrası kimlik doğrulama mesajı.
6.3 Key and Initialization Vector Update
Anahtar ve başlatma vektörü güncellemesi mesajı.
TLS Fingerprint nedir?
İsmi, benzersiz olmasından gelmektedir. İstemcinin veya sunucunun TLS bağlantısı sırasında gönderdiği özelliklerin özetidir. TLS Fingerprint, istemci veya sunucu hakkında benzersiz bir kimlik sağlar. Ağ trafiğinin analiz edilmesi ve güvenliğin sağlanması açısından önemlidir. Özellikle kötü amaçlı trafik tespiti, bot aktiviteleri ve DDoS saldırılarının önlenmesinde kritik bir rol oynar. Tarayıcı türlerinin sınıflandırılmasını sağlayarak daha iyi kullanıcı analitiği sunar. Web Uygulama Güvenlik Duvarı (WAF) sistemlerinde, anormal veya kötü niyetli fingerprint’lere sahip istemcilerin engellenmesi için kullanılır. TLS Fingerprint sayesinde, yalnızca yetkili kullanıcıların bağlanması sağlanır ve sistem daha güvenli hale gelir.
İstemciye TLS Fingerprint atama süreci ClientHello mesajından başlar. Yukarıdaki başlıklara göre Fingerprint için parametreler şunlardır:
Protocol Version (teklif edilen), CipherSuites (teklif edilen), 2.1. Supported Versions, 4.2.7 SupportedGroups, 4.2.8 Key Share, 4.2.3 Signature Algorithms, 4.2.11 Pre-Shared Key(PSK), 4.2.2 Cookie, 4.2.5 OID Filters, Random (32 baytlık veri).
ServerHello mesajından devam eder, başlıklara göre fingerprint için değerler şunlardır:
Protocol Version (teklif edilenler arasından sunucunun seçtiği), Cipher Suites (teklif edilenler arasından sunucunun seçtiği), 2.1. Supported Versions, , 4.2.7 Supported Groups,4.2.8 Key Share, 4.2.3 Signature Algorithms, 4.2.11 Pre-Shared Key(PSK), 4.2.2 Cookie, 4.2.5 OID Filters, Random (32 baytlık veri).
Random, fingerprinting için doğrudan kullanılmaz. Bağlantıyı benzersiz hale getirmek için ortak verilen anahtarda işlenir. Random değerinin ilk 4 baytı sunucunun timestamp (zaman damgası) olarak atanır. Bu bilgi, saldırılarda potansiyel zamanlama analizleri yapmak için kullanılabilir.
Penetrasyon testi sırasında yapılan işlemler WAF tarafından kötü niyetli trafik olarak algılanacağından dolayı test yapan kişi için önemler alır. Çoğu sistemde kullanıcıdan bot doğrulaması yapmasını ister.
JA3 Fingerprinting Metodu
JA3ve JA3S , 2017 yılında John Althouse tarafından herhangi bir platformda üretilmesi kolay olan ve tehdit istihbaratı için kolayca paylaşılabilen SSL/TLSistemci fingerprintleri oluşturulması için bir yöntemdir. JA3, bir istemci uygulamasının TLS üzerinden iletişim kurma biçimini, JA3S ise sunucu yanıtını fingerprinting ile tanımlar. Birlikte kullanıldıklarında, istemci ve sunucu arasındaki kriptografik müzakerenin bir parmak izini oluştururlar. Her zaman TLS tabanlı tespitler için kesin bir çözüm ya da istemci uygulamalarıyla garantili bir eşleştirme olmasa da, analiz için değerli bir başlangıç noktası sağlarlar. JA3 Fingerprint aşağıdaki parametrede kullanılan değerlerin MD5 hashlenmiş versiyonudur:
SSLVersion, Cipher, SSLExtension,EllipticCurve, EllipticCurvePointFormat
Bu parametreler, Wireshark programı ile incelendiğinde, kaç adet bulunduğu ve sürüme atanmış olan ID değeri ile şifreleme işlemi gerçekleşir.
Örnek: 769, 47-53-5-10-49161-49162-49171-49172-50-56-19-4, 0-10-11, 23-24-25, 0
Bu parametreler MD5 ile şifrelenir: ada70206e40642a3e4461f35503241d5
Oluşturulan JA3 istemci ya da ürün (uygulama) isteklerinde, JA3S ise Sunucu yanıtlarında kullanıyor. JA3 fingerprinting aşağıdaki ürünlerde kullanılabilmektedir:
Java,Go, AWS Network Firewall, AWS WAF, Google Cloud, Azure Firewall, Cloudflare, VirusTotal, Splunk, Darktrace, ExtraHop, NetWitness, Elastic.co Packetbeat, IBMQRadar Network Insights (QNI), Security Onion, Vectra Cognito Platform, Corelight, Suricata, Moloch, Trisul NSM, RockNSM, MISP, Stamus Networks,Corvil, AIEngine, InQuest, SELKS, ICEBRG, MantisNet, NGiNX BFE, Redsocks
JA3 aracılığıyla oluşturulan benzersiz fingerprint’ler, kara liste oluşturarak kötü amaçlı istemcilerin bilinen imzalarıyla eşleştirilebilir veya tehdit istihbarat platformlarına entegre edilebilir. Bu sayede potansiyel olarak zararlı veya yetkisiz ağ etkinlikleri hızla belirlenebilir ve ağ güvenliği artırılabilir. Ancak, JA3 tek savunma hattı olarak değerlendirilmemelidir, çünkü ClientHello mesajında yakalanan niteliklerin kapsamı sınırlıdır ve rastgelelik faktörü nedeniyle kesin bir koruma sağlayamaz. Ayrıca, JA3 fingerprint’ler değiştirilebilir ve manipüle edilebilir.
JA3 Fingerprint Manipülasyonu
Bağlantı sırasında sunucuya gönderilen parametrelerde yapılan en ufak değişiklik, JA3 Fingerprint hash değerinin değişmesine neden olmaktadır. Kötü niyetli bir kişi, bu bağlantıyı manuel olarak kurarken Cipher Suite ve Protocol Version parametrelerini değiştirerek JA3 Fingerprint’i değiştirebilir.
Burp Suite ile Kolay Manipülasyon:
Burp Suite içerisinde, TLS Fingerprint parametrelerini değiştirerek atlatma işlemi gerçekleştiren otomatik bir araç bulunmaktadır. bypass-bot-detection eklentisi, istemci tarayıcı kodunu değiştirerek Fingerprint hash değerini farklı hale getirir ve alınan önlemlerin atlatılmasını sağlar.
Kullanım Örneği:
Manuel TLS Handshake:
openssl s_client -connect :443 -cipher ECDHE-RSA-AES128-GCM-SHA256 -tls1_2 -servername example.com
Bu komut kullanılarak TLS bağlantısında JA3 Fingerprint değeri değiştirilebilir ve manipüle edilebilir.
Kaynakça
1. RFC8446
https://datatracker.ietf.org/doc/html/rfc8446
2. bypass-bot-detection
https://github.com/PortSwigger/bypass-bot-detection
3. JA3
https://github.com/salesforce/ja3
4. JA3algorithm
https://github.com/jabedude/ja3-rs
5. JA3fingerprinting
https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/