The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  вход/выход  слежка  RSS
"Выпуск strace 4.15 с функцией подмены системных вызовов"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск strace 4.15 с функцией подмены системных вызовов"  +/
Сообщение от opennews (ok) on 15-Дек-16, 11:39 
Доступна (https://sourceforge.net/p/strace/mailman/message/35550687/) новая версия утилиты strace 4.15 (https://strace.github.com), предназначенной для диагностики и отладки программ в ОС на базе ядра Linux. Утилита позволяет отслеживать и (начиная с данной версии) вмешиваться в процесс взаимодействия программы и ядра, включая происходящие системные вызовы, возникающие сигналы и изменения состояния процесса. Для своей работы strace использует механизм ptrace (http://man7.org/linux/man-pages/man2/ptrace.2.html). Код проекта распространяется (https://github.com/strace/strace) под лицензией BSD. Начиная с версии 4.13, формирование выпусков strace синхронизировано с выходом очередных версий Linux.


В версии 4.15 можно отметить следующие изменения (https://raw.githubusercontent.com/strace/strace/master/NEWS):

-  Реализована возможность подмены номера системного вызова и результата вызова («fault injection (https://en.wikipedia.org/wiki/Fault_injection)»). Данная функциональность даёт возможность изучать поведение приложений в случае возникновения ошибок при выполнении различных системных вызовов. Например, данная возможность позволила выявить (https://sourceware.org/bugzilla/show_bug.cgi?id=20831) недостаточную проверку кода возврата вызовов mprotect() в коде glibc dynamic linker:


     $ strace -e mprotect -e fault=mprotect:when=1:error=ENOMEM cat

     mprotect(0xf774e000, 4096, PROT_NONE)   = -1 ENOMEM (Cannot allocate memory) (INJECTED)
     mprotect(0xf774f000, 8192, PROT_READ)   = 0
     mprotect(0x8054000, 4096, PROT_READ)    = 0
     mprotect(0xf7784000, 4096, PROT_READ)   = 0
     +++ exited with 0 +++


Более подробно данная возможность  рассмотрена (https://brokenpi.pe/tools/strace-fault-injection) автором прототипной реализации, сделанной в рамках GSoC 2016, и на выступлении «Can strace make you fail? (http://0x1.tv/Can_strace_make_you_fail%3F_(%D0%94%D0%BC%D0%B8%D1%82%D1%80%D0%B8%D0%B9_%D0%9B%D0%B5%D0%B2%D0%B8%D0%BD,_OSSDEVCONF-2016))» на Тринадцатой (https://www.altlinux.org/images/7/73/Kaluga-xiii-2016.pdf) конференции разработчиков свободных программ (https://ru.wikipedia.org/wiki/%D0%9A%D0%...).
-  Добавлена поддержка декодирования команд ioctl(), связанных с подсистемой device mapper (https://www.kernel.org/doc/Documentation/device-mapper/):


     $ strace -e trace=ioctl -v dmsetup ls
     ioctl(3, DM_VERSION, {version=4.0.0, data_size=16384, flags=DM_EXISTS_FLAG} => {version=4.27.0, data_size=16384, flags=DM_EXISTS_FLAG}) = 0
ioctl(3, DM_LIST_DEVICES, {version=4.0.0, data_size=16384, data_start=312, flags=DM_EXISTS_FLAG} => {version=4.27.0, data_size=339, data_start=312, flags=DM_EXISTS_FLAG, {dev=makedev(253, 0), name="dm0"}}) = 0
     dm0    (253:0)
     +++ exited with 0 +++


-  Добавлена поддержка декодирования значения аргумента attr системного вызова perf_event_open():


     $ strace -e trace=perf_event_open -v perf stat -e kmem:mm_page_pcpu_drain sh -c 'git gc 2>/dev/null'
     --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=10413, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
     perf_event_open({type=PERF_TYPE_TRACEPOINT, size=PERF_ATTR_SIZE_VER3, config=398, sample_period=1, sample_type=PERF_SAMPLE_TIME|PERF_SAMPLE_CPU|PERF_SAMPLE_PERIOD|PERF_SAMPLE_RAW, read_format=PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING, disabled=1, inherit=1, pinned=0, exclusive=0, exclusive_user=0, exclude_kernel=0, exclude_hv=0, exclude_idle=0, mmap=0, comm=0, freq=0, inherit_stat=0, enable_on_exec=1, task=0, watermark=0, precise_ip=0 /* arbitrary skid */, mmap_data=0, sample_id_all=0, exclude_host=0, exclude_guest=1, exclude_callchain_kernel=0, exclude_callchain_user=0, mmap2=0, comm_exec=0, use_clockid=0, context_switch=0, write_backward=0, wakeup_events=0, config1=0, config2=0, sample_regs_user=0}, 10414, -1, -1, 0) = 3
     --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=10414, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
    
      Performance counter stats for 'sh -c git gc 2>/dev/null':
    
                  7,006      kmem:mm_page_pcpu_drain                                    
    
            2.207781396 seconds time elapsed
    
     --- SIGCHLD {si_signo=SIGCHLD, si_code=SI_USER, si_pid=10412, si_uid=0} ---
     +++ exited with 0 +++

-  Добавлена поддержка декодирования системных вызовов pkey_alloc(), pkey_free() и pkey_mprotect(), добавленных (https://lwn.net/Articles/689395/) в Linux 4.9 (см. также (https://lwn.net/Articles/667156/)).
-  Обновлена поддержка декодирования системных вызовов для архитектур arc, x32 и xtensa.
-  Реструктурирована страница документации strace(1).


URL: https://sourceforge.net/p/strace/mailman/message/35550687/
Новость: http://www.opennet.ru/opennews/art.shtml?num=45689

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Выпуск strace 4.15 с функцией подмены системных вызовов"  +3 +/
Сообщение от Michael Shigorin email(ok) on 15-Дек-16, 11:39 
Вот соответствующий доклад ldv@ и слайды к нему с нашей осенней конференции: http://0x1.tv/201610019
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Выпуск strace 4.15 с функцией подмены системных вызовов"  +/
Сообщение от Аноним (??) on 15-Дек-16, 12:34 
Классное изменение. Подозреваю, что fault injection можно использовать для получения root-а непривилегирвоанным пользвоателем через манипуляции с suid-процессом в strace.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Выпуск strace 4.15 с функцией подмены системных вызовов"  +1 +/
Сообщение от hoopoe email(ok) on 15-Дек-16, 12:50 
это вряд-ли, ptrace не даст дебажить suid-ный процесс
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Выпуск strace 4.15 с функцией подмены системных вызовов"  +/
Сообщение от snmp agent on 15-Дек-16, 12:52 
Думаю, не получится. man strace:
Programs that use the setuid bit do not have effective user ID privileges while being traced.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Выпуск strace 4.15 с функцией подмены системных вызовов"  +2 +/
Сообщение от Аноним (??) on 15-Дек-16, 12:57 
замечательная программа. одна из самых полезных для разработчика и сисадмина.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Выпуск strace 4.15 с функцией подмены системных вызовов"  +/
Сообщение от Антон (??) on 15-Дек-16, 19:11 
Еще бы strace не замедлял бы работу процесса на стролько, что:
- в prod использовать можно только если все лежит и терять уже нечего
- исследуемый процесс замедляется настолько что изменяется его работа

http://www.brendangregg.com/blog/2014-05-11/strace-wow-much-...

FreeBSD-шный ktrace такой проблемы не имеет...

Впрочем в Linux не все так плохо, появился perf trace (впрочем он показывает меньше, чем strace), есть SystemTap (нет "из коробки" в большинстве дистрибутивов). Может быть через eBPF можно будет сделать что то аналогичное.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру