Обнаружение руткитов в GNU/Linux
Клементьев Михаил
DCG #7812
10 марта 2017 г.
$ whoami
Linux Kernel Security Developer
$ whoami
Linux Kernel Security Developer
Security researcher at
$ whoami
Linux Kernel Security Developer
Security researcher at
Hardened Gentoo lover
$ whoami
Linux Kernel Security Developer
Security researcher at
Hardened Gentoo lover
Associate member of
$ agenda
Что есть руткит (scope)
$ agenda
Что есть руткит (scope)
Как снизить вероятность заражения
$ agenda
Что есть руткит (scope)
Как снизить вероятность заражения
Как избавиться от того, что уже внутри? (inb4: сжечь)
$ agenda
Что есть руткит (scope)
Как снизить вероятность заражения
Как избавиться от того, что уже внутри? (inb4: сжечь)
Паника
$ agenda
Что есть руткит (scope)
Как снизить вероятность заражения
Как избавиться от того, что уже внутри? (inb4: сжечь)
Паника
Паранойя
$ agenda
Что есть руткит (scope)
Как снизить вероятность заражения
Как избавиться от того, что уже внутри? (inb4: сжечь)
Паника
Паранойя
Скорбь
$ agenda
Что есть руткит (scope)
Как снизить вероятность заражения
Как избавиться от того, что уже внутри? (inb4: сжечь)
Паника
Паранойя
Скорбь
О проекте по обнаружению руткитов
Who is Mr. Rootkitsky?
Who is Mr. Rootkitsky?
Меня поломали?
Linux Kernel Vulnerabilities By Year (1999-2017)
Linux Kernel Vulnerabilities By Type (1999-2017)
Меня поломали?
Да.
Как не словить?
Использование электронной подписи для модулей ядра
Как не словить?
Использование электронной подписи для модулей ядра
Обеспечение безопасность рабочего компьютера
администратора
Как не словить?
Использование электронной подписи для модулей ядра
Обеспечение безопасность рабочего компьютера
администратора
Знание о том, что происходит на вашей системе (что
должно быть, а чего не должно быть)
Как не словить?
Использование электронной подписи для модулей ядра
Обеспечение безопасность рабочего компьютера
администратора
Знание о том, что происходит на вашей системе (что
должно быть, а чего не должно быть)
Разграничение полномочий
Как не словить?
Использование электронной подписи для модулей ядра
Обеспечение безопасность рабочего компьютера
администратора
Знание о том, что происходит на вашей системе (что
должно быть, а чего не должно быть)
Разграничение полномочий
Обновление!
И что, это поможет?
И что, это поможет?
Нет.
Какие бывают?
User-space
Какие бывают?
User-space
Kernel-space
Чем могут заниматься?
Подмена системных файлов
Чем могут заниматься?
Подмена системных файлов
Изменение логов
Чем могут заниматься?
Подмена системных файлов
Изменение логов
Изменение исполняемых файлов при старте
Чем могут заниматься?
Подмена системных файлов
Изменение логов
Изменение исполняемых файлов при старте
Скрытие процессов
Чем могут заниматься?
Подмена системных файлов
Изменение логов
Изменение исполняемых файлов при старте
Скрытие процессов
Скрытие сетевых соединений
Чем могут заниматься?
Подмена системных файлов
Изменение логов
Изменение исполняемых файлов при старте
Скрытие процессов
Скрытие сетевых соединений
Защита от обнаружения
Чем могут заниматься?
Подмена системных файлов
Изменение логов
Изменение исполняемых файлов при старте
Скрытие процессов
Скрытие сетевых соединений
Защита от обнаружения
Много всего остального, о чем знают только разработчики
Open source решения
chkrootkit (http://www.chkrootkit.org/ | 30.10.2016)
Open source решения
chkrootkit (http://www.chkrootkit.org/ | 30.10.2016)
unhide (http://www.unhide-forensics.info/ | 26.05.2013)
Open source решения
chkrootkit (http://www.chkrootkit.org/ | 30.10.2016)
unhide (http://www.unhide-forensics.info/ | 26.05.2013)
rkhunter (http://rkhunter.sf.net/ | 24.02.2014)
Open source решения
chkrootkit (http://www.chkrootkit.org/ | 30.10.2016)
unhide (http://www.unhide-forensics.info/ | 26.05.2013)
rkhunter (http://rkhunter.sf.net/ | 24.02.2014)
kjackal (https://github.com/dgoulet/kjackal | 16.06.2014)
Используемые методы
Поиск нарушений консистентности предоставляемой ядром
информации
Используемые методы
Поиск нарушений консистентности предоставляемой ядром
информации
Сравнение содержимого procfs с выводом команды ps aux
Используемые методы
Поиск нарушений консистентности предоставляемой ядром
информации
Сравнение содержимого procfs с выводом команды ps aux
Поиск конкретных файлов известных руткитов
Используемые методы
Поиск нарушений консистентности предоставляемой ядром
информации
Сравнение содержимого procfs с выводом команды ps aux
Поиск конкретных файлов известных руткитов
Проверка целостности (e.g. с помощью rpm)
Используемые методы
Поиск нарушений консистентности предоставляемой ядром
информации
Сравнение содержимого procfs с выводом команды ps aux
Поиск конкретных файлов известных руткитов
Проверка целостности (e.g. с помощью rpm)
Перебор идентификаторов процесса
На чем бы проверить?
На чем бы проверить?
первый попавшийся rootkit с github vs chrootkit
Hook таблицы системных вызовов и скрытие себя
# make && insmod open−h i j a c k . c
# dmesg
[ 1 9 0 . 0 4 9 ] Simple mod : o r i g f f f f f f f f 8 1 2 0 b 9 4 0 new addr
# c h k r o o t k i t −q
ens3 : PACKET SNIFFER(/ sbin / d h c l i e n t [ 1 5 5 7 ] )
# rkhunter −c −q
p e r l : warning : Please check that your l o c a l e s e t t i n g
LANGUAGE = ( unset ) ,
LC_ALL = ( unset ) ,
LC_CTYPE = "ru_RU . utf8 " ,
LANG = "ru_RU . utf8 "
are supported and i n s t a l l e d on your system .
p e r l : warning : F a l l i n g back to the standard l o c a l e (
Может быть он слишком
простой?
github.com/NoviceLive/research-rootkit
[ 5879.008563] pshidko . init_module :
Greetings the World !
[ 5879.009880] pshidko . init_module :
Opening the path : / proc .
[ 5879.011110] pshidko . init_module :
Succeeded in opening : / proc
[ 5879.012376] pshidko . init_module :
Changing file_op −>i t e r a t e from f f f f f f f f 8 1 2 7 a 0 0 0
to f f f f f f f f c 0 0 3 c 0 0 0 .
github.com/NoviceLive/research-rootkit
# ps aux
. . .
# dmesg
[ 6225.613397] pshidko . f a k e _ f i l l d i r : Hiding pid : 1
# rkhunter
Checking f o r hidden f i l e s and d i r e c t o r i e s
[ None found ]
Rootkit checks . . .
Rootkits checked : 299
P o s s i b l e r o o t k i t s : 0
# c h k r o o t k i t
Checking ‘ lkm ’ . . .
You have 1 process hidden f o r r e a d d i r command
# unhide quick
Found HIDDEN PID : 1 Command : " i n i t [ 2 ] "
Как нашелся?
chkrootkit:
#d e f i n e MAX_PROCESSES 999999
/∗ Brute f o r c e ∗/
s t r c p y ( buf , "/ proc /");
r e t p s = r e t d i r = 0;
f o r ( i = FIRST_PROCESS ; i <= MAX_PROCESSES; i++)
. . .
j = r e a d l i n k ("./ cwd" , path , s i z e o f ( path ) ) ;
. . .
Как нашелся?
unhide:
// PID under 301 are r e s e r v e d f o r k e r n e l
f o r ( x=0; x < 301; x++)
{
a l l p i d s [ x ] = 0 ;
a l l p i d s 2 [ x ] = 0 ;
}
f o r ( z =301; z < maxpid ; z++)
{
a l l p i d s [ z ] = z ;
a l l p i d s 2 [ z ] = z ;
}
f o r ( i =301; i < maxpid ; i++)
. . . .
Как нашелся?
unhide:
void get_max_pid ( i n t ∗ newmaxpid )
{
char path []= "/ proc / sys / k e r n e l /pid_max ";
pid_t tmppid = 0;
FILE∗ fd= fopen ( path ," r " ) ;
i f ( ! fd )
{
warnln (1 , unlog , "Cannot read c u r r e n t maximum
r e t u r n ;
}
Значит, что все-таки есть
эффективные антируткиты
под Linux?
Значит, что все-таки есть
эффективные антируткиты
под Linux?
Нет.
My Little Fix
/∗
∗ A maximum of 4 m i l l i o n PIDs should be
∗ enough f o r a while .
∗ [NOTE: PID/TIDs are l i m i t e d to
∗ 2^29 ~= 500+ m i l l i o n , see f u t e x . h . ]
∗/
#d e f i n e PID_MAX_LIMIT 
(CONFIG_BASE_SMALL ? PAGE_SIZE ∗ 8 : 
( s i z e o f ( long ) > 4 ? 4 ∗ 1024 ∗ 1024
: PID_MAX_DEFAULT))
My Little Fix
Перед стартом процесса pid_max устанавливается в
PID_MAX_LIMIT-N
Запуск процесса
Снижение pid_max до прошлого значения
My Little Fix
# ps aux
. . .
# dmesg
[14365.243616] pshidko . f a k e _ f i l l d i r : Start process
[14965.325102] pshidko . f a k e _ f i l l d i r : Hiding pid : 412
# rkhunter
Checking f o r hidden f i l e s and d i r e c t o r i e s
[ None found ]
Rootkit checks . . .
Rootkits checked : 299
P o s s i b l e r o o t k i t s : 0
# c h k r o o t k i t
// None found
# unhide
// None found
kjackal
Особенности:
Небольшой (≈ 700 строк)
Мертвый (разработка остановлена в 2013)
kjackal
$ make | tail -n 4
make[2]: *** [scripts/Makefile.build:294: kjackal/src/module.o]
Ошибка 1
make[1]: *** [Makefile:1490: _module_/kjackal] Ошибка 2
make[1]: выход из каталога «/usr/src/linux»
make: *** [Makefile:26: default] Ошибка 2
Houston, we have a problem.
Houston, we have a problem.
Эффективных антируткитов
нет :(
Что дальше?
Что дальше?
Programming, Motherfucker.
Programming, Motherfucker
Kernel-level
Programming, Motherfucker
Kernel-level
Только общие методы (проверить наличие /proc/enyo и
chkrootkit может)
Обнаружение: Встраивание в планировщик процессов
Обнаружение: Встраивание в планировщик процессов
Основные причины вызова schedule():
Регулярное обновление текущей задачи с помощью
scheduler_tick()
Обнаружение: Встраивание в планировщик процессов
Основные причины вызова schedule():
Регулярное обновление текущей задачи с помощью
scheduler_tick()
Задача приостанавливается
Обнаружение: Встраивание в планировщик процессов
Основные причины вызова schedule():
Регулярное обновление текущей задачи с помощью
scheduler_tick()
Задача приостанавливается
Задача возобновляет выполнение (→ try_to_wake_up())
Обнаружение: Встраивание в планировщик процессов
try_to_wake_up():
Помещает задачу в очередь выполнения задач
Обнаружение: Встраивание в планировщик процессов
try_to_wake_up():
Помещает задачу в очередь выполнения задач
Изменяет состояние задачи на “TASK_RUNNING”
Обнаружение: Встраивание в планировщик процессов
try_to_wake_up():
Помещает задачу в очередь выполнения задач
Изменяет состояние задачи на “TASK_RUNNING”
Если пробуждаемая задача имеет приоритет выше
текущей задачи, то производит вызов планировщика с
целью перепланирования задач
Обнаружение: Встраивание в планировщик процессов
i n t hook_try_to_wake_up ( s t r u c t task_struct ∗p ,
unsigned i n t state ,
i n t wake_flags )
{
p r i n t k ("p−>pid : %d , p−>comm: %s n" , p−>pid ,
r e t u r n origin_try_to_wake_up (
p , state , wake_flags ) ;
}
Обнаружение: Встраивание в планировщик процессов
dmesg:
[ 9 4 . 5 6 8 ] p−>pid : 1749 , p−>comm: r s y s l o g d
[ 9 4 . 5 6 9 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg
[ 9 4 . 5 7 2 ] p−>pid : 1749 , p−>comm: r s y s l o g d
[ 9 4 . 5 7 3 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg
[ 9 4 . 5 7 6 ] p−>pid : 1749 , p−>comm: r s y s l o g d
[ 9 4 . 5 7 7 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg
[ 9 4 . 5 8 0 ] p−>pid : 1749 , p−>comm: r s y s l o g d
[ 9 4 . 5 8 1 ] p−>pid : 1935 , p−>comm: hiddenprocess
[ 9 4 . 6 0 5 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg
Двигаться дальше
Проверка согласованности структур данных ядра
Самозащита со стороны антируткита
Поддержка других реализаций планировщика ядра
Вопросы?
Спасибо за внимание!
Клементьев Михаил
<gofuckyourself@riseup.net>
/* github.com/jollheef */

[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux

  • 1.
    Обнаружение руткитов вGNU/Linux Клементьев Михаил DCG #7812 10 марта 2017 г.
  • 2.
    $ whoami Linux KernelSecurity Developer
  • 3.
    $ whoami Linux KernelSecurity Developer Security researcher at
  • 4.
    $ whoami Linux KernelSecurity Developer Security researcher at Hardened Gentoo lover
  • 5.
    $ whoami Linux KernelSecurity Developer Security researcher at Hardened Gentoo lover Associate member of
  • 6.
    $ agenda Что естьруткит (scope)
  • 7.
    $ agenda Что естьруткит (scope) Как снизить вероятность заражения
  • 8.
    $ agenda Что естьруткит (scope) Как снизить вероятность заражения Как избавиться от того, что уже внутри? (inb4: сжечь)
  • 9.
    $ agenda Что естьруткит (scope) Как снизить вероятность заражения Как избавиться от того, что уже внутри? (inb4: сжечь) Паника
  • 10.
    $ agenda Что естьруткит (scope) Как снизить вероятность заражения Как избавиться от того, что уже внутри? (inb4: сжечь) Паника Паранойя
  • 11.
    $ agenda Что естьруткит (scope) Как снизить вероятность заражения Как избавиться от того, что уже внутри? (inb4: сжечь) Паника Паранойя Скорбь
  • 12.
    $ agenda Что естьруткит (scope) Как снизить вероятность заражения Как избавиться от того, что уже внутри? (inb4: сжечь) Паника Паранойя Скорбь О проекте по обнаружению руткитов
  • 13.
    Who is Mr.Rootkitsky?
  • 14.
    Who is Mr.Rootkitsky?
  • 15.
  • 16.
    Linux Kernel VulnerabilitiesBy Year (1999-2017)
  • 17.
    Linux Kernel VulnerabilitiesBy Type (1999-2017)
  • 18.
  • 19.
    Как не словить? Использованиеэлектронной подписи для модулей ядра
  • 20.
    Как не словить? Использованиеэлектронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора
  • 21.
    Как не словить? Использованиеэлектронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора Знание о том, что происходит на вашей системе (что должно быть, а чего не должно быть)
  • 22.
    Как не словить? Использованиеэлектронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора Знание о том, что происходит на вашей системе (что должно быть, а чего не должно быть) Разграничение полномочий
  • 23.
    Как не словить? Использованиеэлектронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора Знание о том, что происходит на вашей системе (что должно быть, а чего не должно быть) Разграничение полномочий Обновление!
  • 24.
    И что, этопоможет?
  • 26.
    И что, этопоможет? Нет.
  • 27.
  • 28.
  • 29.
  • 30.
    Чем могут заниматься? Подменасистемных файлов Изменение логов
  • 31.
    Чем могут заниматься? Подменасистемных файлов Изменение логов Изменение исполняемых файлов при старте
  • 32.
    Чем могут заниматься? Подменасистемных файлов Изменение логов Изменение исполняемых файлов при старте Скрытие процессов
  • 33.
    Чем могут заниматься? Подменасистемных файлов Изменение логов Изменение исполняемых файлов при старте Скрытие процессов Скрытие сетевых соединений
  • 34.
    Чем могут заниматься? Подменасистемных файлов Изменение логов Изменение исполняемых файлов при старте Скрытие процессов Скрытие сетевых соединений Защита от обнаружения
  • 35.
    Чем могут заниматься? Подменасистемных файлов Изменение логов Изменение исполняемых файлов при старте Скрытие процессов Скрытие сетевых соединений Защита от обнаружения Много всего остального, о чем знают только разработчики
  • 36.
    Open source решения chkrootkit(http://www.chkrootkit.org/ | 30.10.2016)
  • 37.
    Open source решения chkrootkit(http://www.chkrootkit.org/ | 30.10.2016) unhide (http://www.unhide-forensics.info/ | 26.05.2013)
  • 38.
    Open source решения chkrootkit(http://www.chkrootkit.org/ | 30.10.2016) unhide (http://www.unhide-forensics.info/ | 26.05.2013) rkhunter (http://rkhunter.sf.net/ | 24.02.2014)
  • 39.
    Open source решения chkrootkit(http://www.chkrootkit.org/ | 30.10.2016) unhide (http://www.unhide-forensics.info/ | 26.05.2013) rkhunter (http://rkhunter.sf.net/ | 24.02.2014) kjackal (https://github.com/dgoulet/kjackal | 16.06.2014)
  • 40.
    Используемые методы Поиск нарушенийконсистентности предоставляемой ядром информации
  • 41.
    Используемые методы Поиск нарушенийконсистентности предоставляемой ядром информации Сравнение содержимого procfs с выводом команды ps aux
  • 42.
    Используемые методы Поиск нарушенийконсистентности предоставляемой ядром информации Сравнение содержимого procfs с выводом команды ps aux Поиск конкретных файлов известных руткитов
  • 43.
    Используемые методы Поиск нарушенийконсистентности предоставляемой ядром информации Сравнение содержимого procfs с выводом команды ps aux Поиск конкретных файлов известных руткитов Проверка целостности (e.g. с помощью rpm)
  • 44.
    Используемые методы Поиск нарушенийконсистентности предоставляемой ядром информации Сравнение содержимого procfs с выводом команды ps aux Поиск конкретных файлов известных руткитов Проверка целостности (e.g. с помощью rpm) Перебор идентификаторов процесса
  • 45.
    На чем быпроверить?
  • 46.
    На чем быпроверить?
  • 47.
    первый попавшийся rootkitс github vs chrootkit Hook таблицы системных вызовов и скрытие себя # make && insmod open−h i j a c k . c # dmesg [ 1 9 0 . 0 4 9 ] Simple mod : o r i g f f f f f f f f 8 1 2 0 b 9 4 0 new addr # c h k r o o t k i t −q ens3 : PACKET SNIFFER(/ sbin / d h c l i e n t [ 1 5 5 7 ] ) # rkhunter −c −q p e r l : warning : Please check that your l o c a l e s e t t i n g LANGUAGE = ( unset ) , LC_ALL = ( unset ) , LC_CTYPE = "ru_RU . utf8 " , LANG = "ru_RU . utf8 " are supported and i n s t a l l e d on your system . p e r l : warning : F a l l i n g back to the standard l o c a l e (
  • 48.
    Может быть онслишком простой?
  • 49.
    github.com/NoviceLive/research-rootkit [ 5879.008563] pshidko. init_module : Greetings the World ! [ 5879.009880] pshidko . init_module : Opening the path : / proc . [ 5879.011110] pshidko . init_module : Succeeded in opening : / proc [ 5879.012376] pshidko . init_module : Changing file_op −>i t e r a t e from f f f f f f f f 8 1 2 7 a 0 0 0 to f f f f f f f f c 0 0 3 c 0 0 0 .
  • 50.
    github.com/NoviceLive/research-rootkit # ps aux .. . # dmesg [ 6225.613397] pshidko . f a k e _ f i l l d i r : Hiding pid : 1 # rkhunter Checking f o r hidden f i l e s and d i r e c t o r i e s [ None found ] Rootkit checks . . . Rootkits checked : 299 P o s s i b l e r o o t k i t s : 0 # c h k r o o t k i t Checking ‘ lkm ’ . . . You have 1 process hidden f o r r e a d d i r command # unhide quick Found HIDDEN PID : 1 Command : " i n i t [ 2 ] "
  • 51.
    Как нашелся? chkrootkit: #d ef i n e MAX_PROCESSES 999999 /∗ Brute f o r c e ∗/ s t r c p y ( buf , "/ proc /"); r e t p s = r e t d i r = 0; f o r ( i = FIRST_PROCESS ; i <= MAX_PROCESSES; i++) . . . j = r e a d l i n k ("./ cwd" , path , s i z e o f ( path ) ) ; . . .
  • 52.
    Как нашелся? unhide: // PIDunder 301 are r e s e r v e d f o r k e r n e l f o r ( x=0; x < 301; x++) { a l l p i d s [ x ] = 0 ; a l l p i d s 2 [ x ] = 0 ; } f o r ( z =301; z < maxpid ; z++) { a l l p i d s [ z ] = z ; a l l p i d s 2 [ z ] = z ; } f o r ( i =301; i < maxpid ; i++) . . . .
  • 53.
    Как нашелся? unhide: void get_max_pid( i n t ∗ newmaxpid ) { char path []= "/ proc / sys / k e r n e l /pid_max "; pid_t tmppid = 0; FILE∗ fd= fopen ( path ," r " ) ; i f ( ! fd ) { warnln (1 , unlog , "Cannot read c u r r e n t maximum r e t u r n ; }
  • 54.
    Значит, что все-такиесть эффективные антируткиты под Linux?
  • 55.
    Значит, что все-такиесть эффективные антируткиты под Linux? Нет.
  • 56.
    My Little Fix /∗ ∗A maximum of 4 m i l l i o n PIDs should be ∗ enough f o r a while . ∗ [NOTE: PID/TIDs are l i m i t e d to ∗ 2^29 ~= 500+ m i l l i o n , see f u t e x . h . ] ∗/ #d e f i n e PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE ∗ 8 : ( s i z e o f ( long ) > 4 ? 4 ∗ 1024 ∗ 1024 : PID_MAX_DEFAULT))
  • 57.
    My Little Fix Передстартом процесса pid_max устанавливается в PID_MAX_LIMIT-N Запуск процесса Снижение pid_max до прошлого значения
  • 58.
    My Little Fix #ps aux . . . # dmesg [14365.243616] pshidko . f a k e _ f i l l d i r : Start process [14965.325102] pshidko . f a k e _ f i l l d i r : Hiding pid : 412 # rkhunter Checking f o r hidden f i l e s and d i r e c t o r i e s [ None found ] Rootkit checks . . . Rootkits checked : 299 P o s s i b l e r o o t k i t s : 0 # c h k r o o t k i t // None found # unhide // None found
  • 59.
    kjackal Особенности: Небольшой (≈ 700строк) Мертвый (разработка остановлена в 2013)
  • 60.
    kjackal $ make |tail -n 4 make[2]: *** [scripts/Makefile.build:294: kjackal/src/module.o] Ошибка 1 make[1]: *** [Makefile:1490: _module_/kjackal] Ошибка 2 make[1]: выход из каталога «/usr/src/linux» make: *** [Makefile:26: default] Ошибка 2
  • 61.
    Houston, we havea problem.
  • 62.
    Houston, we havea problem. Эффективных антируткитов нет :(
  • 63.
  • 64.
  • 65.
  • 66.
    Programming, Motherfucker Kernel-level Только общиеметоды (проверить наличие /proc/enyo и chkrootkit может)
  • 67.
    Обнаружение: Встраивание впланировщик процессов
  • 68.
    Обнаружение: Встраивание впланировщик процессов Основные причины вызова schedule(): Регулярное обновление текущей задачи с помощью scheduler_tick()
  • 69.
    Обнаружение: Встраивание впланировщик процессов Основные причины вызова schedule(): Регулярное обновление текущей задачи с помощью scheduler_tick() Задача приостанавливается
  • 70.
    Обнаружение: Встраивание впланировщик процессов Основные причины вызова schedule(): Регулярное обновление текущей задачи с помощью scheduler_tick() Задача приостанавливается Задача возобновляет выполнение (→ try_to_wake_up())
  • 71.
    Обнаружение: Встраивание впланировщик процессов try_to_wake_up(): Помещает задачу в очередь выполнения задач
  • 72.
    Обнаружение: Встраивание впланировщик процессов try_to_wake_up(): Помещает задачу в очередь выполнения задач Изменяет состояние задачи на “TASK_RUNNING”
  • 73.
    Обнаружение: Встраивание впланировщик процессов try_to_wake_up(): Помещает задачу в очередь выполнения задач Изменяет состояние задачи на “TASK_RUNNING” Если пробуждаемая задача имеет приоритет выше текущей задачи, то производит вызов планировщика с целью перепланирования задач
  • 74.
    Обнаружение: Встраивание впланировщик процессов i n t hook_try_to_wake_up ( s t r u c t task_struct ∗p , unsigned i n t state , i n t wake_flags ) { p r i n t k ("p−>pid : %d , p−>comm: %s n" , p−>pid , r e t u r n origin_try_to_wake_up ( p , state , wake_flags ) ; }
  • 75.
    Обнаружение: Встраивание впланировщик процессов dmesg: [ 9 4 . 5 6 8 ] p−>pid : 1749 , p−>comm: r s y s l o g d [ 9 4 . 5 6 9 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg [ 9 4 . 5 7 2 ] p−>pid : 1749 , p−>comm: r s y s l o g d [ 9 4 . 5 7 3 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg [ 9 4 . 5 7 6 ] p−>pid : 1749 , p−>comm: r s y s l o g d [ 9 4 . 5 7 7 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg [ 9 4 . 5 8 0 ] p−>pid : 1749 , p−>comm: r s y s l o g d [ 9 4 . 5 8 1 ] p−>pid : 1935 , p−>comm: hiddenprocess [ 9 4 . 6 0 5 ] p−>pid : 1747 , p−>comm: r s : main Q: Reg
  • 76.
    Двигаться дальше Проверка согласованностиструктур данных ядра Самозащита со стороны антируткита Поддержка других реализаций планировщика ядра
  • 77.
  • 78.
    Спасибо за внимание! КлементьевМихаил <gofuckyourself@riseup.net> /* github.com/jollheef */