"Grafikus" fingerprint megjelenítési támogatás érkezik az OpenSSH-ba

Címkék

Szintén a c2k8 HackAthon eredményeként érkezik a "grafikus" fingerprint megjelenítési támogatás az OpenSSH-ba. Alexander von Gernler (grunk@) szerint a fingerprint ellenőrzés leggyengébb láncszeme az ember. Ha a felhasználók nem ellenőrzik az SSH hexa text fingerprint-eket, mert azokat bonyolultaknak és kellemetleneknek találják, akkor más megoldást kell keresni. A fejlesztő szerint az emberi agy a világ valaha ismert legjobb mintafelismerő rendszere. Ha így van, akkor miért ne használnánk?

A fejlesztő elképzelése, hogy egy kisméretű képet mutat a felhasználónak minden egyes SSH-n keresztüli belépéskor. Ha a képecske ugyanaz minden alkalommal, akkor minden rendben van. Ha a kép megváltozik, akkor azonnal észlelni lehet, hogy valami nincs rendben.

Az egyik probléma a megfelelő kimeneti formátum megtalálása volt. Az SSH-t használó emberek legtöbbje szöveges terminált használ, így a nagyfelbontású grafikai elemek használata nem opció.

Helyette a fejlesztőnek a következő feltételeknek kellett megfelelnie az output-tal kapcsolatban: 7 bites tiszta ASCII text, színek nélkül, scroll-ozás nélkül, animáció nélkül, minden sallang nélkül.


+--[ RSA]---------+
|.o               |
|...              |
|= ...            |
| = ...           |
|+  .  .ES        |
|..  o  ..o .     |
|   . o  ..+ o o  |
|    . o o. . = . |
|     . . .    o  |
+-----------------+
 
+--[ RSA]---------+
|      .. .       |
|     .  . .      |
|    .  . o       |
|   .  . =        |
|  .    oSo       |
| .  . ..= .      |
|E .  o.B =       |
| o    =.*        |
|       +o.       |
+-----------------+

Végül megszületett egy nagyon egyszerű algoritmus, amely mindazonáltal számításba veszi a hexa fingerprint minden elemét a kimenet (példák fent) megalkotásakor.

A fejlesztő jelenleg kutatásokat folytat arra nézve, hogy mennyire egyszerű hamisítani ezeket a képeket.

Aki kíváncsi az új szolgáltatásra, annak a következőt kell tennie:


1.  fordítania kell egy -current SSH-t

2.  El kell helyeznie egy 

        CheckHostIP     fingerprint

    opciót a ~/.ssh/config file-ban.  

3.  Ha tudni akarja, hogy az ismert hostjai hogy "néznek ki", akkor begépelheti a 

        ssh-keygen -lv -f ~/.ssh/known_hosts | less

    parancsot és megtekintheti. 

A részletek itt olvashatók.

Hozzászólások

Ez is érdekes ->

Chapter 8. Remote OS Detection

http://nmap.org/book/osdetect.html

--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

A jó szó az érdekes. Mert hogy haszna ne sok van...

Erre a remote OS detecton nmap feature-re mindig úgy tekintettem, mint egy jó viccre. Egy példa:

All 1714 scanned ports on xxx (xx.xx.xx.x) are closed
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|webcam|broadband router|VoIP phone|remote management|WAP|printer|switch
Running (JUST GUESSING) : Microsoft Windows 2003 (87%), D-Link embedded (87%), Linksys embedded (87%), Grandstream embedded (87%), HP embedded (87%), HP iLO (87%), Panasonic embedded (87%), Symbol embedded (87%)
Aggressive OS guesses: Microsoft Windows Server 2003 SP1 (87%), D-Link DCS-3220 webcam (87%), Linksys BEFSR41 EtherFast broadband router or D-Link DCS-6620G webcam (87%), Grandstream | embedded || VoIP phone (87%), HP DL320 server iLO2 remote management interface (87%), HP Integrated Lights-Out II remote server management (87%), Linksys BEFSR41 EtherFast broadband router (87%), Linksys BEFSR41 WAP or RT31P2 broadband router (87%), Linksys BEFW11S4 WAP (87%), Panasonic DB-3500 series printer (87%)
No exact OS matches for host (test conditions non-ideal).

