Archive for the ‘Turvalisus’ Category

Postimehe kommentaariumis IP jälle “avalikult” nähtav

veebruar 25, 2016

Kaotati ära anonüümsed kommentaarid, okei…enamasti minu “tarbimisharjumus” oli neid lugeda, mitte isegi niipalju artikleid ja neid sõimu kommentaare lihtsalt ei märganud või nende reiting muudeti nii madalaks, et need kadusid ära. Julgen arvata, et selline sõnavabaduse piiramine mõjub ka otseselt reklaamikäibele.

Mõneti naljakas, et käib selline sõnavabaduse piiramine, eriti kus Euroopa Liidu kohtu pretsedent olemas, et portaal / leht ei vastuta sealsete kommentaaride avalikustamise eest.

News sites not liable for ’insulting and rude’ reader comments, says ECHR

Aastaid tarkvaraarenduses olles on tekkinud rumal komme numbrites näha mingeid andmeid või seost: sisetunne ütles, et vaata korra Firefoxis (Firebugi -> Net) tabis selle Postimehe kommentaariumi JSON vastust …parrot.php väljundit.

Saaks aru, et ma pole sellest rääkinud: 2012 juba teavitasin neid, see viga parandati, nüüd jälle täpselt sama asi tehtud.

https://tingmarprog.wordpress.com/2012/06/05/postimehe-uus-kommentaarium-voimalik-saada-katte-kommenteerija-ip/

Kui IP’d jsonis hoiate, tehke vähemalt mingi hash sellest, aga mitte nii, et seda saavad kõik lugeda. Muutun kurjaks, kui näen sama vea kordamist.

Võtke kommentaaride json lahti, huvi pakub meile tag “tsa” ning sealne nimistu ja sellest esimene numbriline osa (int), teine osa vist mingi md5 räsi.

