SystemTap: Difference between revisions
No edit summary |
No edit summary |
||
Line 82: | Line 82: | ||
= Funktsioonide ja parameetrite tuvastamine = | |||
Kui tekib probleeme sellega, et ei leia üles vajalikke funktsioone või ei tea, funktsioonidega kaasas käivaid parameetrite nimesid, siis selle puhul aitavad järgnevad käsureakäsud | Kui tekib probleeme sellega, et ei leia üles vajalikke funktsioone või ei tea, funktsioonidega kaasas käivaid parameetrite nimesid, siis selle puhul aitavad järgnevad käsureakäsud | ||
---- | ---- | ||
Line 93: | Line 94: | ||
---- | ---- | ||
tagastab kõik kerneli funktsioonid, mille nimi algab "may_" stringiga | tagastab kõik kerneli funktsioonid, mille nimi algab "may_" stringiga | ||
Revision as of 14:34, 17 January 2014
Millega on tegu
Sisuliselt on SystemTap-i näol tegemist skriptimiskeele ja tarkvaraga, millega saab luua laetavaid kerneli mooduleid (loadable kernel module) väga erinevatel eesmärkidel. Loodud kerneli moodulid suudavad ennast näiteks ühe väga kasuliku võimalusena, haakida erinevate süsteemi moodulites olevate funktsioonide külge ning seeläbi monitoorida ja muuta andmeid mida programmid süsteemilt küsivad ja/või tulemuseks saavad. See on kasutusel nii administraatorite kui arendajate poolt, tehes väga lihtsalt võimalikuks jälgida erinevate programmide tööd, nende tehtavate süsteemi kutsete (system calls) parameetreid ning tulemusi ja võib isegi aitada süsteemi jõudluse pudelikaelade leidmisel. Kõige lihtsam on SystemTapi võimaluste osas endale selgem pilt saada, kui külastada näidete lehekülge, kus on pikk nimekiri erinevatest algkoodidest koos funktsionaalsuse kirjeldusega: SystemTap näited
Kuidas paigaldada (Xubuntu näitel)
Valisin Xubuntu seepärast, et kasutan seda ise pidevalt ning seepärast, et Ubuntu ja selle erinevad arendused/analoogid on väga populaarsed.
SystemTap enda paigaldamine on Xubuntu puhul väga lihtne (paigaldatakse ka gcc):
sudo apt-get install -y systemtap gcc
Seejärel on vaja paigaldada kerneli debug informatsiooni paketid (lisab ka mõned uued repository-d ning võtab üldiselt veidi rohkem aega, sest paketi maht on suhteliselt suur):
codename=$(lsb_release -c | awk '{print $2}')
sudo tee /etc/apt/sources.list.d/ddebs.list << EOF
deb http://ddebs.ubuntu.com/ ${codename} main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-security main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-updates main restricted universe multiverse
deb http://ddebs.ubuntu.com/ ${codename}-proposed main restricted universe multiverse
EOF
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECDCAD72428D7C01
sudo apt-get update
sudo apt-get install linux-image-$(uname -r)-dbgsym
Oluline info
Linuxi kerneli kood muutub küll olulistes kohtades suht harva, kuid sellegi poolest on erinevused erinevate kerneli versioonide puhul olemas. Seetõttu ei pruugi kõik SystemTap-i lehel olevad näited üldse töötada. Eriti need, mille puhul antakse täpselt c faili täpsusega, et mis funktsiooni külge probe kinnitub. Et leida funktsioone ja nende asukohti, oli minu jaoks kõige mugavam kasutada lehekülge http://lxr.free-electrons.com/ident näiteks vfs_mkdir leidmiseks otsidagi seda ning lehekülg tagastab c faili kus see asub: http://lxr.free-electrons.com/ident?i=vfs_mkdir
Esimesed programmid
Esimene programm on väga lihtne ja tüüpiline - Hello world
probe begin { println("hello world") exit () }
See tuleb salvestada kuhugi faili, ütleme näiteks tere.stp ja seejärel käivitada käsk "sudo stap tere.stp". Selle tulemusena peaks kuvatama vana ja tuttav teade.
Teine programm kasutab juba SystemTap-i kõige kasulikumat omadust ning seob ennast ühe syscall-ga. Antud näites on selleks mkdir, mis kutsutakse välja, nagu nimigi juba ütleb, siis kui soovitakse luua uus kataloog
probe begin
{
println("ALGAB")
}
probe syscall.mkdir
{
println("KATALOOG: ", pathname)
}
Kui see käivitada täpselt samal viisil nagu eelmine skript, siis kompileerimise ning laadimise järel kuvatakse teade "ALGAB" ja peale seda hakatakse kuvama iga loodud kataloogi.
Funktsioonide ja parameetrite tuvastamine
Kui tekib probleeme sellega, et ei leia üles vajalikke funktsioone või ei tea, funktsioonidega kaasas käivaid parameetrite nimesid, siis selle puhul aitavad järgnevad käsureakäsud
stap -L syscall.mkdir
tagastab mkdir system call-iga kasutatavad parameetrid
stap -L 'kernel.function("may_*")'
tagastab kõik kerneli funktsioonid, mille nimi algab "may_" stringiga
Failid
Viited erinevatele materjalidele
Esitlus mille teema oli SystemTapi kasutamine sisulise rootkitina