Válogasson az ember. De minek? Köszönő viszonyban sincs a valósággal.

--
trey @ gépház

Akkor tud jól működni az OS fingerprint ha az adatbázisod nagy. Fyodor mindig kéri, hogy minden os minden típusú kiadásából küldjenek fingerprint -eket mert CSAK akkor lesz mindenhol releváns az eredmény.

--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

Az is lehet hogy fast módban futtattad és csak a lényeges port -okat scan -elte nem az összeset. Azt valahogy nem hinném hogy nem venné észre ha egy portra van connect.

--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

Na pont erről magyaráztam, csak elsőre fel se tételeztem hogy trey ezt nem vágja vagy most mire gondol.

Legközelebb a parancs sort is paste -eld be, úgy könnyebb reagálni :-)

--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

Ja, kiment a fejemből, hogy átkerült a webszerver non-standard portra.

Interesting ports on xxx (xxxx):
Not shown: xxx closed ports
PORT STATE SERVICE VERSION
0/tcp open unknown
xxxx/tcp open unknown
No OS matches for host

Továbbra sem tartom sokra (semmire) ez az OS detectiont.

--
trey @ gépház

De remélem az nmap -et azért igen. Nem is vitatkozom tök jól mondtad az OS detection csak hab a tortán nem lényeges infó. Már csak azért is mert sok secirity system (pont az nmap miatt) fake adatokat küld :-)

Amúgy mit használsz, vagy legalábbis nem fikázol ?

talán ezt -> http://m.nu/program/util/netcat/netcat.html

--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

oh G, akkor ezt nem értetted gondolom amikor ezt írtam -> "Nem is vitatkozom az OS detection csak hab a tortán nem lényeges infó."

Na midn1, a végére egy jó kis dumálás kerekedett, köszi :-)

--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

Az OS fingerprinting ötlete nem az nmap-os Fyodor-tól származik, hanem lcamtuf-tól (Michal Zalewski) és ő alapvetően arra találta ki, hogy passzívan, külön csomag generálása nélkül lehessen az áthaladó forgalmon OS-t azonosítani. Az ötletet felhasználta Fyodor az nmap-nál, de a hagyományos portscan funkció esetén sérti is az alapelvet, hisz ezesetben aktívan történik az azonosítás, mert plusz forgalmat generál hozzá.

p0f

Helyzet függő. Ha nem ismered a távoli infrastruktúrát, akkor sok esetben akár még kifejezetten hátrányos is lehet. Gondolok itt például olyan esetre, ahol egy IP-re van kinatolva több különböző szolgáltatás, amelyek több különböző szerverre futnak be és azokon különböző operációs rendszerek vannak. Ilyen esetben a több portra kiterjedő nmap OS fingerprinting teljesen fals eredményeket adhat.

Szóval nem per-IP érdemes ezt csinálni, hanem a támadni kívánt szolgáltatáshoz tartozó porto(ka)t vizsgálni. Ott is inkább az Application Layer Fingerprinting a célravezetőbb. Ha mindenképp kell OS azonosítás (és máshogy nem deríthető ki), akkor az nmap féle szignatúra egyeztetéses módszert érdemesebb inkább kiváltani (vagy ötvözni) az Ofir Arkin által kitalált heurisztikus statisztikai vizsgálattal, mert úgy pontosabb eredményekhez lehet jutni.

Hú, az jó régen volt (4+ éve) és már akkor is írtam, hogy nem 100%-os módszer, csak az egyszerű kiddiek ellen jó. Az lényegében pont ugyanennek az alapötletnek a felhasználása, csak ezúttal az nmap ellen.