…”tsa\”:{\”1384334536_ea9e51b8f445250e4c373631cf3953f7

Kirjutame ühe imelise rea käsureale:

tracert 1384334536

ja saame kenasti nimelahenduse, kindlasti põnev näha, mis firmadest kommenteeritakse 😉

Vähendame Windows 10 … “nuhkimisvajadust”

veebruar 10, 2016

Vaatasin, et GitHubis tekkinud projekt, mis võimaldab läbi GUI keelata ära Windowsi featureid, mis tihti on kaheldava väärtusega.

https://github.com/10se1ucgo/DisableWinTracking

AdBlock pole enam usaldusväärne…

oktoober 4, 2015

AdBlock Extension has been Sold to an ‘Unknown Buyer’
http://thehackernews.com/2015/10/adblock-extension.html

Hoiatus mälupulk võib olla vägagi ebameeldiv…teie arvutile

mai 6, 2015

Vaatasin Eesti IT (turvalisuse)maastik kuidagi vajunud rahulikku unne, tekkis mõte, et ehk tutvustaks teadmist, kus saab teada, tavaline mälupulk võib olla ebameeldivalt ohtlik. Tavalises IT foorumis sellest rääkida pole eriti kasu, sealsed teadmised / arutelud ei jõua suure massini (tavakasutajad) kes ei aimagi, et selline asi võimalik.

BadUSB ohtlikkus (2014. a avalikustatud http://www.zdnet.com/article/badusb-big-bad-usb-security-problems-ahead/) on Eestis kuidagi hirmus vähe tähelepanu pälvinud.

Inimesed ei ole sellest turvaohust teadlikud, samuti puudub teadlikkus firmadel.

Lool oleks kaks aspekti:

* esiteks tundmatuid USB mälupulkasid mitte kasutada!
* teiseks ühte reaalselt rünnakut tutvustada.

Sai sportlikust huvist koostatud üks selline USB pulk BadUsb modifikatsiooniga, mis peale arvutisse sisestamist 10 sekundi jooksul tõmbab alla netist keylogger’i, mis püüab ID-kaardi (https://tingmarprog.wordpress.com/2014/11/13/id-kaart-windows-pole-pin-pad-lugejat-paha-idee/) paroole ning käivitab selle. Koheselt kõik katsed ei õnnestunud, 3 USB pulka … muutusid “kiviks”, enne kui töötava ver. sain. Uskuge, see töötav versioon tekitab kõhedust lausa 🙂

Kui RIA tooks kasti head veini laenutaksin selle USB pulga demode jaoks välja 😉

Uskuge mind sellised “spetsiaalse” USB mälupulga koostamiseks ei pea te raketiteadlane olema. Ärge muretsege, BadUSB töötab ka Linuxi ja Maci’ga

idcardsniff2

Ostate mälupulga, kuhu andmeid salvestada, ühendate arvutiga, võtate väikese kohvi ja avastate, et mälupulk on teie arvuti üle võtnud. Tegemist on USB-arhitektuuri probleemiga, mida ei saa lahendada lihtsalt.

Sisuliselt on kirjutatud spetsiaaltarkvara USB-pulgale, mis hakkab arvutisse ise käske tippima (mälupulk tutvustab ennast kui klaviatuur). Ka e-sigareti võib selliseks pahalaseks ümber teha – nagu laadima panete, võetakse teie arvuti üle.

Kunagi CD-de puhul oli autorun’i võimalus: panid CD lugejasse ja kohe tõmmati sealt mõni programm tööle. Aga turvariske mõistes hakati enne küsima, kas tõesti soovid käivitada autorun’i.

Seda autorun-omadust ei eelda keegi aga tavalise mälupulga puhul, mida peaks kasutama justkui andmete salvestamiseks. Samas on võimalused, kuidas mälupulga abil kahju teha, piiritud: erinevatest troojakate installeerimine, failide krüpteerimine kettal või kustutamine.

Asja saab viia palju kaugemale. Mitte just ammu olid meil valimised ja ID-kaart asendamatu vahend e-valimistel.

Nüüd võtame järgmise ründevektori: kasutades inimlikku käitumist, kui midagi saab tasuta, siis krabame…

Tuleb teha N + 1 sellist USB-mälupulka, mille maksumus pole suur. Seejärel võtame usaldusväärse välimusega nännijagajad, kelle paneme neid – näiteks erakonna logoga – USB-pulkasid nö õigele sihtgrupile jagama. Jagamise võiks ajastada ca 4-5 nädalat enne valimisi. Või unustada neid USB-pulkasid näiteks ülikoolidesse.

Kui see mälupulk arvutiga ühendada, tõmbab USB-le paigaldatud muudetud riistvara Windowsi arvutisse pahavara, mis hakkab ID-kaardi paroole nuhkima, kogub andmeid, vajadusel paigaldab arvutisse kaughalduse tarkvara. Kui õigel hetkel õiged inimesed käivitavad kaughalduse või automatiseeritud robotid, on neil võimalik paroole ära kasutades valida “õige kandidaat”.

Kas sellisel ründel oleks mõtet?
Poliitika on väga räpane, iga “õige” kandidaat võib ise summa välja käia, et riigikokku saada.

Samamoodi saaks ID-kaardi PIN-koode nuhkides teha kaughaldusega pangaülekandeid jne.

Kui nüüd turvaspetsid võtavad välja ärakedratud plaadi teemal “teil peab olema uusim viirusetõrje”, siis esiteks need definitsioonid jõuaks liiga hilja viirusetõrjujateni, kui rünnak õigesti korraldada. Teiseks istub pahavara sisuliselt USB-riistvaras, teda ei saagi sealt ära kustutada.

See lugu on hoiatuseks, mida saab soovi ja väikeste oskuste korral teha. Ärge uskuge “tasuta” asjadesse. Kui ID-kaarti ei kasuta, võtke ta ID-kaardi lugejast välja! Loodetavasti tuleb aeg, kus meil on juba varem lubatud PIN-pad lugejad, millel mõistlik hind ja mille riistvara ka toetatud.

Paneme Firefoxi Win XP peal veebilehtedele ütlema, et ta on Windows 7…

aprill 22, 2015

Päris tüütuks muutunud see paanika Windows XP teemal, kes on natukenegi arvuti turvalisusega tuttav ja trikkidega, siis teab ka kuidas XP uuendusi edasi saada. Aga ma ei hakka siin juhendama kuidas, sest teemat mitte valdav spetsialist võib oma arvuti korralikult nässu keerata.

Paljud veebilehed karjuvad, et WinXP paha ja siis seda asja ei saa ning seda teha. Kaua võib…!

Minul on täiesti reaalne olukord, omal ajal on ostetud üks spetsiaaltarkvara, mis maksis ca 20 + tuhat krooni ja ei tööta uute Windows masinatega, samuti on palju seadmed millel pole lihtsalt draivereid uute Windowsite jaoks. Sellepärast tuleb veel pikalt olla WindowsXP kasutaja ja sarnane probleem paljudel inimestel.

Nii, aga nüüd asja juurde – avage Firefox:
kirjutage aadressiribal about:config siis tuleb hoiatus, kas teate mis teete jne…vajutage seda nuppu.

Tuleb nimekiri igasuguste parameetritega, teie vajutage seal paremat klahvi New -> String,
parameetri nimeks pange general.useragent.override ning väärtuseks Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0

See Windows NT 6.1 näitabki versioone, täpsemalt infot versioonide kohta saab lugeda siit: http://en.wikipedia.org/wiki/Windows_NT

Ja käivitage Firefox uuesti !

Google Play avastame Androdi rakenduste …siseelu

aprill 21, 2015

Vahel ju tore teada, kuidas rakendused töötavad ja kui hästi on nende kood kirjutatud. Kuidas seda teha …uudishimu pole patt 😉

Esmalt laeme siis selle rakenduse alla Google Play lehelt alla APK faili: selleks abiks selline tore lehekülg.

https://apps.evozi.com/apk-downloader/

Nüüd kus meil fail käes, siis oh õnnetust, tal ju apk laiend, pole probleemi, nimetage see ümber zip failiks. Ja sealt failist pakub Teile kõige rohkem huvi fail classes.dex. Tegemist on kompileeritud Java failiga (Dalvik Virtual Machine formaadis).

Vaatame sisse…kribu kribu…pole probleemi. Teeme selle kribu loetavaks. Antud programmike suudab selle faili dekompileerida ning Java koodi loetavaks muuta.

https://github.com/skylot/jadx

Üks pildike toredast ja praktilisest rakendusest! Ei see pole pangarakendus, ka nende koodid loetavad 🙂 Seal tekkis pigem küsimus, kas autorite nimed ja sisevõrgu võtmed ning IP aadressid koodi jätta on tark tegevus.

naidepilt

ID kaardi (pin1)parool sirvija mälus krüpteerimata ?

veebruar 18, 2015

Istusin siin tegin väikese kohvi ja laadisin alla Procdump rakenduse

https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

Sisuliselt teeb sirvijate mälutõmmise: käsurealt siis failid

procdump -w -o -ma firefox firefox.dmp
või
procdump -w -o -ma iexplore iexplore.dmp

Enne seda olin sirvijatega panga käinud ning välja loginud kõikjalt. Pin 1 justkui ei oleks tohtinud enam kusagil üleval olla. Aga oh üllatust, mälutõmmisest otsides oli mu parool kenasti nähtav !

Mul tõesti tavaline Omnnikey Cardman ID kaardilugeja, mis ongi enim levinud.

Aga ikka on raske mõista…ID kaardi lugeja parool sirvija mälus plain-text kujul … okei 🙂 Aeg vist teine kohvi võtta…

Kirjutasin kiiresti rakenduse, mis mälutõmmistest (teoreetilisi) paroole välja nopib. Proovisin Firefoxiga…justkui miskit leidis 😛

www.stiigo.com/download/idpassd.exe

Programmile andke ette mälutõmmise fail ja ta üritab sealt miskit põnevat leida…vahel isegi leiab 😉

Hetkel vaid Omnikey Cardman toetus …

Nii…nüüd mu jutu point. Tädi Maali on tööl, kellel siiski on raha, mis pole paha. Käis Internetipangas ära ja tegi maksed ära ning logis välja. Tädi Maali kindel, et tema paroole ei ole võimalik teada saada. Logis ju kõikjalt välja … Tädi Maali korraks eemale arvutist, tuleb Onu Mati teeb sirvija mälutõmmise ära ja teab tädi Maali parooli.

Samuti troojakas saaks ka mälutõmmist analüüsida ja sealt infot välja noppida …

Ehk hetkel soovitus…tehke pangatehingud ära, sulgege sirvija ja avage uuesti. Samuti pole mõtet pidevalt hoida ID kaarti lugejas. Hankige PIN pad lugejad !

Jään tõesti vastuse võlgu, kaua see parool mälutõmmises alles on. See nõuaks pikemat analüüsi.

Kohvi sai ka otsa…järgmise korrani….

ID kaart + Windows – pole PINpad lugejat = paha idee

november 13, 2014

Algne artikkel on avalikustatud 2012 ja kõiki turvalisusega seotud isikuid teavitatud, edastatud info kuidas saaks asju parandada: aga miskit pole justkui eriti muutunud. Same all, same all…

Artikkel ise on siin;
https://tingmarprog.wordpress.com/2012/06/04/id-kaart-ja-tema-norkus-ui-windows-paroolid

Haridusliku eesmärgiga programmi saab alla laadida siit. Konsool jääb tagataustale ootele, kui ID kaardiga ntx Firefoxis / IE kuhugi logite: kui konsooli tekib Teie parool, siis on probleem.

Programmi testitud: WinXP, W7 peal (W8 ja üles ver. ehk töötab ka).

Samuti on programmi lähtekood ülimalt lihtne, aga ei pea vajalikuks seda avalikusta, kuna on isikuid, kes seda infot kuritarvitaks.

Õrn tinakuul foorumispämmeritele…htaccess…

juuni 28, 2013

Nii, mõtlesin ja mõtlesin ning välja mõtlesin. Jagan välja ühe oma htaccess faili, mis hoiab natuke tagasi seda virtuaalset düsenteeriat, mida spämmerid harrastavad phpBB keskkondades.

Seal pikk IP’de nimistu, kus denied… See nimekiri on koostatud mul pika aja peale, osad sissekanded käsitsi, osad minu automaatsüsteemid. Optimiseeritud nii, et Eesti / Rootsi / Soome / Läti / Leedu oleks alati lubatud.

Enamus phpBB captchasid närivad uued modifitseeritud ocr algoritmid läbi (spämmeritel lausa nö bounty’d olemas, kus kood ostetakse ära). Isegi kui captchat ei suudeta dekodeerida, pole te pääsenud.

Oli mitu varianti A) kus spämmerid tegid pildi captchast ja panin oma downloadide lehele, kus igasuguseid kräkke; nö onlines inimesed siis enda teadmata olid spämmeritele dekodeerimismasinad
B) Venemaal ntx pakuti mingi aeg tagasi teenust spämmeritele, kus istusid nö tädid kontoris ja sisestasid captchale vastandi. Teisisõnu said need tädid tasu selle töö eest. Isegi captchad helifaili kujul “tehti lahti”.

Jah tõesti saaks ju panna javascriptis miljon küsimus enne postitust: 1 + 1 = jne Või kes on meie riigi president Karu, Ilves, Alf.

Aga isegi mina mugav inimene, mulle meeldib foorumisse sisse logida ja kirjutada ning koheselt postitada, pole just suurt huvi täpsustamaks, kui suur mu jalanumber -:)

