bastlime si hadware keylogger
Uvodom
Takze, preberieme si ako vlastne v principe taky hw keylogger funguje, ako ho
v praxi zbastlit s doma dostupnym naradim a realne kupitelnymi suciastkami,
ako sa proti nemu branit, + ake technologie su dnes "pravdepodobne" dostupne
tymi co maju prostriedky, + co by sme na nasej hracke mohli vylepsit.
Teoria
Budeme sa zaoberat iba AT klavesnicami, starsie XT uz prenechame historikom.
Klavesnica, pred ktorou sedite, ma pravdepodobne PS/2 konektor. (USB budeme
riesit neskor) Ak ma nahodou DIMM konektor, nebude to pre nas problem, pridame
iba dimm->ps/2, a ps/2->dimm redukcie, a mozme sa tvarit ze pracujeme s
ps/2 klavesnicou. PS/2 konektor ma 6 pinov:
^
6 5
4 4
> 2 1 <
1 DATA (data line)
2 nic
3 GND
4 +5V
5 CLK (clock line, "nosna")
6 nic
(teda, to je popis konektoru veduceho z klavesnice, port v motherboarde bude
logicky opacny)
Pracuje sa s 0V-5V logikou, frekvencia moze byt v zavislosti od vyrobcu
10-30 Khz, jeden poslany blok dat ma velkost 11 bitov - start bit (0), 1 byte
v little endiane, teda najmenej vyznamny bit ide prvy, 1 bit neparnej parity
a stop bit (1).
Data sa posielaju po DATA lajne, po CLK lajne sa prenasa synchronizacny
"nosny" signal, bit na DATA lajne sa precita vzdy s padajucou hranou CLK,
(tj. pri prechode z 5 na 0 na CLK).
Protokol pouzivany pri vymene informacii medzi klavesnicou a pocitacom je
kapitola sama o sebe. Prva "zrada" je, ze je obojsmerny, tj. klavesnica
posiela data pocitacu (typicky stlacene klavesy), ale obcas potrebuje aj
pocitac nieco posepkat klavesnici (zapni si capslock, resetuj sa, posli mi
to znova...). V takom pripade stiahne dole CLK lajnu na viac ako 60
mikrosekund, klavesnica pochopi ze uz nehovori ona, ale ma pocuvat, a tak
pocuva. To sa nam bude v nasom keyloggeri pomerne blbo osetrovat, a tak sa
radsej budeme hrat na kapra, a takuto udalost ignorovat.
Druhou zradou su scankody. Klavesnica ma typicky do 110 znakov, niektore s
tlacitkami typu "uvar mi caj","spusti mi kalkulacku" mozno tak max. 150.
1 byte, ktory sa posiela v jednom bloku dat, moze niest 2^8=256 hodnot.
Jedinec idealista by povedal, ze tak kazda klavesa dostane jednu hodnotu, a
vybavene. Houby. Niektore klavesy su tzv. "specialne" a najprv sa posle
hodnota "E0" (v hexa), a az potom samotny scankod klavesy, ktory vsak nemusi
byt nutne unikatny, tj. rovnaky scankod moze exitovat aj pre nespecialnu
klavesu. Ehm. Ale to nie je vsetko mili priatelia, navyse zadarmo dostanete aj
klavesy, ktore produkuju smrst 4, ba i 8 byteov. Mozeme sa to pokusit zvalit
na historicky vyvoj, pridavanie klaves a spa:tnu kompatibilitu, a mozme si z
toho zaroven urobit nazorny priklad sialene navrhnuteho protokolu;) My budeme
specialne klavesy cielene nelogovat, a dlhsie smrste ignorovat. Akekolvek
pripadne neskor pridane klavesy by mali byt minimalne specialne.
Scankody pouzivane v AT protokole nemaju nic spolocne s ascii scankodmi.
Keby sme ich chceli medzi sebou prevadzat, museli by sme pouzit tabulku,
ziadna zavislost neexistuje.
,-------,---,---,---,---,,---,---,---,---,,---,---,---,---, ,-----,-----,-----,
|ESC |F1 |F2 |F3 |F4 ||F5 |F6 |F7 |F8 ||F9 |F10|F11|F12| |PSCRN|SLOCK|BREAK|
|110 |112|113|114|115||116|117|118|119||120|121|122|123| |124 |125 |126 |
'-------'---'---'---'---''---'---'---'---''---'---'---'---' '-----'-----'-----'
,---,---,---,---,---,---,---,---,---,---,---,---,---,-----, ,-----,-----,-----, ,-----,-----,-----,-----,
|~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |<- | |INS |HOME |PGUP | |NLOCK|/ |* |- |
|1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |15 | |75 |80 |85 | |90 |95 |100 |105 |
|---',--',--',--',--',--',--',--',--',--',--',--',--',----| |-----|-----|-----| |-----|-----|-----|-----|
|TAB |Q |W |E |R |T |Y |U |I |O |P |[ |] | | |DEL |END |PGDN | |7 |8 |9 |+ |
|16 |17 |18 |19 |20 |21 |22 |23 |24 |25 |26 |27 |28 |29 | |76 |81 |86 | |91 |96 |101 |106 |
|----',--',--',--',--',--',--',--',--',--',--',--',--'----| '-----'-----'-----' |-----|-----|-----|-----|
|CAPS |A |S |D |F |G |H |J |K |L |; |, |ENTER | |4 |5 |6 | |
|30 |31 |32 |33 |34 |35 |36 |37 |38 |39 |40 |41 |43 | |92 |97 |102 | |
|-----',--',--',--',--',--',--',--',--',--',--',----------| ,-----, |-----|-----|-----|-----|
|SHIFT |Z |X |C |V |B |N |M |, |. |/ |SHIFT | |UP | |1 |2 |3 |ENTER|
|44 |46 |47 |48 |49 |50 |51 |52 |53 |54 |55 |57 | |83 | |93 |98 |103 |108 |
|----,-',--'--,'---'---'---'---'---'---'--,'--,'-----,----| ,-----|-----|-----, |-----------|-----| |
|CTRL| |ALT | SPACE |ALT| |CTRL| |LEFT |DOWN |RIGHT| |0 |. | |
|58 | |60 | 61 |62 | |64 | |79 |84 |89 | |99 |104 | |
'----'--'-----'---------------------------'---'------'----' '-----'-----'-----' '-----------'-----'-----'
,---,-----, ,---,-----, ,---,-----, ,---,-----, ,---,-----, ,---,-----, ,---,-----, ,---,-----,
|KEY|AT | |KEY|AT | |KEY|AT | |KEY|AT | |KEY|AT | |KEY|AT | |KEY|AT | |KEY|AT |
|# |(HEX)| |# |(HEX)| |# |(HEX)| |# |(HEX)| |# |(HEX)| |# |(HEX)| |# |(HEX)| |# |(HEX)|
|---|-----| |---|-----| |---|-----| |---|-----| |---|-----| |---|-----| |---|-----| |---|-----|
|1 |0E | |2 |16 | |3 |1E | |4 |26 | |5 |26 | |6 |25 | |7 |2E | |8 |36 |
|9 |3D | |10 |46 | |11 |45 | |12 |4E | |13 |55 | |14 |-- | |15 |66 | |16 |0D |
|17 |15 | |18 |1D | |19 |24 | |20 |2D | |21 |2C | |22 |35 | |23 |3C | |24 |43 |
|25 |44 | |26 |4D | |27 |54 | |28 |5B | |29 |5D | |30 |58 | |31 |1C | |32 |1B |
|33 |23 | |34 |2B | |35 |34 | |36 |33 | |37 |3B | |38 |42 | |39 |4B | |40 |4C |
|41 |52 | |42 |-- | |43 |5A | |44 |12 | |45 |-- | |46 |1A | |47 |22 | |48 |21 |
|49 |2A | |50 |32 | |51 |31 | |52 |3A | |53 |41 | |54 |49 | |55 |4A | |56 |-- |
|57 |59 | |58 |14 | |59 |-- | |60 |11 | |61 |29 | |62 |E011 | |63 |-- | |64 |E014 |
|65 |-- | |66 |-- | |67 |-- | |68 |-- | |69 |-- | |70 |-- | |71 |-- | |72 |-- |
|73 |-- | |74 |-- | |75 |E070 | |76 |E071 | |77 |-- | |78 |-- | |79 |E06B | |80 |E06C |
|81 |E069 | |82 |-- | |83 |E075 | |84 |E072 | |85 |E07D | |86 |E07A | |87 |-- | |88 |-- |
|89 |E074 | |90 |77 | |91 |6C | |92 |6B | |93 |69 | |94 |-- | |95 |E04A | |96 |75 |
|97 |73 | |98 |72 | |99 |70 | |100|7C | |101|7D | |102|74 | |103|7A | |104|71 |
|105|7B | |106|79 | |107|-- | |108|E05A | |109|-- | |110|76 | |111|-- | |112|05 |
|113|06 | |114|04 | |115|0C | |116|03 | |117|0B | |118|83 | |119|0A | |120|01 |
|121|09 | |122|78 | |123|07 | |124|**1 | |125|7E | |126|**2 | |127|-- | |128|-- |
'---'-----' '---'-----' ----'-----' ----'-----' '---'-----' '---'-----' ----'-----' ----'-----'
**1 = E012E07C
**2 = E11477E1F014F077
Ako ste si iste vsimli, scancody su rozhadzane bez zmysluplnejsej logiky (teda
pre nas, oni tak su kvoli stvorcovej sieti vodicov v klavesnici, aspon tej
povodnej;)), co z toho pre nas vyplyva si nechame na neskor.
Standardne by sitauacia na zbernici mala vyzerat nasledovne:
ak klavesnica posiela data do pocitaca:
__ __ __ __ __ __ __ __
| Clock | | | | | | | | | | | | | |
|_________| |_____| |_____| |_____| |_____| |_____| |_____| |_____
| | | | | | | |
___________________________________________________________________________
/ / / / / /
Data start X 0 X 1 X .. X 7 X Parita X Stop
______/_______/_______/_______/_______/_______/__________
Klavesnica posle start-bit(0), potom scankod klavesy, potom paritny bit a
stop bit(1).
To sa stane ked klavesu stlacime. V pripade ze je scankod viacbajtovy, posiela
sa sa viac krat cely blok(11bitov). Ked klavesu pustime, posle sa scankod "F0",
ktory znaci release, a potom scankod klavesy ktora bola pustena. Samozrejme aj
toto ma vynimku, a pri pusteni specialnej klavesy sa najprv posle "Special"
byte "E0", a potom "F0" a az potom samotny scankod. Nehorazne prakticke;)
Ked chce posielat data host klavesnici, stiahne CLK lajnu dole na aspon 60
mikrosekund (typicky dvojnasobok casu, ktory by mu zabral jeden bit na CLK),
a potom, ak klavesnica akceptovala jeho prerusenie zacne posielat data.
Najdolezitejsie takto posielane veci su stav capsloku a numlocku, a hlavne
ziadost o znovuposlanie scankodu (+pripadne reset,...). Nas, teda keylogger
bude aktivne zaujimat iba keyboard to host prenos dat.
AT protokol je este hodne rozvetvenejsi, s roznymi vynimkami, ale tie budeme
pre nase potreby ignorovat.
Nasa hracka sa teda bude napajat priamo z napajania klavesnice. Budeme pocuvat
na CLK lajne, a v momente ked chytime padajucu hranu, vypocujeme si cely blok.
Ten potom dalej spracujeme, a pripadny vysledok ulozime. Teda budeme potrebovat
mikroprocesor, eeprom pama:t na ukladanie dat, + nejake tie pomocne suciastky.
Prax
Takze, ako na to? Budeme vychadzat z uz hotoveho projektu,
tu [1] sa da najst navod ako
vyrobit jednoduchy hw keylogger. Zariadenie tu popisane prinutime vypluvat
znaky odpojenim klavesnice a stlacenim specialneho tlacitka na nom. Pre nase
potreby pomerne neprakticke, radsej by sme ho predsa len aktivovali heslom,
tym ziskame moznost zabudovat ho dovnutra do klavesnice, a nebyt pritom fyzicky
viditelny. Dalej, na to aby sme boli data z neho schopny precitat potrebujeme
specialnu aplikaciu (ktoru si navyse musime napisat, pretoze autori maju iba
windowsoidnu). To sa nam tiez nepaci, najradsej by sme boli, keby to nasa
hracka vedela vypluvat priamo do textaku. Takze som zobral ich verziu, a
upravil ju k obrazu svojmu. Moju verziu mozme najst na
[2].
Je prepisana do trochu inej syntaxe assembleru, s ktorou pracuje mnou
pouzivany [4].
Bezi pod dosom, a v dosboxe s nim nie su problemy. Trochu bolo potrebne upravit
aj schemu zapojenia, nova je
tu [3].
Moja verzia este nie je uplne dokonala, chybajuce veci a bugy su vypisane na
zaciatku zdrojaku.
Danou za to, ze prisafka vypluva data priamo do textaku je potreba odfiltrovat
vsetky "special" klavesy, + shift, alt, atd... skratka budem vypluvat iba
bezpecne znaky, ktore mi nijak nerozhodia terminal. Backspace interpretujem
specialne ako b. Ono na bezne ucely (ehm, samozrejme vas autor tohto clanku
nechce ani omylom naviest na nic nelegalne, ale keby ste to cisto teoreticky
povazovali za bezny ucel), tj. odchytavanie hesiel, to plne postacuje, setri
to kapacitu eepromky (napr. naco nam je logovanie sipiek nejakeho forbesaka?),
a v pripade ze by sme chceli kompletne vsetky klavesy stlacene, ctenemu
citatelovi nebude robit problem si prisafku jednoducho upravit.
Zdrojovy kod v assembleri sem pastovat nebudem, ani ho popisovat, je
okomentovany, a dufam ze samovysvetlujuci. Miesto toho sa este pozrieme na u
nas prakticky zohnatelne suciastky:
EEPROMKA sa da zohnat max. 512Kbit, (=. 64 000 stlacenych "normalnych" znakov)
co je cca 26 hodin pri pisani 100 znakov za minutu, nam pri "beznom" userovi
vydrzi kludne na tyzden, pripadne aj na (hodne) viac... Ak by sme chceli pouzit
vacsiu (a niekde, napr. zo zahranicia by sme ju splasili), musime prepisat nas
kod, pretoze 512KB este mozme odresovat 16bitmi, ale na viac uz potrebujeme
byty aspon 3. Ale samozrejme ked budeme nutne potrebovat kapacitu, tak sa to
da...
Ostatne suciastky, pripadne velmi podobne ekvivalenty su lahko zohnatelne.
Problem nastava s programatorom. Ten si je najlepsie, pokial mame moznost,
od niekoho pozicat. (teda najlepsie je mat vlastny;) Ked nemame kde pozicat,
mozeme si ho (ak mame cas) zbastlit napr. podla
[5],
pripadne si objednat nejaky lacnejsi (napr. ja pouzivam
[6], jediny problem ze ma ovladace
len pod widle). Celkove je pri programovani mikprocesorov dost problem s
unixami, pretoze vacsina cenovo dostupnych amaterskych veci je ciste windowsna,
v lepsom pripade dosova. (simulatory, programatory, kompilatory..)
Prinajhorsom pouzijeme qemu ci wine.
Ked uz mame naprogramovany chip, tak to cele zbastlime dokopy, na prvu verziu
odporucam nechat si HODNE miesta medzi kontaktmi, aby ste predisli pripadnemu
skratovaniu, hlavne ak nemate s pajkovanim prilis velke skusenosti. Ked bude
vsetko fungovat, mozeme zacat miniaturizovat...
Vychytavky
Relativnym problemom je vyplutie celej eepromky do pocitaca, kedze to trva pri
512Kb EEpromke cca 20 minut. Pri USB aj wireless verzii by tento problem
odpadol.
Keby sme sa chceli hrat na velmi tajnych, mali by sme cele zariadenie dokladne
odtienit, pretoze ficime na 12Mhz, a standardny klavesnicovy kontroler iba na
4Mhz. To by nas teoreticky mohlo odhalit, v praxi ale budeme dost radi, ked
nas zacnu trapit taketo problemy;)
Problemom je aj to, ze ignorujeme opravny protokol klavesnice, obcas, VELMI
zriedka pri zdravej klavesnici sa nieco pokasle(napr. parita nesedi), a
nastane tento pripad. V praxi to byva naozaj velmi zriedka. Ale su klavesnice,
napr. ja som svoju prisafku na takej testoval, ktore maju jednu klavesu choru.
(pripadne i viac) Uzivatel si to nestihne vsimnut, ale skoro vzdy ked sa
klavesa stlaci, pocitac nerozmie, pripadne este raz, a az a treti(stvrty..)
pokus sa prenos podari. Nam to vsak sposobuje hnusne problemy, lebo chvilu
trva, kym potom znova chytime clock, teda mame parklavesove "okno". Tento
problem bude treba v programe osetrit, ale je to pomerne hnusne a komplikovane,
cim nepriamo davam do plena, keby sa niekomu chcelo...;)
Cele by to fyzicky mohlo vyzerat
takto [9]
(pokusna verzia), alebo
takto [10]
(trocha zkompaktnene). Ta pokusna verzia je zbastlena vlastne podla uz
spominaneho navodu [1],
pri tej druhej je to napchane do standardnych PS/2 konektorov.
Ochrana
Ako sa proti hw keyloggerom branit? Tazko;) Podla pomerne pochybneho
vyskumu [7]
je prud odoberany nasou hrackou prilis maly, nez aby sa dal zachytit senzormi
na motherboarde. Pokial nespravime chybu v spracovavani a filtrovani vstupu v
nasej hracke, tak ani nijakymi divocinami posielanymi z pocitaca to nezistime.
Pri rozumne dlhom a nahodnom hesle odpada aj moznost prist na keylogger
nahodou.
Ak je keylogger strceny medzi pocitac a kabel, mozeme ho samozrejeme najst
fyzicky, ale co ak je vnutri v klavesnici? Pripadne na motherboarde?
Rozoberiete kazdu klavesnicu ku ktorej si sadnete? Nezoberu vas skor do Bohnic?
Klawiature skratka nemozno verit...
Nudzovym riesenim, ak mame podozrenie ze dany pocitac nie je cisty,
(pripadne ak to vieme iste;) je pouzit mys, a heslo si vycopy&pastovat.
Uzite si 23znakove "bezpecne" heslo. Ale ked sa inak neda..
Systemovym, a lepsim riesenim je nepouzivat iba identifikaciu heslom, ale
pouzivat bud token, alebo aspon sukromny kluc. Pichnut usb flash, a pouzit tam
ulozeny sukromny kluc je rozhodne ovela lepsim riesenim, a aj prakticky
pouzitelnym. Samotne heslo skratka v dnesnej dobe (teda ak nesedite v
zabetovanom a zabezpecenom bunkri) nestaci. Uplne najidealnejsie by bolo
pouzivat nejaku smartkartu, ktora na zaklade vnutri ulozeneho sukromneho kluca
vygeneruje jednorazovy autorizacny kluc, ale to je vec pomerne draha, ak
nepracujete s skutocne cennymi informaciami, tak usb flash s sukromnym klucom
plne postaci. (a ak s nimi pracujete, potom smartkartu uz aj tak pouzivate;)
Vyssia liga, stay tuned
Toto vsetko si je v domackych podmienkach schopny zbastlit prakticky kazdy so
zakladnymi znalostami elektroniky. Vysledne zariadenie vyzera ako podivna
redukcia, a pred laikom je mozno utajitelna. Ked mate mikropajku, pevne ruky a
pristup k suciastkam, dokazete urobit verziu z SMD suciastiek, ktora uz bude
vyzerat ako pomerne mala, nenapadna redukcia. Pripadne ju lahko schovate do
klavesnice, a napr. aj dovnutra notebooku, kde sa na 99% pouziva v sucasnosti
ps/2 klavesnica. (akurat nema ps/2 konektor, ale 6 dratikov ide vedla seba).
Pomerne nebezpecne, ale...
ale...
ale co dokaze spravit clovek, ktory je schopnejsi ako ja, ma cas, peniaze,
pristup k suciastkam,je plateny iba za cielom spravit co najdokonalejsie
zariadenie? Navyse ak takych ludi date viac na kopu? S cim disponuju
najroznejsie tajne sluzby? Z toho co som nasiel na nete (do ruky sa mi bohuzial
nedostali) su dostupne keyloggere tak male, ze ani nevycnievaju z ps/2 portu,
tj. zasuniete ich dnu, po nich aj ps/2 konektor, ktory bude tak o 2 milimetre
trcat, ale to je vsetko. vsimne si niekto nieco take?;) Pokial presne nevie co
hlada, skutocne tazko.
Zvyknu sa navyse pouzivat wireless keyloggere, takze parchant sa uz na miesto
cinu vratit nemusi, a iba harvestruje data. Okrem toho sa hovori o inych,
ovela zakernejsich metodach, od infracervenych kamier velkosti spendlikovej
hlavicky, ktore snimaju teplotu klaves, a z toho usudzuju co bolo stlacene,
cez malicke plostice, ktore su po "nauceni" sa zvuku klaves schopne jednotlive
klavesy rozlisovat, cez kamery klasicke....
Tato fronta je voci tajnym sluzbam a im podobnym skutocne naplno prehrata,
pretoze amater sa k potrebnym technologiam proste nedostane. Stay tuned...;)
Vizie;)
Inu, takze co sme schopni s nasim amaterskym pristupom z prisafky este vymlatit?
Mozeme zaviest sifrovanie dat v eepromke, otazkou ostava naco? Aj ked su data
v eeprome sifrovane, ak je utocnik dostatocne schopny, proste si zbrusi chip a
precita odtial kluc ... navyse osmibitove procesory dnes typicky ponukaju iba
64 bitovy DES (v praxi 56), co v pripade schopneho nepriatela je mozno
zdrzanie, ale rozhodne nie ochrana.
Mozeme spravit verziu na USB klavesnicu. Tam bude situacia prakticky rovnaka,
iba prisafka bude narocnejsia na suciastky a rychlost, ale principy ostavaju.
Protokol je sice trocha iny, ale zdokumentovany a je to predsa iba hranie sa
s vstupom,nie?;)
Mozeme spravit wireless prisafku. Princip ostane rovnaky, ale pouzijeme chip,
so zabudovanym bezdratovym prijmacom/vysielacom, napr. mojho favorita
cc1010 [8].
Tato prisafka bude potom chytat data a ukladat do eepromky, a zaroven pocuvat
na istej frekvencii. Ked jej pride tajny kluc, prisafka neleni, a ihned
radiovo, sifrovane (zase asi len nas 56b DES;( ) vypluje co len budeme chciet.
A potom zase cuci ako blcha, a tvari sa ze tam nie je. Druhy modul je pichnuty
v usb notebooku, a pekne prijma data. Je ale treba napisat kopu kodu, protokol
opravy chyb,... Ale, ked to uz raz budeme mat, otvara sa nam dalsia cesta,
a sice vkladanie znakov do pocitaca cez nasu wireless prisafku, akasi vzdialena
klavesnica. A to by bol znova skok o stupen dalej. Takto upravena prisafka uz
bude pomerne na urovni, a schopna realneho nasadenia.
Mohli by sme prejst z ATMEL na PIC architekturu. Par ludi mi tvrdilo ze je
schopnych spravit hw keylogger iba pomocou samotneho mikrokontrolera.
(niektore mikrokontrolery nepotrebuju externy krystal, kondenzatory, a ani
startovaci kondenzator), miesto externej eepromky by sme pouzili internu
eeprom pama:t mikroprocesoru. Ja osobne to zatial schopny spravit nie som,
potreboval by som novy programator a prepisat cely kod, ale uzasne by to
zjednodusilo celu konstrukciu (z 7 suciastiek 1). Mozno casom;)
Zdroje & dalsie info
Dalsie, a priebezne doplnovane info sa daju najst na
https://hysteria.sk/~niekt0/prisafka .
Casom snad pribudne aj USB a wireless verzia.
zdroje:
[1] http://www.keelog.com/diy.html
[2] https://hysteria.sk/~niekt0/prisafka/prisafka.asm
[3] https://hysteria.sk/~niekt0/prisafka/schema.jpg
[4] https://hysteria.sk/~niekt0/prisafka/asm51.exe
[5] http://www.hw.cz/Teorie-a-praxe/Konstrukce/ART476-PonyProg---programator-ATMEL-PIC-EEPROM...html
[6] http://www.volny.cz/d72/pa3cz
[7] http://www.irmplc.com/Docs/KeyLoggerWP.pdf
[8] http://www.chipcon.com/index.cfm?kat_id=2&subkat_id=12&dok_id=55
[9] https://hysteria.sk/~niekt0/prisafka/pokusna.jpg
[10] https://hysteria.sk/~niekt0/prisafka/kompakt.jpg
niekt0*hysteria*sk
navrat na obsah
co ty na to ? board
Cisco control plane protection
Bezpecnost, ano to je to slovicko ktore ludia neznali problematiky nemaju velmi
v laske, kedze predstavuje nemalu polozku v rozpocte nejakeho projektu, avsak
toto slovicko v sebe zahrna nielen frazu ale aj realnu hodnotu. Dnes si
povieme nieco o zabezpeceni smerovacov z dielne Cisco pred DOS utokmi ci uz z
vnutornej alebo vonkajsej siete, pripadne pred zahltenim vlastnej siete pod
vplyvom "nezdravej" konvergencie.
Jedna sa pomerne o novu technologiu u firmy cisco, ktora sa nazyva CPP, cize
control plane protection.
Ako uz nazov sam prezradza, tento kus kodu v IOSe bude pojednavat o
zabezpeceni control planu, alebo casti kodu IOSu, ktora sa vykonava na
procesore alebo v softweri.
Na zaciatok by sme si mali povedat, ze su zakladne dve kategorie procesovania
nejakeho kodu v IOS. To je bud v softweri alebo v hardweri, druha metoda je
vyrazne priaznivejsia pre beh boxu ako takeho a je ovela menej narocna na
prostriedky.
Co nas ale zaujima je prave ochrana procesov, ktore sa vykonavaju na procesore.
CPP je podporovana od nasledujucich verzii IOS-ov, uviedol som sem hlavne
vyvojove vetvy a modely:
Cisco 12000 Series Router
Release 12.0(29)S
Cisco 7600 Series
Release 12.2(18)SXD1
Cisco 6500 Series
Release 12.2(18)SXD1
Cisco 7200 Series
Cisco 7500 Series
Release 12.2(18)S
Cisco 1751 Router
Cisco 2600/2600-XM Series
Cisco 3700 Series
Cisco 7200 Series
Release 12.3(4)T
Cisco 1800 Series
Cisco 2800 Series
Release 12.3(8)T
Cisco 3800 Series
Release 12.3(11)T
Pristupime k samotnej konfiguraci CPP, testovaci box: 6500 IOS: 12.2(18)SXF1
Vytvorime si niekolko tried, cez ktore budeme kategorizovat traffic urceny pre
dany routing switch.
- copp-bgp: BGP traffic
- copp-igp: IGP traffic
- copp-management: management traffic
- copp-reporting: reporting traffic
- copp-monitoring: monitoring traffic
- copp acl-critical-app: critical application traffic
- copp-layer2: ARP traffic
- copp-neziaduci: explicitne zahadzuje dany traffic, moze byt pouzite pre virusy
Vytvorime si access-listy v ktorych budeme matchovat navrhnute triedy:
BGP komunikacia medzi nasimi peerami.
ip access-list extended copp-bgp
remark CoPP BGP traffic class
permit tcp host 10.1.1.1 host 10.2.2.2 eq bgp - BGP session
permit tcp host 10.2.2.2 eq bgp host 10.1.1.1
permit tcp host 10.3.3.3 host 10.2.2.2 eq bgp
permit tcp host 10.2.2.2 eq bgp host 10.3.3.3
Vybrali sme si OSPF ako interny protokol, kedze matchovanie CLNS pri ISIS
nie je podporovane (zatial).
ip access-list extended copp-igp
remark CoPP IGP traffic class
permit ospf any host 224.0.0.5 - komunikacia s DR a BDR
permit ospf any host 224.0.0.6
permit ospf any any
v tomto access-list pouzivame protokoly sluziace na management, podla poradia:
TACACS navratovy traffic, ssh traffic, telnet traffic, SNMP traffic, NTP
traffic, FTP traffic, TFTP traffic
ip access-list extended copp-management
remark CoPP management traffic class
permit tcp host 1.1.1.1 host 10.2.2.2 established
permit tcp 10.4.4.0 0.0.0.255 any eq 22
permit tcp 10.4.4.0 0.0.0.255 any eq telnet
permit udp host 1.1.1.1 any eq snmp
permit udp host 1.1.1.1 any eq ntp
permit tcp host 10.2.2.2 eq ftp host 1.1.1.1
permit tcp host 10.2.2.2 eq ftp-data host 1.1.1.1
petmit tcp host 10.2.2.2 eq tftp 1.1.1.1
Reporting je tiez dolezita vec, hlavne na meranie SLA. Na reporting pouzijeme
SAA ktory bude generovat ICMP pingy s roznymi DSCP bitami v TOS byte, aby sme
zistili odozvy pre rozne traffiky. DSCP1 pouzije ICMP s DSCP EF, DSCP2
pouzije AF31, DSCP3 pouzije AF21 a najmenej dolezita trieda DSCP4 pouzije BE.
Vytvorime aj access-list, aby sme specifikovali ICMP pingy zo SAA mashiny.
Nakoniec pouzijeme match ip dscp v policy-mape.
ip access-list extended copp-reporting
remark CoPP reporting traffic class
permit icmp host 10.4.4.4 host 10.1.1.1 echo
Trieda monitoringu routing switcha:
ip access-list extended copp-monitoring
remark CoPP monitoring traffic class
permit icmp any any ttl-exceeded
permit icmp any any port-unreachable
permit icmp any any echo-reply
permit icmp any any echo
Trieda kritickeho trafficu, ktora je dolezita v danom prostredi, matchujeme
HSRP pouzivane na redundanciu a DHCP na pridelovanie adries.
ip access-list extended copp-critical-app
remark CoPP critical apps traffic class
permit ip any host 224.0.0.2
permit udp host 0.0.0.0 host 255.255.255.255 eq bootps
permit udp host 10.4.4.4 eq bootps any eq bootps
ACL-ko ktore obsahuje traffic, ktory by mal byt vzdy vynaty z processingu na
procesore.
ip access-list extended neziaduci
remark nechceny traffic
... hoc aky virus, traffic ...
Dane vytvorene access-listy aplikujeme do tried nasledovne:
class-map match-all coppclass-bgp
match access-group name copp-bgp
class-map match-all coppclass-igp
match access-group name copp-igp
class-map match-all coppclass-management
match access-group name copp-management
class-map match-all coppclass-reporting
match access-group name copp-reporting
match ip dscp ef af31 af21 default
class-map match-all coppclass-monitoring
match access-group name copp-monitoring
class-map match-all coppclass-critical-app
match access-group name copp-critical-app
class-map match-all coppclass-layer2 - L2 traffic
match protocol arp
class-map match-all coppclass-undesirable
match access-group name copp-undesirable
A teraz si ten presne specifikovany traffic trocha zapocitame/urezeme podla
potreby :)
policy-map copp-policy
class coppclass-bgp
police cir 10000000 bc 312500 be 312500 conform-action transmit exceed-action drop -
POZOR na tieto parametre, nastavovat s citom.
class coppclass-igp - Neobmedzene
class coppclass-management
police rate 100 pps conform-action transmit exceed-action transmit
class coppclass-reporting
police rate 30 pps conform-action transmit exceed-action transmit
class coppclass-monitoring
police rate 50 pps conform-action transmit exceed-action transmit
class coppclass-critical-app
police rate 75 pps conform-action transmit exceed-action transmit
class coppclass-layer2
police rate 20 pps conform-action transmit exceed-action transmit
class coppclass-undesirable
police rate 10 pps conform-action drop exceed-action drop
Posledny krok je toto vsetko aplikovat na control-plane nasledovne:
lab(config)#control-plane
lab(config-cp)service-policy input copp-policy
Kedze sme pouzili police, mozeme applikovat na input.
Vysledok applikovania si mozeme pozriet :
lab#show policy-map control-plane
Control Plane
Service-policy input: copp-policy
Class-map: coppclass-bgp (match-all)
2342 packets, 182676 bytes
5 minute offered rate 0 bps
Match: access-group name coppacl-bgp
......
Pri otestovani danej technologie v labe odporucam pouzit tooly ako iperf a
hping2, hlavne pri iperfe krasne vidiet ako control-plane posiela nadbytocne
pakety na podlahu :)
Na zaver by som upozornil na par buggov/featuriek, ktore sa vyskytli
pri testovani a ktore vam mozu zapricinit neprijemnosti:
1, Ako som uz spominal ziadna CLNS podpora na matchovanie do tried.
2, Neakceptuje access-list ktory ma v riadku "log", musime pouzit duplikatny
access-list bez "log" premien, zjavne je to koli tomu, ze cisco pri log
premennej v access-liste puntuje packety o jednu triedu spracovania nizsie,
v tomto pripade procesor, takze niet uz co policovat cez CPP.
3, match-all v class-grupach pri access-listoch nefunguje, takze pozor na AND
opercie v triedach. V tomto sa ma Cisco co to ucit od Junipera. Vyzera to tak,
ze IOS-XR by v tomto mal byt flexibilnejsi.
4, kazda classa by mala mat police entry inak je ignorovana.
5, IPv6 aj ked nieje zdokumentovana, ale na policnuty traffic sa veselo
vztahuje, takze ked peerujete IPv6 a budu sa vam stracat packety a nebudete
vediet preco, skontrolujte si nastavenia CPP.
Pouzite materialy:
Cisco.com
Lab
iso(at)hysteria[dot]sk
navrat na obsah
co ty na to ? board
Kvalita webhostingu u nas... aneb cURL [klapka] podruhe
Urcite to znate, kazda firma ci user si dava na webhosting svoji webovou
prezentaci s tim domenim, ze je tam v bezpeci, ale ne kazdy hosting je na
tom tak dobre. Bez php by webhosting nebyl asi ten pravy a at uz je php 4 nebo
5 dost rozsirene, stejne se obcas najde nekdo kdo na
nejakou vychytavku, ktera neni na serveru zabezpecena prijde. A tak se
stalo. Kdyz pred 2ma rokama vysel prvni cURL php exploit, zbudilo to dost
otresu na webhostingech. Primitivni 5ti radkovy php kod a mohly jste si
prohlidnout jakykoliv file na serveru. Kolem zacatku unora se nam podarilo
ukoristit jednu novou verzi cURL php exploitu, tak sme se rozhodli ho
testnut na ceskych hostingach, at uz free nebo nefree.
Funkce exploitu...
Funkce je dost jednoducha dalo by se rict ze to je jakysi bypass pro
'open_basedir' (podobne tomu bylo tak i u stareho cURL).
Free webhosting hack...
Vybrali jsme 2 ceske free hostingy jeden dost znamy (z bezpecnostich
duvodu nebudu uvadet nazvy spolecnosti) a druhy malinko min znamejsi ale
stejne oblibeny. Vytvorili jsme si konto s krasnym indexem, vytvorily php
file napsali exploit a co nevidime... Na jednom hostingu bezel exploit
paradne a na druhem uz to meli zrejme fixle. Cesta nas vedla kam jinam nez
k databazi useru, kterou jsme asi po 5 minutach ziskali. Tento super cesky
webhosting nemel v databazi ani hashovane hesla coz bych hodnotil jako
totalni neschopnost hostingu, prace admina kterej si mysli ze je buh, pro
nas tim prace byla ulehcena. 6 MB databaze ktera obsahovala: uin webu,
domenu, jmena, adresy, telefony, ruzne internetove kontakty hesla useru a
quoty. Jenze nekde nastala chyba a hosting na bug prisel a tak vsem userum
zmenil hesla a bug fixnul (asi po 1 tydnu). Pro priklad jsem vybral jeden
radek z databaze:
INSERT INTO `users` VALUES (16934, 'hacker', 'Milan', 'Star�', 'Karlovy Vary', 'Majakovsk�ho 10', '36005',
'777586191', 'emerika@centrum.cz', 0, 'ok', 'normal', 1115565668, 'emerika');
Vidime ze domena je "hacker" a tento tajny hacker je "Milan Star�",
Karlovy Vary, Majakovskeho 10, zanechal nam i telefoni cislo "777586191" i
email "emerika@centrum.cz" a nasledne to nejdulezitejsi heslo "emerika".
Jenze ted si asi reknete co s databazi v ktere jsou hesla, ktere uz jsou
davno zmenene ?
Neni tomu tak...
Rekl jsem si, ze bych mohl skusit, jestli si heslo zmenil do puvod stavu a
zaroven jestli pouziva stejne "super" heslo i na mailu etc. Funguje zase
vsude. Vidime, ze je to urcite skuseny hacker. No i kdyz jsem to nezkousel
tak odhaduju ze 9 lidi z 10 si zmeni to heslo nove vygenerovane na to
jejich stare.
Databaze obsahuje 18 854 useru.
Tedka se vrhnem na neco vetsiho, myslim si ze hacknout placeny hosting,
ktery je celkem dost znamy, je pekny ulovek !
Placeny hosting hack...
Zase nadesel cas pro novy cURL exploit a tak jelikoz jsme meli pristup k
jenomu kontu na onom hostingu, tak jsme jej taky zkusili. Exploit behal
skvele a tak i databaze tohoto hostingu se nam zjevila. Tato databaze byla
o neco chudsi nez predesla ale i tak pekne. Obsahuje jen 3 informace ktere
jsou domena, heslo (uz v hashi), a delka hesla. No databaze byla na svete,
ale co s heslama v hashi ? Museli jsme najit patricny louskac hesel.
Cracker se skompilil a prvni test bylo 7dmi mistne heslo. Nez jsem
napocital do 5ti tak bylo heslo na svete. 8mi mistne heslo trvalo uz
malinko dyl ale nejvetsi pocet tam byl aj tak 7 dmi mistnych. Tento
hosting BUG fixnul za 14 dni od hacku, ale hesla v klidu nemenil, takze
vsecky funguji stale. Z bezpec. duvodu jsem meno hostingu neuvadel, ani
vypis z databaze.
Databaze obsahuje 44 484 useru.
Chyby byla opravena na
CVS,
ale autori cURLu nebyli schopni priznat dalsi trapny bug, aby neztratily
vernost useru.
khu @ dev . null
navrat na obsah
co ty na to ? board