A legelső OS fingerprinting funkcióval rendelkező nmap verziók ugyanúgy felismerhetők voltak az egyedi csomagjaik miatt, mint az oprendszerek, így fellehetett használni az ötletet az nmap detektálására is.
Mivel az OpenBSD packet filter-be bekerült ez a passzív OS fingerprinting támogatás, ezért annak segítségével bizonyos típusú nmap portscaneket blokkolni lehetett a csomagjai alapján és így nem talált az nmap nyitott portokat (emiatt aztán az OS felismerés is meghiúsult).

Később Fyodor változtatott az nmap csomag generáló kódján, így már kevésbé lehet felismerni az ilyen próbálkozásokat, de még mindig vannak rá módszerek, csak jóval radikálisabb beavatkozásokat igényelnek (pl. az első nmap gyanús csomagnál blokkolni az adott IP-t egy időre). Ezek viszont meg magukkal hozzák a fals pozitív problémákat is, ezért kevésbé érdemes velük szórakozni.

Hát, attól függ hogy érted... Kernel szinten nem sokkal bonyolultabb az OS fingerprintre matchelni a SYN csomagok feldolgozásakor, mint egy táblányi IP-t végignézni, hogy blokkolni kell-e vagy sem. Szóval nem emiatt lesz nagy valószínűséggel az overhead.

Ha meg annyi packet jön, hogy megeszi az összes sávszélességet, akkor egyébként sincs mit tenni (max. ha van rá lehetőség, akkor máshol szűrni, ahol vastagabb a "cső", pl. a szolgáltatói gerincen ;)

Ezt pont nekem mondod :P

Mennyire véletlen az a véletlen szám

http://hup.hu/node/51006

Még jó hogy blog -olok, így nem kell sokat magyarázni. (ez is cool a hup -on)
--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

"Az OS fingerprinting ötlete nem az nmap-os Fyodor-tól származik, hanem lcamtuf-tól (Michal Zalewski) "

Erre irtam hogy róla már blog -oltam, tudom hogy trey -nek írtál. Sőt ő meg téged kérdezett, várom arra mit válaszolsz.

Szóval ha rosszul fogalmaztam és magadra vetted, bocs.

--

"No trees were destroyed in the sending of this message. However,
a large number of electrons were terribly inconvenienced."

"szerinted miért jó, mire használható"

Mi pl. NAT-detektort csinaltunk vele anno (ill. nem konkretan nmap-el, csak az elvet felhasznalva), ebben a minosegeben meglehetosen pontosnak bizonyult.

"mennyire pontos"

Teljesen, csak figyelembe kell venni nehany dolgot.
Eloszoris pl. a mukodesi elvet, es azt, hogy ebbol kovetkezoen irrealis dolog 100%-os pontossagot elvarni.
Masreszt erdemes egy uptodate verziot hasznalni belole, es nem egy 628 eveset, ami a legtobb disztroban megtalalhato.
Harmadreszt ha valamilyen NAT-olos, vagy az ip-csomagokat mas modon szetganyolos eszkoz (pl. otthoni jatekrouter) mogul probalod, akkor nyilvan nem fog mukodni.
Tovabba, ha nem talalt legalabb egy open, es egy closed portot, akkor nyilvan nem fog mukodni, mint ahogy ezt a tenyt kozli is ekes angol nyelven.
Nem hatrany az sem, ha olyan ISP-rol probalod, ami nem kezd kulonfele maganakciokba, es szuri/redirectolja/proxyzza bizonyos, neki nem tetszo portok forgalmat, tehat erdemes tobb helyrol megprobalni.

Ha meg igy sem megy, akkor a fejlesztoknek lehet kuldeni fingerprinteket, orulni fognak neki.

--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!

"Mi pl. NAT-detektort csinaltunk vele anno (ill. nem konkretan nmap-el, csak az elvet felhasznalva), ebben a minosegeben meglehetosen pontosnak bizonyult."

nmap-ról volt szó végig...