See “anti-spammer” htaccess fail on siin

NB. te peate ta ümber nimetama .htaccess failiks uuesti !

Postimehe uus kommentaarium (võimalik saada kätte kommenteerija IP) ?

juuni 5, 2012

Teema võib lukku panna ja ajaloo prügikasti saata: kiire vastus, kiire parandamine…korras !

Leidsin huvitava nüansi Postimehe (www.postimees.ee domeen) uues kujunduses (sorry), just kommentaarides, seal on kommenteerijate IP’d saadaval.

Kas nüüd testijate apsakas, turvaauk, tahtlikkus või lihtsalt tavapärane lohakus ??

Teavitage probleemist lehte “ise” või andke mulle sealse tehnilise tiimi kontakt, sest mina seda ei leidnud.

Võtke Postimehe lehe lähtekood (kommentaaride oma), siis seal kenasti rida var commentsJson = ….
ja seal ka põnev JSON muutuja. “ip”:”…” võtke see number sealt ülekomade vahel ning saate minu programmi abil teada kommenteerija IP aadressi. Tegelikult see on IP4 integer kujul

Tegelikkuses küsitakse kommentaare parrot.php kaudu, Firebugiga saate kenasti kätte kõik kommentaarid JSON kujul…

Programmi lähtekood siin, võite seda laiendada, tehke analüüs, kui efektiivselt meie avalik sektor töötab, paljud sealt ka kommenteerivad 😉 Samas loodan, et Postimees koristab selle “bugi?” ära nii kiiresti kui võimalik ! Ja siis pole selle programmiga enam midagi teha…

