Mitm Saldırısı
HTTPS trafiği, 128 bit ssl sertifikası ile şifreli iletişim kuran güvenli HTTP katmanıdır. HTTPS oturumu için, istemci sunucu ile CONNECT methodunu kullanarak bağlantı kurar ve aradaki tüm trafik 128 bit şifreli oluşur.
Saldırganlar, HTTPS oturumunda araya girmek için Man in the Middle (mitm) saldırısı gerçekleştirirler.Bu saldırı ile saldırgan, istemci ile sunucu arasınadaki tüm trafiği üzerine çeker. İstemciye https oturumu kurması için sahte bir sertifika üretir ve hedef sunucu ile gerçek ssl sertifikasını kullanarak bağlantı gerçekleştirir. Bu durumda https trafiği şifreli oluşmasına rağmen saldırgan ssl trafiğini çözecek anahtarlara sahiptir.
Proxy sunucularda transparent modda https trafiğini filtreleyememektedir. Dolayısı ile, görünmez modda (transparent olarak) araya giremiyor ve oturumu yönetemiyorlar. Bu durumda, sayfasını yasakladığınızda kullanıcılar https://www.facebook.com/ adresine kolaylıkla erişim sağlayabiliyorlar. Veya https trafiği ile tünelleme yapan yazılımlar ile proxy sunucular atlatılabiliniyor.
Squid SSL-Bump Özelliği
Squid 3.1 versiyonu ile, squid-in-the-middle geliştirilmiş ve transparent olarak https trafiğini yönetebilme özelliği eklenmiştir.
Test Ortamı
Test Ortamı
FreeBSD 7.2 işletim sistemi kullanılmıştır.
# uname -nprs
FreeBSD freebsd.cehturkiye.com 7.2-RELEASE i386
Squid Sürümü ve Derleme Seçenekleri
# squid -v
Squid Cache: Version 3.1.12
configure options: ‘–with-default-user=squid’ ‘–bindir=/usr/local/sbin’ ‘–sbindir=/usr/local/sbin’ ‘–datadir=/usr/local/etc/squid’ ‘–libexecdir=/usr/local/libexec/squid’ ‘–localstatedir=/var/squid’ ‘–sysconfdir=/usr/local/etc/squid’ ‘–with-logdir=/var/log/squid’ ‘–with-pidfile=/var/run/squid/squid.pid’ ‘–enable-removal-policies=lru heap’ ‘–disable-linux-netfilter’ ‘–disable-linux-tproxy’ ‘–disable-epoll’ ‘–disable-translation’ ‘–enable-auth=basic digest negotiate ntlm’ ‘–enable-basic-auth-helpers=DB NCSA PAM MSNT SMB squid_radius_auth’ ‘–enable-digest-auth-helpers=password’ ‘–enable-external-acl-helpers=ip_user session unix_group wbinfo_group’ ‘–enable-ntlm-auth-helpers=smb_lm’ ‘–enable-storeio=ufs diskd aufs’ ‘–enable-disk-io=AIO Blocking DiskDaemon DiskThreads’ ‘–disable-ipv6’ ‘–disable-snmp’ ‘–enable-ssl’ ‘–with-openssl=/usr’ ‘–enable-ipfw-transparent’ ‘–enable-pf-transparent’ ‘–enable-follow-x-forwarded-for’ ‘–disable-ecap’ ‘–disable-loadable-modules’ ‘–enable-kqueue’ ‘–prefix=/usr/local’ ‘–mandir=/usr/local/man’ ‘–infodir=/usr/local/info/’ ‘–build=i386-portbld-freebsd7.2’ ‘build_alias=i386-portbld-freebsd7.2’ ‘CC=cc’ ‘CFLAGS=-O2 -fno-strict-aliasing -pipe -I/usr/include’ ‘LDFLAGS= -rpath=/usr/lib:/usr/local/lib -L/usr/lib’ ‘CPPFLAGS=’ ‘CXX=c++’ ‘CXXFLAGS=-O2 -fno-strict-aliasing -pipe -I/usr/include’ ‘CPP=cpp’ –with-squid=/usr/ports/www/squid31/work/squid-3.1.12 –enable-ltdl-convenience
Not: Squid 3.1.x versiyonu –enabl-ssl , –enable-icap-client ve –enable-pf-transparent desteği ile derlenmiş olmalıdır
HTTP ve HTTPS trafiğini Squid’e Yönlendirme
Minimum pf.conf kuralları
# cat /etc/pf.conf
# squid ssl-bump testi için Ozan UÇAR tarafından oluşturulmuştur.
int_if=”em1″
ext_if=”em0″
lan=”172.16.16.0/16″
wan=”10.0.0.0/24″
nat on $ext_if from $int_if:network to any -> ($ext_if)
rdr on $int_if inet proto tcp from $lan to any port www -> 172.16.16.88 port 3128
rdr on $int_if inet proto tcp from $lan to any port 443 -> 172.16.16.88 port 3129
pass in log all
pass out log all
Kurallar pf tarafından yüklendiğinde
Yönlendirme kuralları
# pfctl -sn
nat on em0 inet from 172.16.0.0/16 to any -> (em0) round-robin
rdr on em1 inet proto tcp from 172.16.0.0/16 to any port = http -> 172.16.16.88 port 3128
rdr on em1 inet proto tcp from 172.16.0.0/16 to any port = https -> 172.16.16.88 port 3129
Filtreleme kuralları
# pfctl -sr
pass in log all flags S/SA keep state
pass out log all flags S/SA keep state
Sertifika Oluşturma
#mkdir /usr/local/etc/squid/ssl_sertifikalari
#cd /usr/local/etc/squid/ssl_sertifikalari
#openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout www.bga.com.tr.pem -out www.bga.com.tr.pem
Not: Squid için üretilen sertifika geçerli bir CA tarafından imzalanmadığı için browser’da uyarı verecektir.
Squid.conf SSL-Bump Ayarları
always_direct allow all
ssl_bump allow all
http_port 172.16.16.88:3128 transparent
#ssl-bump islemi icin
https_port 172.16.16.88:3129 transparent ssl-bump cert=/usr/local/etc/squid/ ssl_sertifikalari /www.bga.com.tr.pem key=/usr/local/etc/squid/ ssl_sertifikalari /www.bga.com.tr.pem
İstemci Tarafında Test İşlemi
İstemci, adresini ziyaret ettiğinde geçersiz bir SSL sertifikası uyarısı alacaktır. Sertifikanın detaylarına baktığımızda;
Bu sertifikayı kabul eden istemcinin https oturumu squid tarafından yönetilebilir olacaktır. Dolayısı ile bir facebook.com yasak kuralı yazdığımızda https oturumunuda filtreleyebiliriz.
Facebook Block ACL
squid.conf;
acl face dstdomain .bga.com.tr .facebook.com
http_access deny face
Referanslar
http://www.squid-cache.org/Doc/config/https_port/