HTTP Vekil (Proxy)

http proxy kavramı, araya girme, istek yakalama, istek/yanıt değiştirme konuları

HTTP Vekil (Proxyarrow-up-right) Sunucular, gelen HTTP isteklerini yönlendirir. Normalde istemci GET isteklerinde yol (path) gönderilirken; vekil sunuculara yapılan isteklerde tam yolarrow-up-right (URL) gönderilir.

Burp, ZAProxy gibi araçlar kullanılırken tarayıcılarda HTTP vekil sunucu ayarı yapılır. Bu araçlar güvenlik araştırmalarında sıklıkla kullanılır.

HTTP proxy'ler forward (ileri) ve reverse (tersine?) proxy'ler olmak üzere ikiye ayrılır. İç ağdan dışarı çıkan istemcilerin HTTP tarafiği ara bir sunucudan geçiyorsa bu sunucu forward proxy'dir denilebilir. Ayrıca transparan, anonim proxy'ler de mevcuttur Internet'te. Ayrıca bkz. (socks proxy, tor proxy). Bu tip vekil sunucularda TLS trafiği açılıp incelenmez Burp Suite'de olduğu gibi. Bunların haricinde MITM vekil sunucular da mevcuttur. TODO: MITM proxy araştır.

Dışardan örneğin Internet'ten gelen istekleri DMZ ağımızda karşılıyan NGINX, Apache gibi web sunucular karşılayıp, bu istekleri upstream/backend/asıl sunuculara yönlendirebilir. Bu yaklaşımda dışardan gelen istekler arasına bir katman daha koyarak güvenlik sağlanmaya çalışılıyor. Ayrıca reverse proxy'lere mod_security/naxi gibi çözümler de eklenecek güvenlik artırılabiliyor. Bunlara genel olarak WAF ya da web application firewall deniliyor.

Basit olarak bir forward proxy nasıl çalışır? Nasıl implemente edilir?

Bunun için ilk önce TinyProxyarrow-up-right' yi derleyip çalıştırabiliriz. TinyPRoxy hem forward proxy hem de reverse proxy olarak kullanılabilmektedir.

git clone https://github.com/tinyproxy/tinyproxy
cd tinyproxy
./autoreconf
./configure
./make
./src/tinyproxy -d -c ./etc/tinyproxy.conf

Bundan sonra proxy'miz 8888 portunda çalışmış olacak. netstat ile çalışıp çalışmadığına bakılabilir.

Şimdi örnek bir istek yapalım:

telnet localhost 8888
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET http://www.example.com/ HTTP/1.1

Yukarıdaki gibi istek yaptığımızda istek sonuç başlığı ve gövdesi dönecektir:

Tarayıcımızda proxy/vekil sunucu ayarlarında localhost:8888 yaparak da Internete çıkabiliriz. TinyProxy sununun standart çıktısı yapılan istekleri gösteriyor olacaktır:

HTTP proxy implementasyon için aşağıdaki sorulara bakılabilir:

TODO:

1) Linux makinenizde tinyproxy çalıştırıp mobil telefonunuzun ağını tinyproxy'den geçirip log'ları inceleyin.

2) HTTP Proxy yazılması:

3) TODO: TinyProxy sunucu koduna ekleme yapılması

Last updated