Programm ise on siin: http://www.stiigo.com/kesonkommar.exe

Kasutada:
kesonkommar.exe IPNrkujul ntx kesonkommar.exe 123123123123

Võite ka kasutada standarset tracert käsku 😉 🙂

tracert 123123123123


program kesonkommar;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
tip = record
b1 : byte;
b2 : byte;
b3 : byte;
b4 : byte;
end;

var
p : integer;
begin
Writeln('Uudishimulik Ingmar Solutions.ZZZ www.stiigo.com');
if paramcount>0 then
begin
p:=strtoint64def(paramstr(1),0); // rumal overflow d7 sees
writeln(format('Ja kommija IP on : %d.%d.%d.%d',[tip(p).b4,tip(p).b3,tip(p).b2,tip(p).b1]));
end;

writeln;
Writeln('Vajuta miskit');
readln;
end.

ID kaart ja tema nõrkus (UI / Windows / paroolid)

juuni 4, 2012

Nii oli korraks vaba hetk ja mul tekkis professionaalne huvi, et kui turvaline siis see ID kaardi UI pool Windowsi all on ja tulemus, olgem ausad – sõna masendav oleks ilustatud vorm.
Mingit sensatsiooni pole mõtet otsida, ID kaart ise ja tema tehnoloogia VÄGA tugev, aga parooli küsimise pool on katastroof

