DD-WRT backdoor -- 2007.04.18 óta???

Felrámoltam a VPN (DD-WRT v24-sp1 (07/27/08) vpn) cuccost, és jött vele két tűzfalszabály is:


root@mazsola:~# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT 0 -- 194.231.229.20 0.0.0.0/0
ACCEPT 0 -- 212.65.2.116 0.0.0.0/0 

Rátaláltam a fórumban, értelmes megoldás nincs, úgyhogy ennyit erről a cuccosról.

A src/router/services/networking/firewall.c fájlban már a 6627 revízióban (Dátum: 04/18/2007 05:45:25 AM, Author: BrainSlayer Log message: some refactoring for better editing and structuring) is benne voltak az ominózus címek.

Na erre tessen gombot varrni...

Hozzászólások

Nálam sincs:


Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     0    --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
DROP       udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:520 
DROP       udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:520 
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:520 
DROP       icmp --  0.0.0.0/0            0.0.0.0/0           
DROP       2    --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     0    --  0.0.0.0/0            0.0.0.0/0           state NEW 
logaccept  0    --  0.0.0.0/0            0.0.0.0/0           state NEW 

--
Én TUDOM, hogy igazam van. És ha nincs is, akkor is NEKEM van igazam, mert én vagyok az Admin. Ennyi!

Verzió, build? A friss, ropogós VPN-es build tartalmazza. A tavaly áprilisban bekommitolt C-forrásban már szerepelt:


        #ifdef HAVE_GGEW
 	  {"ral", "212.65.2.116 194.231.229.20 172.16.0.0/28", 0},
 	#else
 	  {"ral", "212.65.2.116 194.231.229.20", 0},
 	#endif

Azaz akár HAVE_GGEW, akár nem, belekerülnek a jóval feljebb elkezdett srouter_defaults-ba, ami nvram_tuple...

forumot is olvastok vagy csak gyartjatok az elmeleteket? az egyik hozzaszolasban irja a csavo, hogy egy ugyfelnek fejlesztett valamit, es bennmaradt veletlenul. aztan ki is szedtek.

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Olvasok fórumot, de nagyon nem hihető a dolog, vagy ennyire f...sz kódhegesztők vannak arrafelé (is).
A forrásba hardcoded IP-k a defaults.c fájlban 2007.04.18-án már benne voltak, brainslayer szerint valóban chris rakta bele egyz ügyfél kérésére. Amiért ez nehezen hihető/védhető álláspont az a következő néhány dolog:

-Mit keres a mainstream forrásban egy ügyfélnek szánt speciális kódrészlet?
-Miért nincs legalább kommentezve, hogy _ez_itt_ügyfélnek_van_ki_kell_dobni_?
-Milyen ügyfél az, aki nem törölhető/boot során visszaállításra kerülő, bedrótozott tűzfalszabályra tart igényt?
-Miért csak most (amikor borult a bili) szedték ki, bő egy évvel a mainstream forrásba kerülése után?

A fenti négy dolgot kéne megmagyarázni, azonban ezzel a bő egy éves(!) bedrótozott IP-listával nem igazán lehet dicsekedni, hogy finoman fogalmazzak.

mar itt benne volt, pedig ez mar 3 eves fajl. Hogy miert maradt benne? passz. lehet csak teszt miatt rakta bele az ipt. aztan lehet eleg sokat kodolt, es elfelejtette hogy berakta az ipt. de ez mar a nagymama-sargavillamos esete...

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Ez a "ki tudja, miért tette bele..." dolog egy tűzfal esetén khm. felettébb kínos. A kérdés az, hogy milyen körülmények között fordul úgy a stuff, hogy beállításra is kerüljön a rule? Az meg egy másik kérdés, hogy HA üf. teszt, akármi céllal rakta bele, akkor miért nem rámolt köré egy olyan ifdef-et, ami erre utal, és normál build során a bedrótozást teljes mértékben elkerüli vele? Ami ki lett hajítva, az nem jó, hiszen ott az ifdef/else mindkét ágában bedrótozásra került...

Ez mindenképp durva programozási hiba (is) volt, azonban nem csak a fejlesztőkre nézve szégyen, hanem az opensource fejlesztési modell "több szem többet lát" elvét is igencsak cáfolja... És ez orrrrrdított a kódban... Ha valaki vette volna az nagy büdös fáradságot, és átnézte volna, mit is rámol fel tűzfal gyanánt a gépére...

Durva, de nem egy év, hanem az initial revision-ban is benne voltak ezek az IP-k, úgy három éve... Nagyon gáz, hogy akkor _sem_ olvasta/gondolta végig brainslayer az ott leírtakat, sőt, a tavaly áprilisban befejezett "refactoring" során sem szórta ki... No comment.

Megkuksiztam a firewall.c "refactoring" utáni első (szintén tavaly áprilisi) verziójában már benne volt a start_firewall() függvény végén az a kódrészlet, ami az nvram "ral" változóiból berakta az iptables-szabályokat.

A kódból látszik, hogy az insert rész egy egységet képezően lett belehajítva a kódba, hiszen a változók deklarálása is ott van a használatuk előtt, nem pedig a függvény elején (egy normális refakoring/reformat során ezt is illene rendberakni...).

"az egyik hozzaszolasban irja a csavo, hogy egy ugyfelnek fejlesztett valamit, es bennmaradt veletlenul."

ROTFLOL. Tudod, en akkor szulettem, amikor a nickem szerint, tehat nem vagyok gyerek, hogy minden meset megegyek. Meg hat, hasonlo esetbe en is ezt mondanam.

Foleg az, hogy ez egy tuzfalszabaly, igazabol ertelmes indok nincsen ra, hogy C kodbol kelljen kezelni, mikor barmelyik init script beteheti. Arrol nem beszelve, hogy igaza van a felettem szolonak, hogy ha mar megis beleirom, valoban jobban korul kell ifdefezni, es ertelmes ifdef nevet adni a dolognak, hogy rogton kideruljon a turpissag. En is szoktam bedrotozni test dolgokat, de azokat meg is jelolom a kodban, hogy ha elesedik a rendszer, akkor mar bele sem fordul.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

No ez az... Én sem vagyok mai gyerek (-197700 a date +%s -d "..." alapján), úgyhogy a mesékből már kinőttem -- nem kicsit... Elgondolkodtatott az is, hogy brainslayer kiszedte a defaults-ból a két címet, a firewall.c -ből a start_firewall() függvényből a rule-ok berakását -- de a stop_firewall()-ból a szabály kiszedését pl. nem. Az is érdekes, hogy bár az eredeti, három évvel ezelőtti(!) eredeti defauls-ban benne leledzett a két cím, de az újraírás során sem került ki belőle... No mindegy, ezek után számomra a dd-wrt nem létező dolog.