Transparent Proxy ile SSL Trafiğini Yönetmek

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, http://facebook.com sayfasını yasakladığınızda kullanıcılar https://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, https://www.facebook.com 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://wiki.squid-cache.org/Features/SslBump?highlight=%28CategoryFeature%29

http://www.squid-cache.org/Doc/config/https_port/

 

Yazar
Ozan UÇAR
ozan.ucar@bga.com.tr