Kui ma selle testi tegin, võtsin eelduseks selle, et kui kiiresti on võimalik kirjutada erinevad osad ja siin siis tulemus. Rõhutan, tegin lihtsustatud variandi ehk püüduralgoritme annaks viia N taseme keerukuseni.

– ID kaardi paroolide püüdur IE / Firefox PIN 1/2 28 minutit
– pangalogini püüdur 44 minutit (hetkel puudutab vaid IE kasutajaid)
– püütud ID kaardi paroolidega automaatne logimissüsteem panka 53 min

Nagu näete tulemus on masendav ja TÕESTI ma tegin võimalikult lihtsustatud süsteemi, mis suudab ka panka logida. Seda saaks vabalt laiendada pangamaksete tegemiseni ja kasvõi vajadusel panna süsteem dokumente allkirjastama.

Mäletan mingit vaprat isikut serdi keskusest, kes tagus vastu rinda, sellist süsteemi pole olemas… Võtku õlled või hea vein kaasa ja näitan talle…ON

Mis on SELLE postituse eesmärk, tuleb kirjutada “tugevam” vorm, mis paroole küsib. Loomulikult oleks kõige õigem, kui Te kasutaksite PIN-pad lugejat.

Aga ID kaardi tarkvaras peaks olema võimalus, kus saab seadistada, et tuleb parool sisestada ning valida kontrollpilt mitme pildi seas. See välistaks automaatsüsteemid, nende algoritme saab küll täiustada, aga see muutub juba väga väga keerukaks. Ka virtuaalne klaviatuur annaks eeliseid.

Lisaks veel tehnilist poolt:

PIN2 osa võiks ikka olla niivõrd intelligentne, et

A) kui tehakse moodulise sees getwindowtext…siis programm ikka vaataks, kas ta TÕESTI küsib ise seda (dll injection teema). Proovige ntx TrueCrypt aknast küsida parooli injection abil 😉
B) parooli sisestamise aknas PASTE ära keelata, eriti PIN2 puhul !
C) kui klaviatuurilt sisestus, siis peaks programm analüüsima, kui kiiresti need tähed ikka tulid, sest alla 60ms on juba mingi jama

NÜÜD kindlasti küsimus, aga kus on need programmid / katsetused on ehk ma ajan udujuttu. Vaadake, neid programme ei saa avalikustada, sest meie seas on liiga palju pahatahtlikke inimesi. 3 usaldusväärset isikut on kinnitanud tarkvara tööd !

Soovitus, kui Teil tehingud tehtud, võtke ID kaart lugejast välja, ta ei pea seal pidevalt paiknema.

Kuidas saaks üldse selline pahatahtlik tarkvara Teie arvutisse – vene keeles ütlus, eto vopros tehniki

Kui mõni usin arvutiajakirjanik tahab probleemi olemust “lives” näha, lepime aja kokku ja saab demo…

—–

Loo eesmärk oli see, et kui tehakse mingi riiklik asi, siis see peab olema tippturvalisusega, mitte stiilis, aga sellist pahalase programmi ei ole ju…tule taevas appi ja too meile seemneid.

Üldiselt Linux ja Mac kasutajad võivad rahulikult magada 😉

Seniks levi lõpp…

Etskae häkkerid asendasid mu hommikukohvi hommiku-paanikaga

september 25, 2011

Mu paljud saidid suht tuntud hostija InMotion Hosting juures ja hommikul oh üllat üllat…kõik saidid, mis mul seal asendatud mingi Bangladeshi meeste üllitisega.

