mitm (Man In The Middle) HTTP(S) proxy CCC-ben

Fórumok

Felraktam ide egy egyszerű, CCC-ben írt mitm (man in the middle) HTTP(S) proxyt. Mire jó?

* Szórakoztató.

* Tanulmányozni lehet vele a HTTP üzeneteket.

* Ki lehet belőle nézni egy csomó fontos dolgot: socket programozás, ssl programozás, autentikáció, kulcsgenerálás.

* Le lehet tiltani bizonyos site-okat. Ha például elegem van belőle, hogy a browser tízezredszer is konnektál a safebrowsing.googleapis.com-ra (a mobilinternetem terhére), akkor azt letilthatom.

Man in the middle: Azaz a böngésző és a szerver üzeneteit közvetíti egymásnak. Eközben a HTTP üzeneteket elemzi, hogy értse, mikor melyik és mekkora üzenetrész (header, body, chunk) következik, és hogy mikor mennyit kell olvasni a socketekből. Ehhez nyilvánvalóan dekódolni kell a titkosított üzeneteket, majd a továbbítás előtt újra titkosítani. A böngésző ellenőrzi (ellenőrizné) a szerverek tanúsítványát, a program ezek helyett röptében olyan tanúsítványt generál, amit a böngésző elfogad.

Látni lehet belőle, milyen egy CCC program hangulata. Hasonló, mint a pythoné, kivéve, hogy nem interpretált, hanem fordított/linkelt programról van szó. Az egész program kb. 700 sor (pythonban is kb. ennyi volna). Csak a legelemibb dolgokat tudja, de az olyan egyszerűbb oldalak, mint a hup.hu vagy a github.com már böngészhetőek rajta keresztül.

Hozzászólások

Ha valóban ez volt a célod, akkor a publikáció/announcement előtt én még megtettem volna pár dolgot vele:
* valami használati utasítás + build instructions
* egyáltalán, hol kell ezt futtatni? a routereden? A telefonodon? Hogy fog szűrni?
* milyen certtel írja alá azokat az oldalakat, akiknek amúgy olyan a certjük, amik nem a "közismert" CA-k valamelyike által van aláírva? Ilyenkor szokás az invalidságot egy másik invalid certtel való aláírással helyettesíteni
* ahogy látom, elég sok helyen bash scriptek vannak benne. Aztán a bash-ban meg zgrep.exe. Ennyire hordozhatatlanra sikerült megírni? Vagy a fordító csak windowsra létezik? Ha létezik normális platformokra is, akkor miért írod a .exe kiterjesztést a scriptbe? A windows (os bash) akkor is lefuttatja, ha csak zgrep -et írsz, a .exe nélkül.

Ezek amiket egy első blikkre, kb. 3,5 percet rászánva a projektre feltűnt.
Ebből még a CCC hangulata számomra... tartok tőle, nem a valós képet tükrözi! ;-)

Köszönöm a kérdéseket.

* valami használati utasítás + build instructions

A szomszédos projektekben le van írva a CCC környezet létrehozása és a CCC telepítés. Ezt itt nem ismétlem meg. Ha már van CCC környezet, akkor egy xterm-ben el kell indítani az m bash-scriptet (make), ami mindent lefordít. Ez nagyjából minden projektben így van, és ez lényeges eleme a CCC hangulatnak. Az s bash-script (start) elindítja a programot (a listener részét). A program a localhost:3128-on figyel. Az FF-ben be kell állítani manual proxy configuration-ban a localhost:3128-at (ez a defaultja). Installálni kell az FF-be a lejjebb tárgyalt cert-et. Ezután az FF+proxy működik.

* egyáltalán, hol kell ezt futtatni? a routereden? A telefonodon? Hogy fog szűrni?

Én a Linux desktopomon futtatom egy xterm-ben. Természetesen más lehetőség is volna, systemd service, vagy akármi.

* milyen certtel írja alá azokat az oldalakat, akiknek amúgy olyan a certjük, amik nem a "közismert" CA-k valamelyike által van aláírva? Ilyenkor szokás az invalidságot egy másik invalid certtel való aláírással helyettesíteni

A site subdirectoryban van a kulcspár, amit használok. Egy egyszerű selfsigned root CA cert. Ezt installálni kell az FF authorities tabjában. Bárki csinálhat ilyet, vagy használhatja, amit kap a repóból, mindegy. A generált certek az előbbi cert-tel vannak aláírva.

* ahogy látom, elég sok helyen bash scriptek vannak benne. Aztán a bash-ban meg zgrep.exe. Ennyire hordozhatatlanra sikerült megírni? Vagy a fordító csak windowsra létezik? Ha létezik normális platformokra is, akkor miért írod a .exe kiterjesztést a scriptbe? A windows (os bash) akkor is lefuttatja, ha csak zgrep -et írsz, a .exe nélkül.

Először: Ez most Linuxon fut, ezért látsz bash scripteket. A linkelt programoknak lesz ugyan exe kiterjesztése, de az nem zavarja a Linuxot. Nincs kipróbálva, de 100%, hogy a program ugyanebben az állapotban fut FreeBSD-n és NetBSD-n.

Másodszor: Az is biztos, hogy a program lefordulna és jól linkelődne Windowson. Ha Windowson csináltam volna, akkor a bash-scriptek helyett bat fájlokat látnál: például m helyett m.bat-ot. (Sőt egyszerre ott lehetne az m és az m.bat.) Ahhoz, hogy fusson is (!) a program Windowson, kell a windowsos openssl infrastruktúra. Az opnssl könyvtárakról tudom, hogy megvannak (használom őket), de kell az openssl program is. Feltételezem, hogy ez is megvolna. Ezenkívül van egy rész a programban, ami kiír egy bash scriptet, hogy aztán végrehajtsa. Ezt helyettesíteni kéne valami mással. Ehhez most nincs motivációm, de teljesen biztos, hogy gyorsan futásra kész állapotba tudnám hozni a programot Windowson is.

A CCC hangulaton azt értem, hogy konkrét CCC ismeretek nélkül is látja egy programozó, hogy hány prg fájlról van szó, azok mekkorák, milyen és hány függvény van bennük, milyen osztályok, metódusok vannak, milyenek a vezérlési struktúrák, a kivételkezelés stb. Vagyis, hogy miről van szó.

--
ulysses.co.hu

Mire lehet használni egy ilyen proxyt:

A feleségem irodájában néha beragad a nyomtatás. Nyelvtanárnőkről beszélünk, ezért nem magától értetődő, hogyan tudnának továbblendülni a problémán. Tehát felhívnak. Ilyenkor be-ssh-zok hozzájuk, és a cups webes interfészén keresztül javítom a hibát. Nyáron azonban csak mobilinternetem van, mobilinterneten kínszenvedés kivárni a firefoxot. Helyette elindítom náluk a mitm proxy-t, a proxy portját forwardolom. A nálam futó firefox a náluk futó proxy keresztül látja a világot, tehát simán eléri az ottani lokális hálózaton levő cups szervert. Az X protokoll helyett csak a HTTP-re kell várni. Lényegében ez egy alkalmi (egy feladatra szóló) vpn.
--
ulysses.co.hu

Köszi, hogy megosztottad, nekem nagyon hasznos volt!
A te programodat ez természetesen nem minősíti rosszul, de azt megtudtam, hogy a CCC hangulatából nem kérek, köszönöm szépen.