Sqely dvojclanek, ktery se radi do top 10 of root.cz. Dekuju <p>Peter
Názory k článku
Taky vám přetéká? (2)
Kouzlo assembleru
celé vláknoUz jsem davno zapomnel na kouzlo assembleru. Je to proste nadhera. Kde jsou ty casy ?
Dekuji
PS. Naposledy jsem si hral s assemblerem na Alphe a musim rict : tak trochu jiny assembler.
super!
celé vláknobezva clanek. mam rad, kdyz o tematu pise nekdo, kdo do nej vidi. a jaky z clnaku plyne pouceni? ze psat exploity nemuze kdejaka lama ;)
Re: super!
celé vláknoSpis naopak, ten princip neni zrovna "rocket science."
Kazdopadne pro osvetu paradni clanek, diky!
Jina casta bezpecnostni dira
celé vláknoCasto se take v mnoha programech setkate s konstrukci tohoto typu:
...
char str[1024];
... /* naplneni stringu str z uzivatelskeho vstupu/souboru/argumentu z prikazove radky apod. */
printf(str);
...
To je nebezpecne z toho duvodu, ze uzivatel vysledneho programu muze naplnit string str zaludnou posloupnosti znaku obsahujici veci jako "%d" apod., ktere zpusobi, ze veci na zasobniku (interni lokalni promenne funkce printf(), navratova adresa) jsou dale povazovany za dalsi argumenty printf(). Funkce printf() tim padem pouzije jinou (nespravnou) adresu. Je to sloziteji zneuzitelne, ale lze to.
Bezpecne je psat volani printf() takto:
printf("%s", str);
Duvod bezpecnosti teto konstrukce je snad kazdemu c-ckari jasny. Samozrejme se to vse tyka i pribuznych funkci sprintf(), fprintf() atd.
Mozna to vse nerikam moc presne, ale blizsi/presnejsi informace najdete na Internetu, napr. na http://www.linuxsecurity.com/docs/LDP/Secure-Programs-HOWTO/control-formatting.html
Re: Jina casta bezpecnostni dira
celé vláknoA proc nepouzivat rovnou puts(string)? Pripada mi to logictejsi nez printf("%s", string).
Re: Jina casta bezpecnostni dira
celé vláknonebo write ( 1, string, strlen ( string ) ) :))
Záludnosti a problém
celé vláknoNo, před rokem jsem ve škole ukazoval učiteli při zkoušce program v C++. Mělo se zadávat číslo a výsledek byla nějaká funkca. Najednou přišel spolužák, ukaž já to vyzkouším. Začal tam psát nějaký znaky, a já na něj, že tam má být číslo... Nějak to tam nastrkal a program se zacykloval (asi nějak šikovně přepsal návratovou adresu).
Moje otázka zní, jak se proti tomu jednoduše bránit. Například chci číslo, 5 znaků, jak to udělat (nejjednodušeji).
Jo, taková maličkost, proč je to C++ tak děsně blbý? Vyšší programovací jazyky (Delphi, Pascal atd.) tyhle problémy vůbec nemaj... Maximálně spadne program, ale v C++ je každá prkotina přetečení zásobníku :-(
Re: Záludnosti a problém
celé vláknoNejsem si tak uplne jisty, ze slo zrovna o preteceni bufferu. Pokud jste pouzil klasicky 'cin' a to do nejakeho int/long, tak se neni cemu divit. Cteni selze a vsechna nasledujici take (tim padem se program vetsinou tvari, ze se zacyklil). Podobne je na tom ovsem aji scanf v C, takze si nevyberete. Ano, daji se testovat navratove hodnoty ... ale to je opruz (a nez tuto vetu nekdo napadne - daleko lepsi nez periodicke checkovani a'la errno jsou samozrejme vyjimky). Zlate vlastni funkce a nebo jine (inteligentni) jazyky :)
Re: Záludnosti a problém
celé vláknoa co treba pouzivat na vstupu isdigit()
char ch;
while((cin.get(ch)) && isdigit(ch))
Re: Záludnosti a problém
celé vláknoAsi jsem divny, ale v mych programech mi jeste zasobnik nikdy nepretekl. V C++ je mozne take programovat "bezpecne", ale je potreba vedet, na co si davat pozor. Pro zacatecnicke hrani si na programatora a vyuku programovani bych doporucoval Python. V C a C++ by asi nemeli lidi programovat, dokud se jazyk trosku nenauci. ;-)
Re: Záludnosti a problém
celé vláknoNo, me prijde, ze je nesmysl se ucit programovat v pythonu a pak prechazet na C++, kdyz maji uplne jinou syntaxi ;-).
Snad by bylo logictejsi na vyuku pouzit napr. Perl.
K te bezpecnosti, C++ je hodne zaludne, napr. ve statickem/dynamickem volani metod, nebo pretezovani operatoru. Je potreba vedet jak je implementovane to, co pouzivam a to je nejvetsi potiz. Kdyz programator pise neco vetsiho, problemum se stejne nevyhne.
Protoze me osobne bezpecnost velmi trapi, presunul jsem se k jave.
Re: Záludnosti a problém
celé vlákno1. Perl bych pro vyuku programovani nedoporucil, protoze mi jako jazyk pripadne dost spatne navrzeny.
2. Pokud se pracuje v tymu, mela by se urcit jasna pravidla ohledne psani kodu, jeho dokumentace apod.
3. Je jasne, ze C/C++ psani bezpecneho kodu moc nenapomaha, ale at se nam to libi nebo ne, ma porad jeste sve opodstatneni a navic se v mnoha dalsich pripadech pouziva "ze zvyku". Proto si myslim, ze by bylo dobre na tento dvojclanek navazat nejakym delsim serialem. Autore, slysite, nechcete neco sepsat?
Reseni domaciho ukolu
celé vláknoZdravim vsechny okolo, clanek je opravdu inspirujici :-)
Natolik, ze mi to nedalo a prepsal jsem si ho. Ukazka sice nefunguje, jak uz autor predesilal, ale udelal jsem funkcni variaci, ktera ziska prava roota a navic rootovo konto odstreli :-) Zajemci o reseni se muzou ozvat ...
Jediny problem ovsem spociva v tom, ze v systemu velmi pravdepodobne nenarazite na rootvsky soubor s sbitem, co by to bylo za roota, kterej by si nechal takovouhle diru do systemu ... Nebo se pletu? Jestli nekdo o necem vi, at prispeje se svou troskou do diskuze.
Zajimalo by me, jak vyresit problem s navratovou adresou u demonu, neporadite nekdo?
Re: Reseni domaciho ukolu
celé vláknoSpousta programu pochopitelne SetUID bit nastaveny potrebuje. Namatkou su, passwd ... pochopitelne tyto programy obvykle nejsou napsane tak lamersky. Horsi to byva s demony, kteri jsou slozitejsi nez SetUID programy.
jak uz jsem jednou...
celé vláknoJak uz jsem jednou rekl. Nejlepsi je visual basic!
Bez titulku
celé vláknoTen domaci ukol je hezky chytak :-).