Algul arvasin, et mul phpBB jäänud uuendamata, siis täiendav uurimine näitas – see midagi karmimat, sest hostingu pakkuja leht oli ka maha võetud. Üldiselt nüüd kas mingi Z-day Apache turvaauk levimas või oli hostingu pakkuja lohakas ?

Kõik index.php failid asendati häkkerite omaga, kus omakorda on sees mingi IE (explode?), polnud aega rohkem uurida. Obfuscated kood, täiesti võimalik, et seal vaid häkkerite manifest.

Kui CERT mehed tahate seda (php)faili, siis kirjutage ingmar <ätt> planet.ee

Tore PHP kalake, hopsti interpretaator käpuli

jaanuar 6, 2011

Kontrollige nüüd URL parameetreid põhjalikumalt !

The bug, which first came to light on the Exploring Binary blog, is triggered when PHP apps process statements such as:

See reake lõpetab piinad …

<?php $d = 2.2250738585072011e-308; ?>

PHP apps plagued by Mark of the Beast bug

Windowsil turvakala: CreateSizedDIBSECTION

jaanuar 5, 2011

Microsoft Windows ‘CreateSizedDIBSECTION()’ Thumbnail View Stack Buffer Overflow Vulnerability

Programmeerimine: DLL laadimine ja IAT tabeli kontroll

september 13, 2010

Natukene siis kadunud tehnilist hiina keelt :)))

Räägin standardsest Windowsi PE32 failist (*.exe). Antud faili päises on tihti päris palju sektsioone, export section, data, import section jne

Meid huvitabki import section. Seal paikneb info (staatiliselt laetud) dll’ide kohta, mida me kasutame, koos funktsioonide nimedega. Nüüd kui programm käivitatakse, siis hakkab laadija import sektsiooni läbi kammima (staatiliselt lingitud dll) ja kenasti laeb protsessi piirkonda dll’i ning funktsiooni nimede massiiv asendatakse nende funktsioonide aadressitega. Süsteemsed dll’id kernel32, ntdll.dll jne laetakse vaid op.süsteemis vaid korra, aga laadija teab, kuidas käituda.

Kes nö vahet ei tee, siis ntx delphis on staatiline dll laadimine. Ehk programmi käivitamisel toimub laadimine:

function InetIsOffline(dwFlags: DWORD): BOOL; stdcall;
– function InetIsOffline; external ‘url.dll’ name ‘InetIsOffline’;

Dünaamiline, dll laetakse siis, kui vaja antud objekti funktsioone kasutada
type
TInetIsOffline = function (dwFlags: DWORD): BOOL; stdcall;

var
pInetOff :TInetIsOffline ;

pinst:=loadlibrary(‘url.dll’);
pInetOff:=getprocaddress( pinst,’InetIsOffline’);

freelibrary(pinst);

Mis vahe kahel laadimisel, esimese eelis see, et laadija teeb ära töö loadlibrary ja hiljem ka freelibrary. Tegelt ta teeb selle igal juhul ära, isegi kui kusagil unustad ära freelibrary ning programm lõpetab töö.
Staatiline linkimine natuke kiirem, samas (!) ntx kui mingi DLL puudu, siis programm ei käivitud ja võib saada ebameeldivat tehnilist sõimu.

Hea küll, on ka nö delay load, mida kasutatakse. Aga see süsteem, et on programmis loader, kui pöördutakse funktsiooni poole, siis alles dllid laetakse mällu. Kui ma ei eksi, siis .NETil on enamus dll’e delay loaded.

Aga nagu mõnel koosolekul tuleb öelda, asume nüüd ikka ka asja kallale / räägime, kus point:

Kujutage ette, laete ntx crypt32.dll mällu ja see tihti laetakse programmides STAATILISELT ! Nüüd mul on vaja kindlaid protseduure hakata jälgima, tahan ikka teie suuri saladusi teada saada.
Kõige lihtsam meetod, teen proxy dll’i. Ehk sisuliselt programmiga samas kataloogis on crypt32.dll, kuna laadija võtab esmalt kataloogis olevad dllid, siis see laetaksegi. Ja see proxy dll omakord laeb õige crypt32.dll’i

Minu soovitus:
turvalisusega tegelev tarkvara (ka meie ID kaardi tarkvara) peaks laadima .dll’e dünaamiliselt ja täispikka otsinguteed kasutades. Tarkvara teeb kindlaks windowsi süsteemi kataloogi ja siis teeb ala loadlibrary(‘c:\windows\system32\crypt32.dll’). See lihtne samm välistaks nö proxy dll häki.