"[hosszú lista, hogy mikor miért nem ad semmilyen eredményt / semmire sem használható eredményt ad]"

És az sem baj, ha a scannel-t rendszert nem készítették fel az nmap összezavarására.

"Ha meg igy sem megy, akkor a fejlesztoknek lehet kuldeni fingerprinteket, orulni fognak neki."

Ha most teleszóróm a fejlesztőket fake fingerprintekkel, azt kiválogatják valami módon?

--
trey @ gépház

Az OS-fingerprinting egy eszköz, OS-detektálás eszközkészletének egy eleme -- önmagában általában nem alklamas az OS pontos meghatározására, arra viszont igen, hogy alkalmazások detektálásával együtt az OS-ről, illetve a teljes infrastruktúráról adjon hozzáértőknek elegendő információt.

sehol egy "screenshot"? nekem ascii artos medve vagy terminátor kell :D

Lehet példát látni ilyen képre valahol?

"(a ppt-ben nem lattam konkret program screenshotot)"

Az a ppt a 2006-os előadásról szól szerintem, ami ihlette ezt a feature-t. Nem magáról a mostani megvalósításról.

"hsz-ban is van egy kep ASCII kep."

Ja, az most került oda. Kár, hogy el van csúszva. Viszont ha reply-t nyomtam rá, akkor jó lett. Frissítettem a cikket az ábrákkal. Viszont ahogy ott mondják, koránt sem biztos, hogy ezeket a ASCII art-okat egyszerű lesz megjegyezni.

--
trey @ gépház

Légyszives magyarázzátok el nekem, hogy ennek mi értelme.
Most vagy én nem értem a postot, vagy nem tudom.
Arra gondolok, hogy (nekem legalábbis, de szvsz mindenkine) az ssh úgyis szól, ha megváltozott a host-key.
Én nem is szoktam nézegetni a known-hosts -ot, mert minek.
Szóval én nem értem, hogy ezek a képecskék mire is jók?

Igen szól. A 2. alkalommal.
Az első alkalommal leellenőrizted a hexa számot amit kiírt?
Kb fél/egy évente azért szokott cserélődni a legtöbb helyen. Akkor mindig leellenőrzöd?
Volt már, hogy egy olyan gépről léptél be egy jól ismert szerverre, ahonnan még nem? És leellenőrizted?

Na, EZ az értelme...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

És ez már az 1. alkalommal is szól?
És azt hogyan csinálja, hiszen még csak akkor fog bekerülni automatikusan a host-key a known-hosts -ba.
Vagy ha én adom hozzá kézzel (mert tudom, hogy mi a server host-key -e), akkor meg megint csak fog szólni az ssh,
hogy nem egyezik.
Most lehet, hogy én vagyok a tök hülye, de tényleg nem értem, miért is jó ez....

Nyilván arról van szó, hogy ha egy olyan kliensről jelentkezel be, ahol még nem szerepel a távoli szerver publikus kulcsa a kliens known_hosts filejába, akkor valamilyen módon azonosítanod kell, hogy tényleg ahhoz a szerverhez csatlakozol amelyikhez szeretnél és nem pedig épp egy MITM támadás áldozata leszel. Ennek kiderítésére készül a publikus kulcsról egy MD5 hash lenyomat, amely alapján beazonosítható, hogy tényleg a szerverrel beszélsz és ezt az MD5 hash-t viszonylag nehéz hamisítani.

A probléma az, hogy nemhogy a publikus kulcsot, de még a róla készülő MD5 hash-t sem képesek megjegyezni az emberek, hogy azonosíthassák a szervert, ezért egy olyan azonosítási módszerre van szükség, amelyre az emberi agy fogékonyabb. Mivel a hosszú számsorozatokat nehezebben tudunk megjegyezni, mint képeket/mintákat, ezért felmerült az ötlet, hogy generálni kellene ilyen jellegű ábrát a publikus kulcsból és az alapján könyebben felismerhetők a különbségek (eredeti szerver publikus kulcs és egy MITM támadást végző hamisított publikus kulcs között).

