SlideShare a Scribd company logo
1 of 78
Download to read offline
Обнаружение руткитов в 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 */

More Related Content

What's hot

SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
Anthony Shoumikhin
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
Anthony Shoumikhin
 

What's hot (20)

SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Григорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизацияГригорий Демченко, Асинхронность и неблокирующая синхронизация
Григорий Демченко, Асинхронность и неблокирующая синхронизация
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
 
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
Филипп Торчинский «Анализ производительности и отладка приложений с помощью D...
 
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
ПВТ - осень 2014 - Лекция 4 - Стандарт POSIX Threads. Реентерабельность. Сигн...
 
JSQuest d:)
JSQuest   d:)JSQuest   d:)
JSQuest d:)
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free maps
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
ПВТ - весна 2015 - Лекция 3. Реентерабельность. Сигналы. Локальные данные пот...
 
Программирование Linux
Программирование LinuxПрограммирование Linux
Программирование Linux
 
SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z
SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до ZSECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z
SECON'2016. Кочков Антон, Рютин Борис, Radare2 - от A до Z
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++.   Р...
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...
 
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 

Viewers also liked

[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC [DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
DefconRussia
 
Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23
DefconRussia
 
New Threats, New Approaches in Modern Data Centers
New Threats, New Approaches in Modern Data CentersNew Threats, New Approaches in Modern Data Centers
New Threats, New Approaches in Modern Data Centers
Iben Rodriguez
 

Viewers also liked (20)

[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...[Defcon Russia #29] Борис Савков -  Bare-metal programming на примере Raspber...
[Defcon Russia #29] Борис Савков - Bare-metal programming на примере Raspber...
 
[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobinding[Defcon Russia #29] Алексей Тюрин - Spring autobinding
[Defcon Russia #29] Алексей Тюрин - Spring autobinding
 
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
[Defcon Russia #29] Александр Ермолов - Safeguarding rootkits: Intel Boot Gua...
 
Георгий Зайцев - Reversing golang
Георгий Зайцев - Reversing golangГеоргий Зайцев - Reversing golang
Георгий Зайцев - Reversing golang
 
Cisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-oneCisco IOS shellcode: All-in-one
Cisco IOS shellcode: All-in-one
 
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC [DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
[DCG 25] Александр Большев - Never Trust Your Inputs or How To Fool an ADC
 
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
Олег Купреев - Обзор и демонстрация нюансов и трюков из области беспроводных ...
 
Weakpass - defcon russia 23
Weakpass - defcon russia 23Weakpass - defcon russia 23
Weakpass - defcon russia 23
 
Attacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей ТюринAttacks on tacacs - Алексей Тюрин
Attacks on tacacs - Алексей Тюрин
 
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
Andrey Belenko, Alexey Troshichev - Внутреннее устройство и безопасность iClo...
 
nosymbols - defcon russia 20
nosymbols - defcon russia 20nosymbols - defcon russia 20
nosymbols - defcon russia 20
 
Vm ware fuzzing - defcon russia 20
Vm ware fuzzing  - defcon russia 20Vm ware fuzzing  - defcon russia 20
Vm ware fuzzing - defcon russia 20
 
Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23Advanced cfg bypass on adobe flash player 18 defcon russia 23
Advanced cfg bypass on adobe flash player 18 defcon russia 23
 
Zn task - defcon russia 20
Zn task  - defcon russia 20Zn task  - defcon russia 20
Zn task - defcon russia 20
 
HTTP HOST header attacks
HTTP HOST header attacksHTTP HOST header attacks
HTTP HOST header attacks
 
Automating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShellAutomating Post Exploitation with PowerShell
Automating Post Exploitation with PowerShell
 
Managing Indicator Deprecation in ThreatConnect
Managing Indicator Deprecation in ThreatConnectManaging Indicator Deprecation in ThreatConnect
Managing Indicator Deprecation in ThreatConnect
 
New Threats, New Approaches in Modern Data Centers
New Threats, New Approaches in Modern Data CentersNew Threats, New Approaches in Modern Data Centers
New Threats, New Approaches in Modern Data Centers
 
Troubleshooting Java HotSpot VM
Troubleshooting Java HotSpot VMTroubleshooting Java HotSpot VM
Troubleshooting Java HotSpot VM
 
In-Memory Distributed Computing - Porto Tech Hub
In-Memory Distributed Computing - Porto Tech HubIn-Memory Distributed Computing - Porto Tech Hub
In-Memory Distributed Computing - Porto Tech Hub
 

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

Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
Technopark
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
MIPT Course - DAC and MAC
MIPT Course - DAC and MACMIPT Course - DAC and MAC
MIPT Course - DAC and MAC
Alexey Vasyukov
 
Владимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОСВладимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОС
Yandex
 

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

Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Easy selenium test automation on python
Easy selenium test automation on pythonEasy selenium test automation on python
Easy selenium test automation on python
 
SymfonyConf IV.2016 - Реанимация проектов на Symfony
SymfonyConf IV.2016 - Реанимация проектов на SymfonySymfonyConf IV.2016 - Реанимация проектов на Symfony
SymfonyConf IV.2016 - Реанимация проектов на Symfony
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
 
Проникновение в Docker с примерами
Проникновение в Docker с примерамиПроникновение в Docker с примерами
Проникновение в Docker с примерами
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
 
Gen server
Gen serverGen server
Gen server
 
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
Олег Миколайченко "Как перестать хранить секреты в git и начать использовать ...
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
QA Fest 2018. Святослав Логин. Что такое Metasploit? Как его использовать для...
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3.
 
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшнаCI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
CI/CD-приложений на Tarantool: от пустого репозитория — до продакшна
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
MIPT Course - DAC and MAC
MIPT Course - DAC and MACMIPT Course - DAC and MAC
MIPT Course - DAC and MAC
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
 
Владимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОСВладимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОС
 

More from DefconRussia

Roman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 ScaryRoman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 Scary
DefconRussia
 
Roman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 PracticeRoman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 Practice
DefconRussia
 
Roman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 TheoryRoman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 Theory
DefconRussia
 
Peter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzzPeter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzz
DefconRussia
 
Vadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitationVadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitation
DefconRussia
 
Tomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNSTomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNS
DefconRussia
 

More from DefconRussia (12)

Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условияхSergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
Sergey Belov - Покажите нам Impact! Доказываем угрозу в сложных условиях
 
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
George Lagoda - Альтернативное использование вэб сервисов SharePoint со сторо...
 
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
Taras Tatarinov - Применение аппаратных закладок pwnie express на примере реа...
 
Alexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implementAlexey Sintsov- SDLC - try me to implement
Alexey Sintsov- SDLC - try me to implement
 
Anton Alexanenkov - Tor and Botnet C&C
Anton Alexanenkov -  Tor and Botnet C&C Anton Alexanenkov -  Tor and Botnet C&C
Anton Alexanenkov - Tor and Botnet C&C
 
Tyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-HashTyurin Alexey - NTLM. Part 1. Pass-the-Hash
Tyurin Alexey - NTLM. Part 1. Pass-the-Hash
 
Roman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 ScaryRoman Korkikyan - Timing analysis workshop Part 2 Scary
Roman Korkikyan - Timing analysis workshop Part 2 Scary
 
Roman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 PracticeRoman Korkikyan - Timing analysis workshop Part 2 Practice
Roman Korkikyan - Timing analysis workshop Part 2 Practice
 
Roman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 TheoryRoman Korkikyan - Timing analysis workshop Part 1 Theory
Roman Korkikyan - Timing analysis workshop Part 1 Theory
 
Peter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzzPeter Hlavaty - DBIFuzz
Peter Hlavaty - DBIFuzz
 
Vadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitationVadim Bardakov - AVR & MSP exploitation
Vadim Bardakov - AVR & MSP exploitation
 
Tomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNSTomas Hlavacek - IP fragmentation attack on DNS
Tomas Hlavacek - IP fragmentation attack on DNS
 

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

  • 1. Обнаружение руткитов в GNU/Linux Клементьев Михаил DCG #7812 10 марта 2017 г.
  • 2. $ whoami Linux Kernel Security Developer
  • 3. $ whoami Linux Kernel Security Developer Security researcher at
  • 4. $ whoami Linux Kernel Security Developer Security researcher at Hardened Gentoo lover
  • 5. $ whoami Linux Kernel Security 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?
  • 16. Linux Kernel Vulnerabilities By Year (1999-2017)
  • 17. Linux Kernel Vulnerabilities By Type (1999-2017)
  • 19. Как не словить? Использование электронной подписи для модулей ядра
  • 20. Как не словить? Использование электронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора
  • 21. Как не словить? Использование электронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора Знание о том, что происходит на вашей системе (что должно быть, а чего не должно быть)
  • 22. Как не словить? Использование электронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора Знание о том, что происходит на вашей системе (что должно быть, а чего не должно быть) Разграничение полномочий
  • 23. Как не словить? Использование электронной подписи для модулей ядра Обеспечение безопасность рабочего компьютера администратора Знание о том, что происходит на вашей системе (что должно быть, а чего не должно быть) Разграничение полномочий Обновление!
  • 24. И что, это поможет?
  • 25.
  • 26. И что, это поможет? Нет.
  • 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 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 ) ) ; . . .
  • 52. Как нашелся? 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++) . . . .
  • 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 have a problem.
  • 62. Houston, we have a problem. Эффективных антируткитов нет :(
  • 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. Двигаться дальше Проверка согласованности структур данных ядра Самозащита со стороны антируткита Поддержка других реализаций планировщика ядра
  • 78. Спасибо за внимание! Клементьев Михаил <gofuckyourself@riseup.net> /* github.com/jollheef */