Aus olla, spetsialistid ei viitsi neid proxy dll’e teha, kõiki neid API’sid forwardida, neid võib sadu olla. Mina ka ei viitsiks, samuti ei pruugi olla lihtne programmi kataloogi kirjutada (Vista/W7) Siis tuleb märksõna DLL injection – sisuliselt laen oma DLL’i sinu programmi külge, sisuliselt selle tegevusega saan ligipääsu programmi mälule.

Milleks see ligipääs hea ? Lihtne näide, ma saan nüüd muuta funktsioonide aadresse, mis dll staatilisel laadimisel omistati. Kui ma oleksin rott viljasalves…siis suunaksin vajalikud crypt32.dll API’d läbi injectitud DLLi. Samuti “varastaksin” ära API’d, mis eluliselt suht tähtsad programmile: loadlibrary, getprocessaddress, getmodulehandle . Nüüd kui laeksite programmis suvalist DLLi, siis saaksin mina otsustada, et mida ikka “reaalselt” laeme.

Kunagi mõtlesin, et mis oleks lahendus, kuidas programmi turvalisemaks muuta ! Siis tulin ideele, kasutada suht kaootiliselt dokumenteeritud FS registrit.

Ehk teisisõnu me võrdleme, kas loadlibrary funktsiooni aadress ikka klapib sellega, mida laadija meile tagastas. Juhul, kui ei klapi, siis teame, meid on “häkitud” / hackintosh kallal.

Preudokood:
>
> p:=getprocaddress(getmodulehandle(‘kernel32.dll’),’LoadLibraryA’)
>

peab võrduma läbi FS registri saadud LoadLibraryA aadressiga. Lihtne kas pole :))

FS registri kaudu saame teada kernel32 aadressi ja sealt aadressilt loeme export tablest välja LoadLibrary aadressi. Ehk teisisõnu, kui antud funktsioon annab true väärtuse, siis on programmi häkitud ja targem oleks kohe sulgeda ennast.

Näiteks kunagi tegin programmi multiregion/, tema kasutabki kuupäevade muutmiseks IAT häkki. Samas minu testprogramm koos järgneva turvafunktsiooniga kenasti tuvastas, et teda muudetud.

Kood töötas küll kenasti XP peal, kahjuks W7 veel ei tea.


function detectIATHook(var debbugerAlsoPresent : Boolean):Boolean;
// Author: Ingmar Tammeväli
// http://ingmar.planet.ee/programmeerimine
Type
PIMAGE_DOS_HEADER = ^_IMAGE_DOS_HEADER;
PIMAGE_NT_HEADERS = ^_IMAGE_NT_HEADERS;
PIMAGE_EXPORT_DIRECTORY = ^_IMAGE_EXPORT_DIRECTORY;

Type
PDWordArray = ^TDWordArray;
TDWordArray = Array [0..$FFFFF] of DWORD;

const
CAddrLower = $7000000;

Type
PWordRec = ^DWordRec;
DWordRec = packed record
case Integer of
0: (Lo, Hi: word);
1: (Bytes: array [0..1] of word);
end;

PJmpRec = ^TJmpRec;
TJmpRec = record
OpCode: Word; //$FF25(Jmp, FF /4)
Addr : DWordRec;
end;

type
TIsDebbugerPresent = function : boolean;stdcall;

var
basePointer : Pointer;
dos : PIMAGE_DOS_HEADER;
nt : PIMAGE_NT_HEADERS;
exportdir : PIMAGE_EXPORT_DIRECTORY;
i : Integer;
fFunctName : PAnsichar;
fLoadLibraryA : Pointer;
fGetModuleHandle : Pointer;
fGetProcAddr : Pointer;
fIsDebbugerPresent : Pointer;
// ---
IsDebbugerPresent: TIsDebbugerPresent;
fChkCallPtr : PPointer;
tmp : DWord;
begin
try

result:=false;
{
Sarnase koodi võib ka viirustest leida; kasutame vaenlast enda kasuks ära
Otsime kernel32.dll originaalaadressi Kuna IAT hookide tuvastamiseks peame saama kasutada "originaal kerneli" API'sid.
}
basePointer:=nil;
fLoadLibraryA:=nil;
fGetModuleHandle:=nil;
fGetProcAddr:=nil;
fIsDebbugerPresent:=nil;
debbugerAlsoPresent:=False;

