Ha Python-ban írnék meg egy programot és azt átfordítom egy fix, értelmező nélkül futtatható binárisba, azt utána mennyire könnyű visszafejteni? Megnehezíthető ez valahogy az illetéktelenek számára?
Például : tegyük fel, hogy bejutnak valahogy a szerver feladatokat ellátó gépre. Nyilván ez már egy nagyon rossz helyzet... De abban gondolkodom, hogy talán egy plusz védelmi vonal felhúzható azzal, hogy a használt adatbázisokat, pl. a jelszó hash adatbázist egy teljesen saját formátumban tárolom, ill. egy saját algoritmussal olvasom ki; ezt a programot pedig valamelyik Python fordítóval (tudtommal léteznek ilyenek) lefordítom binárisba, és akkor ha be is jutnak a gépre, legalább rögtön nem fogják tudni visszafejteni az egész hash táblát, ill. nem tudják olyan egyszerűen módosítani az azt kezelő kódot.
Szóval, egy ilyen python scriptről fordított bináris mennyire őriz meg debug adatokat ill. magát a forráskódot? Ezek az adatok kitörölhetőek valahogy a binárisból?
Ott kezdődik, hogy már rossz, ha a szerverre bejutottak. Jó tűzfallal, védelmi szabályokkal ez aligha fordul elő. (nyilván nem egy gépen kellene minden szervernek futnia)
Másrészt a jól megírt hash-függvény csak nehezen fejthető vissza (ha egyáltalán). Ha valami olyan hash-függvényről van szó, ahol cél lenne a visszafejtés, akkor neked a dekódloláshoz szükséges kulcs védelmére kell csak koncentrálnod.
Amit a binárisról írsz nem egészen értem: ha futtatható bináris kódról van szó, azt a hacker is tudja futtatni.
"és azt átfordítom egy fix, értelmező nélkül futtatható binárisba, azt utána mennyire könnyű visszafejteni?"
Attól függ, hogy van megírva. Léteznek anti-debug technikák, de az alkalmazástól is függ, hogy azt visszafejteni mennyire nehéz vagy sem.
" Megnehezíthető ez valahogy az illetéktelenek számára?"
Meg lehet nehezíteni, de lehetetlenné tenni, kizárt.
Régen bevett szokás volt, hogy a string literálok átírását úgy nehetítették meg, hogy a literál helyett függvény szolgáltatta a kiírandó szöveget.
Vagy, lehet írni egy VM-et, amit nyilván nem ismer a visszafejtő és azon futtatni a kódot. Mondjuk ez elég munkaigényes trükk, de többször alkalmazható ugyanaz a VM és úgy már jobban megéri.
Elsőhöz hasonlóan az általad írt dolgok eleve több sebbőr vérzik. Az általad kívánt belefektetett erőforrás alapvetően nem éri meg a trade-offot (kompromisszumot).
Egyrészt jelszó hashelésére nem érdemes saját algoritmust írni, mert anno azt megtervezték a szakemberek és folyamatosan ellenőrzik a biztonsági faktorát. Ilyen pl. az Argon2
Vagy, ha még erősebb réteget szeretnél, akkor ott az ingyenesen elérhető KeyCloak alkalmazás, amit backend oldalról API-kon keresztül ugyanúgy ellehet érni.
Ha sikeresen betörtek a szerverre, az utolsó az, hogy a futó alkalmazással bajlódjanak.
Kérdés mindig az, hogy mi a legértékesebb nézőponttól függően és több szereplő esetén is. Tedd fel a kérdést: Mit nyernek a támadók, ha megtámadnak? Felhasználói adatokat? Annyi valószínűleg nem tárolsz, hogy megérje az időt, inkább mennek nagyobb halakra.
Általában egy kis sebezhetőbb gép azért érdekes, hogy további támadáshoz legyen proxy, azaz a gépedet vezérelve támadásokat indítson. Azaz zombivá tegyék és botok kezdjék el használni.
"Mit nyernek a támadók, ha megtámadnak? Felhasználói adatokat?"
Igen. Személyes adatokat. Pl. telefonszámok.
És igen, tudom, hogy nem valószínű, hogy nálam akarnának ilyen adatokat szerezni. Én azt is nagy dolognak tartanám majd, hogyha az indulást követő 1-2 hónapon belül akárcsak százan felregisztrálnának a szerverre.
Viszont azt valahogy szeretném majd kipublikálni az érdeklődők felé, technikailag, hogy mi az, amit megteszek az adataik biztonságának érdekében. Hogy meglegyen a bizalmuk felém.
Igazából ez utóbbit szeretném elérni.
"Ha sikeresen betörtek a szerverre, az utolsó az, hogy a futó alkalmazással bajlódjanak."
Jó, de gondoltam, hogyha a hash-eket nem egy szokványos adatbázis formátumban tárolnám, nyersen, hanem mondjuk - most csak példaként írok valami egyszerű dolgot, hogy a lényeg érthető legyen - minden egyes hash egy 16 jegyű hexa kód, és én a hexadecimális számjegyek helyiértékeit valami meghatározott forma szerint, amit csak az algoritmus tartalmaz, felcserélgetem, akkor azzal nehezítem a betörők dolgát. Vagy nem?
"Amit a binárisról írsz nem egészen értem: ha futtatható bináris kódról van szó, azt a hacker is tudja futtatni."
Igen, tudja, de azt akkor csak egy-az-egybe tudja lefuttatni, nem tud a program szekvenciáján (olyan könnyedén) variálni, így nem tudja instant dekóderként használni. Oké, persze egy OllyDbg-vel vagy hasonló disassembler-debugger eszközzel ez triviálisan megkerülhető - gondolom, bár ezekhez az eszközökhöz nem értek -, de erre az esetre meg gondoltam, talán van készen olyan bináris tömörítő, aminél nem olyan egyszerű a RAM-ból egy-az-egybe lenyúlni a kitömörített, nyers binárist.
Ez lemaradt:
"scriptről fordított bináris mennyire őriz meg debug adatokat ill. magát a forráskódot? Ezek az adatok kitörölhetőek valahogy a binárisból?"
A binárisból a debug info már fordításkor kihagyható, de utólag is ki lehet szedni (strip) belőle. Forráskód meg mit is keresne egy binárisban?
"Jó tűzfallal, védelmi szabályokkal ez aligha fordul elő. (nyilván nem egy gépen kellene minden szervernek futnia)"
Ez egy kis indie, nonprofit project lenne, sajnos arra nincsenek már anyagi kapacitásaim, hogy több szervert tartsak fent / fizessek elő.
"Forráskód meg mit is keresne egy binárisban?"
Nemm tudom... 🤷🏻♂️ de feltételeztem, ez egy létező dolog. A Microsoft-os, M$ DOS-al szállított QBASIC fordító pl. ilyen volt, hiába volt a kimenet egy kész, hordozható, egyetlen darab EXE, az gyakorlatilag tartalmazta magát a QBASIC értelmezőt és a tényleges programot afféle bájtkód szerűségben, vagy hogyhívják(?). Léteztek is azt hiszem rá nemhivatalos, forráskódba visszafordítók. De ha más nem, arra én is emlékszem, hogy egy ilyen EXE-t egyszer én is megnyitottam egy bájtalapú szerkesztőben, és szabad szemmel is lehetett látni, hogy gyakorlatilag ott van benne visszanyerhető formában a forráskód.
A QBASIC egy interpretált nyelv volt. Úgy működött, hogy egy binárisba befordította az interpretert és a forrást is.
Működés szempontjából olyan volt, mint egy python interpreter és egy python script.
Az a baj a saját hash-sel, hogy nincs tesztelve, és nem értesz annyira hozzá, hogy annyira jól írd meg, mintha létező, erre kitaláltat használnál.
Minden program visszafejthető, és ha az adja a biztonságot, hogy ezt próbálod nehezebbé tenni, az nem biztonság.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!