Az ötlet ugyan kézenfekvő, de a megoldása nem egyszerű. Én ebben a kis ASCII ábrás megoldásban konkrétan nem hiszek.

Azt hiszem, most esett le.
Tehát, pl. hogy ha otthonról rendszeresen be-ssh -zok a szerveremre, akkor ez nem nyújt semmi pluszt, hisz az otthoni kliensem már tudja a host-keyt, és ha eltérés van, akkor sípol.
Ez stuff akkor véd, ha egy idegen gépről akarok ssh-zni a szerveremre, és az idegen gépen még nem ismert a host-key.
Ezt úgy védi ki, hogy otthon is megmutatja a szerver key-ének a "képét", meg az idegen gépen is.
Ha eltérés van, akkor szerintük azt az ember észreveszi.
Aha, értem.
Viszont ha egy idegen gépről ssh-zok be (amit én nem teszek), akkor inkább félnék az idegen gépen levő keyloggerektől, wormoktól, troyanoktól, amik lesik a billentyűleütéseimet...

Ez az ASCII-kisképes megoldás egyébként valóban nem az igazi...

Hát ja, de egy ip-cím 32 bites szám, de ugye 4 db háromjegyű decimális számmal szokták ábrázolni.
Még ezt a 4 db számot sem sokkal nehezebb megjegyezni, mint pl. egy telefonszámot. (Tényleg, van még aki tud fejben telefonszámokat? :) )
Ellenben egy MD5 hash, neadj' isten egy RSA-kulcs már keményebb dió. :) Szép hosszú, talán több oldalas mondatok lennének.. :)

Viszont egy olyan szerver esetében, amit sokszor, sok helyről el akarnak érni ssh -n, megoldás lehet egy rendes tanusítvány...

Szerintem nagyon jo otlet. Viszont lehet, hogy kicsivel nagyobb abrara lenne szukseg, es kevesebb szimbolumra. A megjegyezhetoseg es a hamisitas miatt.

----
Sooner or later you had to talk, even if it was only because you'd run out of things to throw. - Pratchett
honlap készítés

A felhasználónak emlékeznie kell hogy milyen volt a képecske a múltkor? Mert akkor nehezen fog ez működni.
Ha nem, vagyis egymás mellett/alatt megjeleníthetőek (a második alkalomtól kezdve, vagy tudom is én, valamihez viszonyítani mindenképpen kell), akkor meg egyszerűbb lenne magát a fingerprinteket egymás alá kiírni.
Vagy ez már túl egyszerű?
--
the tide is turning

Ha ezt ugy generaljak, ahogy gondolom (es ahogy a fingerprinteket szokasos), akkor igazabol nem kell az egeszet pontosan megjegyezni, mert egy valtoztatas eseten egeszmas lesz a grafika (hasonlot generalni meg majdnem olyan nehez, mint ugyanolyat), az meg azert feltunne.

--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!

Egy ilyet pl elég egyszerű kinyomtatni is, és akkor viheted magaddal mindenhova. Persze ezzel az erővel magát a fingerprintet is ki lehetne...

A lényeg, hogy mintákat kell megjegyezni. Pl a pontozott terület formáját, az E és S betűk, vagy az egyenlőségjelek helyét. Ezek gondolom könnyen megváltoznak, és nehéz olyan kulcsot generálni, aminek a fingerprint-képe nagyon hasonló.

az lesz aztán a fingerprint, ha ki is nyomtatjuk:D:D

szerintem sem teljesen esélytelen a rendszer, mindenképp könnyebben megjegyzem az asciiartot a hexánál.
Noigen, ez a szolgáltatás azokat célozza meg, akik ssh-znak, de nem kockák:D
—-—-—

int getRandomNumber() {
return 4;	//szabályos kockadobással választva.
	       //garantáltan véletlenszerű.
}	      //xkcd