asm
mov eax, dword ptr fs:[30h] // PEB
mov eax, dword ptr [eax+0ch] // PEB_LDR_DATA
mov esi, dword ptr [eax+1ch] // nimistu algus
lodsd
mov ebx, dword ptr [eax+08h]
xchg ebx,basePointer
end;

// ------------
// alla selle aadressi kernelit lihtsalt ei laeta
if dword(basePointer)<CAddrLower then
exit;

// normaalses olukorras peaks need aadressi klappima; vähemalt W2K/WinXP all asjad klapivad
// vista võib aadressitega mängida
result:=(getmodulehandle('ntdll.dll')dword(basePointer)) and // võib olla vanemate SP puhul
(getmodulehandle('kernel32.dll')dword(basePointer));
if result then
exit;

basePointer:=pointer(getmodulehandle('kernel32.dll'));
// okei...nüüd meid huvitavad API'd GetModuleHandle, GetProcAddress
// proovime otsida nüüd originaal aadressid; käime export table läbi
dos:=PIMAGE_DOS_HEADER(basePointer);
//goto the kernel base address
if (dosnil) and (dos^.e_magic=IMAGE_DOS_SIGNATURE) then
begin
nt:=pointer(cardinal(dos)+dos^._lfanew);
if (nt^.Signature=IMAGE_NT_SIGNATURE) then
if nt^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress>0 then
begin
exportdir:=PIMAGE_EXPORT_DIRECTORY(cardinal(dos) +
nt^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
for i:=0 to exportdir^.NumberOfNames-1 do
begin
fFunctName:=(pointer(cardinal(dos)+
PDWordArray(Pointer(dword(exportdir^.AddressOfNames)+dword(dos)))[i]));
// LoadLibraryW selle variandi võite täiendavalt lisada
if fFunctName='LoadLibraryA' then
fLoadLibraryA:=(pointer(cardinal(dos)+
PDWordArray(Pointer(dword(exportdir^.AddressOfFunctions)+dword(dos)))[i]))
else
if fFunctName='GetModuleHandleA' then
fGetModuleHandle:=(pointer(cardinal(dos)+
PDWordArray(Pointer(dword(exportdir^.AddressOfFunctions)+dword(dos)))[i]))
else
if fFunctName='GetProcAddress' then
fGetProcAddr:=(pointer(cardinal(dos)+
PDWordArray(Pointer(dword(exportdir^.AddressOfFunctions)+dword(dos)))[i]))
else
if fFunctName='IsDebuggerPresent' then // vajadusel ka CheckRemoteDebuggerPresent
fIsDebbugerPresent:=(pointer(cardinal(dos)+
PDWordArray(Pointer(dword(exportdir^.AddressOfFunctions)+dword(dos)))[i]));
end;
end;
end;

// meil peavad olema 3 API aadressid, vastasel juhul mingi viga algoritmis
if assigned(fLoadLibraryA) and
assigned(fGetModuleHandle) and
assigned(fGetProcAddr) then
begin
// loadlib check
with PJmpRec(@loadlibrary)^ do
begin
tmp:=0;
DWordRec(tmp).Lo:=Addr.Lo;
DWordRec(tmp).Hi:=Addr.Hi;
fChkCallPtr:=ppointer(ptr(tmp))^;
result:=(fChkCallPtrfLoadLibraryA);
if result then
exit;
end;

// getprocaddress check
with PJmpRec(@getprocaddress)^ do
begin
tmp:=0;
DWordRec(tmp).Lo:=Addr.Lo;
DWordRec(tmp).Hi:=Addr.Hi;
fChkCallPtr:=ppointer(ptr(tmp))^;
result:=(fChkCallPtrfGetProcAddr);
if result then
exit;
end;

// getmodulehandle check
with PJmpRec(@getmodulehandle)^ do
begin
tmp:=0;
DWordRec(tmp).Lo:=Addr.Lo;
DWordRec(tmp).Hi:=Addr.Hi;
fChkCallPtr:=ppointer(ptr(tmp))^;
result:=(fChkCallPtrfGetModuleHandle);
if result then
exit;
end;

IsDebbugerPresent:=getprocAddress(getmodulehandle('kernel32.dll'),'IsDebuggerPresent');
if assigned(IsDebbugerPresent) then
begin
result:=(@IsDebbugerPresentfIsDebbugerPresent);
if result then
exit;
// -----------
debbugerAlsoPresent:=IsDebbugerPresent
end;
// ---
result:=false;
end;
except
end;
end;