12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

WARNINGСокращенная статистика strace для Firefoxaudit) strace покажет последний незавершенный вызов;• если надо отследить все файлы, к которым обращаетсяприложение в процессе работы. Это может быть полезным,например, для составления профиля AppArmorили переноса приложения в среду chroot. В простейшемслучае вызов strace выглядит следующим образом:$ strace unameexecve("/bin/uname", ["uname"], [/* 36 vars*/]) = 0brk(0) = 0x1ed2000access("/etc/ld.so.nohwcap", F_OK) = -1ENOENT (No such file or directory)mmap(NULL, 8192, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =0x7fb79f08a000access("/etc/ld.so.preload", R_OK) = -1ENOENT (No such file or directory)open("/etc/ld.so.cache", O_RDONLY) = 3fstat(3, {st_mode=S_IFREG|0644, st_size=133660, ...}) = 0…### Ïîïûòêà ïîëó÷èòü äîñòóï ê áîëüøîìó êîëè-÷åñòâó ôàéëîâ, â îñíîâíîì èç êàòàëîãà /usr/lib/locale/ru_RU.utf8uname({sys="Linux", node="adept-laptop",...}) = 0…По умолчанию весь вывод strace отправляет в stderr, чтодалеко не всегда удобно. Попросить strace писать выводв файл можно с помощью опции '-o':$ strace -o uname.strace unameПервый системный вызов — execve: запуск файла на выполнение.В скобках передается команда с аргументами(если они есть) и количество переменных окружения, переданныхпроцессу. По умолчанию strace не показы ваетсами переменные окружения, но его можно попроситьвыводить более подробную информацию с помощью опции'-v'. Вызов возвратил 0 — значит все ok. В противномслучае значение было бы -1.Статистика файловых операций с кэшемFirefox за 1 минуту при активном серфингеСледующий интересный системный вызов — access:проверка прав пользователя на файл. В данном случаетестируется существование файла (о чем говорит режимпроверки F_OK). На третьей строчке системный вызоввернул значение -1 (ошибка) и вывел ошибку ENOENT(No such file or directory). Это нормально, так как этотфайл всего лишь служит для указания линковщику на использованиестандартных неоптимизированных версийбиблиотек.Как правило, с помощью вызова access проверяютсятолько права на файл или существование самогофайла, без каких-либо последующих манипуляций надфайлом. Манипуляции над файлом всегда начинаютсяс системного вызова open, открывающего файл в одномиз режимов (O_RDONLY, O_WRONLY или O_RDWR).Вызов возвращает небольшое целое число — файловыйдескриптор, который впоследствии будет использоватьсядругими вызовами (до того момента, пока не будетзакрыт с помощью вызова close).После открытия файла вызовом open происходит егочтение вызовом read или запись вызовом write. Обавызова принимают файловый дескриптор, а возвращаютколичество прочитанных/записанных байт.Вызов fstat предназначен для получения информации офайле (номер inode, uid, gid и т.д.)Самый главный вызов в листинге выше — uname, которыйпозволяет получить информацию о текущем ядре.Если трассировка uname занимает всего сотню строк, тотрассировка серьезного приложения легко может заниматьнесколько тысяч строк. Читать такой лог — не самоебольшое удовольствие. Поэтому иногда лучше записыватьв лог только определенные вызовы. Например, чтобыотследить все вызовы open и access (а на них следуетобращать внимание в первую очередь при проблемах сзапуском приложения):$ strace -e trace=open,access \-o strace.log unameВместо перечисления всех нужных вызовов можноиспользовать классы, состоящие только из специализированныхвызовов: file, process, network, signal илиipc. Также можно писать в лог все вызовы, кроме одного.Например, чтобы исключить вызов mmap:$ strace -e trace=\!mmap -o strace.log unameК сожалению, исключить из вывода сразу нескольковызовов не получится.Некоторые приложения в процессе работы любят наплодитьбольшое количество дочерних процессов. Поумолчанию strace игнорирует дочерние процессы, ноэто поведение можно изменить с помощью опции '-f'.Если вывод strace пишется в лог, то удобно использоватьопцию '-ff', которая заставляет strace писать трассировкукаждого процесса в отдельный лог вида filename.PID.warningИз соображенийбезопасности неследует запускать lddна подозрительныхбинарниках — этоможет привестик выполнениювредоносногокода. Подробности,например, тут:www.catonmat.net/blog/ldd-arbitrarycode-execution/.Наподозрительныхфайлах лучшеиспользовать readelf.HTTP://WWWlinksstrace.sourceforge.netwww.ltrace.orggithub.com/rvoicilas/inotify-toolsINFOinfo• Системные вызовы— это «интерфейс»между ядроми приложением.Ядра Linux ветки2.6 имеют более 400различных вызовов.• Информациюо каждом системномвызове можно найтиво втором разделеman. Например,про повсеместновстречающийсявызов open можнопосмотреть так: «man2 open».• Для работы straceиспользуетсясистемный вызовptrace.• Для трассировкибиблиотечныхвызовов естьотдельныйинструмент — ltrace.XÀÊÅÐ 08 /139/ 10 099

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!