JA3 Parmak İzi Etkinleştirme¶
Bu makale, NGINX gibi popüler yazılımlar ve AWS, Google Cloud ve Azure gibi altyapılar için JA3 parmak izi etkinleştirme yöntemini açıklamaktadır.
Genel Bakış¶
Saldırganlar, kullanıcı aracısı (UA) sahteciliği ve IP döndürme gibi çeşitli teknikler kullanarak güvenlik önlemlerini aşmaya çalışırlar. Bu yöntemler, doğrulanmamış trafiğe yönelik davranışsal saldırıları tespit etmeyi zorlaştırır. JA3 fingerprinting yöntemi, istemci ile sunucu arasındaki TLS müzakeresi sırasında tanımlanan belirli parametreler için bir MD5 karması üretir. Bu parmak izi yöntemi, API session işleme sürecinin bir parçası olarak tehdit aktörlerinin tanımlanmasını güçlendirebilir ve API abuse prevention kapsamında davranışsal bir profil oluşturulmasına katkıda bulunabilir.
NGINX¶
NGINX üzerinden JA3 parmak izi elde edilebilmesi, bu tanımlama yönteminin tüm NGINX tabanlı Wallarm dağıtım seçenekleri içinde kullanılabilir olmasını sağlar. JA3 için iki NGINX modülü bulunmaktadır:
Module | Description | Installation |
---|---|---|
nginx-ssl-ja3 | JA3 için ana nginx modülü. THIS IS NOT PRODUCTION işareti taşıyor. Bu nedenle başarı garantisi yoktur. | Instructions |
nginx-ssl-fingerprint | JA3 için ikinci nginx modülü. high performance etiketini taşır ve ayrıca beğeni ve fork'ları bulunmaktadır. | Instructions |
Her iki modülde de OpenSSL ve NGINX yamalanmalıdır.
nginx-ssl-fingerprint
modülünden bir modül kurulumu örneği:
# Clone
$ git clone -b OpenSSL_1_1_1-stable --depth=1 https://github.com/openssl/openssl
$ git clone -b release-1.23.1 --depth=1 https://github.com/nginx/nginx
$ git clone https://github.com/phuslu/nginx-ssl-fingerprint
# Patch
$ patch -p1 -d openssl < nginx-ssl-fingerprint/patches/openssl.1_1_1.patch
$ patch -p1 -d nginx < nginx-ssl-fingerprint/patches/nginx.patch
# Configure & Build
$ cd nginx
$ ASAN_OPTIONS=symbolize=1 ./auto/configure --with-openssl=$(pwd)/../openssl --add-module=$(pwd)/../nginx-ssl-fingerprint --with-http_ssl_module --with-stream_ssl_module --with-debug --with-stream --with-cc-opt="-fsanitize=address -O -fno-omit-frame-pointer" --with-ld-opt="-L/usr/local/lib -Wl,-E -lasan"
$ make
# Test
$ objs/nginx -p . -c $(pwd)/../nginx-ssl-fingerprint/nginx.conf
$ curl -k https://127.0.0.1:8444
NGINX yapılandırma örneği:
server {
listen 80;
server_name example.com;
…
# JA3 parmak izi başlığını başka bir uygulamaya proxy ile ilet.
proxy_set_header X-Client-TLS-FP-Value $http_ssl_ja3_hash;
proxy_set_header X-Client-TLS-FP–Raw-Value $http_ssl_ja3;
# İsteği proxy uygulamaya ilet.
proxy_pass http://app:8080;
}
AWS¶
AWS CloudFront üzerinden JA3 parmak izlerini alma yapılandırmasını gerçekleştirebilirsiniz.
Wallarm, CloudFront ile entegre olarak CloudFront-Viewer-JA3-Fingerprint
ve CloudFront-Viewer-TLS
JA3 başlıklarını alabilir:
-
CloudFront konsoluna gidin ve Origin Request Policies sekmesini seçin.
-
Create Origin Request Policy seçeneğine tıklayın ve politika detaylarını belirleyin.
-
Actions bölümünde, Add Header seçeneğini seçin.
-
Header Name alanına
CloudFront-Viewer-JA3-Fingerprint
değerini girin. -
Create butonuna tıklayın. Böylece, orijin istek politikanız oluşturulmuş olur.
-
Oluşturulan istek politikasını CloudFront dağıtımınıza eklemek için aşağıdaki adımları izleyin.
-
CloudFront konsolunda, politikayı eklemek istediğiniz dağıtımı seçin.
-
Origin Request Policies yanındaki Edit butonuna tıklayın.
-
Oluşturduğunuz politikanın yanındaki onay kutusunu işaretleyin ve değişiklikleri kaydedin.
Artık orijin istek politikanız CloudFront dağıtımınıza eklenmiş durumda. Dağıtımınıza istek yapan istemcilere artık
CloudFront-Viewer-JA3-Fingerprint
başlığı eklenmiş olacaktır.
Google Cloud¶
Klasik Google Cloud Application Load Balancer'dan JA3 parmak izi alabilmek için özelleştirilmiş başlık yapılandırması yaparak değeri tls_ja3_fingerprint
değişkeni aracılığıyla elde edebilirsiniz:
-
Google Cloud konsoluna gidin → Load balancing.
-
Backends sekmesine tıklayın.
-
Bir backend servisi ismine tıklayın ve ardından Edit seçeneğini seçin.
-
Advanced configurations bölümüne tıklayın.
-
Custom request headers altında, Add header butonuna tıklayın.
-
Header name alanına bir başlık ismi girin ve Header value alanına
tls_ja3_fingerprint
değerini atayın. -
Değişiklikleri kaydedin.
Detaylı talimatlar için bakınız buraya.
Örnek yapılandırma isteği:
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
"customRequestHeaders": [
"X-Client-TLS-FP-Value: {tls_ja3_fingerprint}"
]
Azure¶
Azure Wallarm dağıtımı için, yukarıda NGINX bölümünde açıklanan NGINX üzerinden JA3 parmak izi elde etme yöntemini kullanın.