����Linux�Ż�
Linux����

����:UNIX�»����������ȷ�����ϵ

����ʱ��:2006-02-16 10:27:26��Դ:��������:��������
��̸������֮ǰ�����ȼ�Ҫ�ع�һ�»���������Ĺ�����ϵ��
ջ�����stack smashing��
����δ������뻺�������ȣ���������Խ�磬����ջ�оֲ������ռ�֮�ϵ�ջ��ָ��%ebp�Լ��������ص�ַretaddr, ����������ִ��retָ��ʱ��retaddr��ջ�е�������Ϊ��һ��ָ��ĵ�ַ����%eip�Ĵ������̶��ı�ԭ�����ִ������ָ�����ǵ�shellcode.
�������malloc/free heap corruption��
����һ���Ǻʹ�ͳ��ջ���һ��,�����볬��malloc()Ԥ�ȷ���Ŀռ��С���ͻḲ�ǵ���οռ�֮���һ�δ洢��������ô洢������һ����Ҫ�ı�������euid����ô�ҾͿ�����������������һ���ǵ��͵�double-free�Ѹ��ܣ����ڴ���ղ����У��ϲ����ڿ��п����²���˫������ʱ����һ��д4�ֽ��ڴ�IJ������������������ڱ�̴���free()һ�������ڵĿ飬���ǾͿ��Ծ���α������飬�Ӷ������κ�������Ҫ��ֵ�������ķ��ص�ַ���⺯����.plt��ַ��
��ʽ���ַ���©����format string vulnerability��
���������ʽ�����û����ƣ������߾Ϳ�������α���ʽ�ܣ�����*printf()ϵ�к��������ԾͿ��Կ�̽��ջ�ռ�����ݣ������������������ͳ�Ļ���������������á�%n������ָ�롢���ص�ַ�ȡ�
����������integer variable overflow��
�������������ķ�Χ�����ŵ����ⴥ����ȫ©��������������������ֱ�����ã�����������α��������ڴ����Ȳ��������Ǿ��п��ܼ�����ø�©����
�����Ĺ����ַ���others��
����ֻ�������ַ�����������һ�ֵ������������ELF�ļ���ʽ�������磺����.plt���������ӱ�����.dtor����������ָ�룩��.got��ȫ��ƫ�Ʊ�����return-to-libc�����ؿ⺯�����ȵķ�ʽ���й�����
����һ�����뱣������
Stackguard
������Ϊ�����������ͨ�������д�������ص�ַ��stackguard�Ǹ�������������������һ����canary��ֵ(һ������)�ŵ����ص�ַ��ǰ�棬�������������ʱ���������canary��ֵ���ı��ˣ���֤����������������ͼ���л�������������������������Ӧ������һ�����־�����Ϣ��syslogd,Ȼ����ֹ���̡���canary��������NULL��0x00���� CR��0x0d���� LF ��0x0a�� �� EOF ��0xff���ĸ��� ��������Ӧ�ÿ�����ֹ�󲿷ֵ��ַ���������ʹ���������Ч��һ�������canary�ڳ���ִ�е�ʱ�򱻲��������Թ����߲���ͨ����������Ķ������ļ��õ���canary��ֵ�����/dev/urandom���ڣ�������ʹ�����ȡ�á����򣬾ʹ�ͨ���Ե�ǰʱ����б���õ����������������ֹ���󲿷ֵ�Ԥ�⹥����ImmunixϵͳΪ����stackguard�����Red Hat Linux,��stackguard���ṩ�ı������Ǿ��԰�ȫ������һЩ�����Ϳ���ͻ�����ƣ��縲��һ������ָ�롢���ܴ��ڵ�exit()��_exit()ϵͳ���õ�ַ��GOT�ȡ�
Stackshield
����StackShieldʹ��������һ�ֲ�ͬ�ļ��������������Ǵ���һ���ر�Ķ�ջ�������溯�����ص�ַ��һ�ݿ����������ܱ����ĺ����Ŀ�ͷ�ͽ�β�ֱ�����һ�δ��룬��ͷ���Ĵ����������������ص�ַ������һ������ı��У�����β���Ĵ������������ص�ַ�ӱ��п����ض�ջ����˺���ִ�����̲���ı䣬��������ȷ���ص����������С����µİ汾���Ѿ�������һЩ�µı�����ʩ��������һ����ַ�ڷ��ı����ڵĺ���ָ��ʱ������ֹ������ִ�С�
����Stackshield�޷�����ֻ����%ebp�ĵ��ֽ������ͬ��������Ҳ����ͨ������������ELF�ṹ���ƹ����ơ�
���������⺯�����ӱ���
Formatguard
����Formatguard�Ǹ�Glibc�IJ�������ѭGPL����ʹ�������CPP��gccԤ������򣩺�ȡ��ԭ�е�*printf()�IJ���ͳ�Ʒ�ʽ������Ƚϴ��ݸ�*printf�IJ����ĸ����͸�ʽ�ܵĸ����������ʽ�ܵĸ�������ʵ�ʲ����ĸ��������ж�Ϊ������Ϊ����syslogd������Ϣ����ֹ���̡��������������Glibc����Ŀ⣬formatguard���޷�������
Libsafe
����Libsafe��һ����̬���ӿ⣬�ڱ�׼��C��֮ǰ�����أ���Ҫ�ӹ���gets()��strcpy()��strcat()��sprintf()���������׷�����ȫ�����C�����������Ϊֻ���stack smashing && format string���͵Ĺ�����Alert7����Ҳд������ƹ�libsafe���������¡�
����ջ����ִ��
Solar designer��s nonexec kernel patch
���������ֿ��Կ�������һ��Linux�ϵ��ں˲������ò�������Ҫ�������ǣ��û�����ջ����ִ��[Non-executable User Stack]����x86 CPU�ϲ�û���ṩҳ��page��ִ�е�bitλ�����Ըò���ͨ����С����ε������ַ���������ݶκʹ���Σ�����ִ�������� 0xC0000000����һ���û���ջ�ռ�IJ���������Ϊ�ǻ��������������Ϊ���漴����һ��ͨ�ñ����쳣����ֹ���̡�������shellcode������buffer�򻷾���������λ�ڶ�ջ�Σ���exploit����ʧЧ����Ȼ�䰲ȫҲ���Ǿ��Եģ�����PLT���ؿ⺯������������ϸ������ͻ�Ƹò����Ĺ����������ò�������һЩ���������ԣ���̬���ӿ�ӳ�䵽��ַ�Ͷˣ�0x00��ʼ�������Ʒ������ӹ�����/tmpĿ¼���ơ�/procĿ¼���ơ�execveϵͳ���üӹ̵ȡ�
Solaris/SPARC nonexec-stack protection
������Solaris/SPARC�¿���ͨ��ȥ����ջ��ִ��Ȩ������ֹ��ջ��ִ�У��������£���/etc/system�м���������䣺
����Set noexec_user_stack = 1
����Set noexec_user_stack_log = 1
������һ����ֹ��ջִ�У��ڶ�����¼���г����ڶ�ջ�����д���Ļ��Reboot֮��Ż���Ч������ֻ��ջ����ִ�еı��������޵ġ�Return-to-libc��fake frame֮��ļ���������ͻ�����ƣ�����ջ����ִ�еı����Ѿ������������˹����Ѷȡ�
�ġ����ݶβ���ִ��
kNoX
����Linux�ں˲��������ܣ����ݶε�ҳ����ִ�У����������ڴ棬��ǿ��execveϵͳ���õ����ƣ����ļ�������0��1��2�����⴦����/procĿ¼�����ƣ�FIFO���ƣ������������ƣ��ò���ֻ֧2.2�ںˡ�
RSX
����Linux�ں�ģ�飬���ݶΣ�stack��heap������ִ�С�
Exec shield
����Exec-shield���ں�̬��ʾ�ĸ���һ��Ӧ�ó����������Ŀ�ִ��ӳ�����������ַ����̬��ά���������ִ�������ַ�����ֵ����Ϊ����ִ���޽硱��ÿ�η��������л���ʱ����Ƚ��̾ͻ������ֵ���´����������д��GDT��exec-shield��̬�ĸ���ÿ��Ӧ�ó�������ÿ����������ʱ���в�ͬ�ġ���ִ���޽硱����Ϊ��ִ���޽�ͨ���Ǹ��ܵ͵������ַ�����Գ���stack����mmap()ӳ��������Լ�malloc()����Ŀռ䶼���ڿ�ִ���޽�֮�ϣ���˶��Dz���ִ�еġ���ȻExec-shield�޷�������ת����16M��ַ�ռ��return-to-libc�Ĺ�����������������ֹ���������shellcode���������ݶεĹ���
�塢��ǿ�Ļ���������������ں�MAC
OpenBSD security feature
����OpenBSD��Hardened Gentoo��Adamantix��SELinux��������Ĭ�ϰ�ȫ�ȼ��dz��ߵIJ���ϵͳ��OpenBSD����������ƣ�©���dz��١�ͬ�������кܶలȫ���ԣ�
����*ʹ��strlcpy()��strlcat()�����滻ԭ�е�Σ�պ���
����*�ڴ汣����W^X��ֻ�����ݶΡ�ҳ������mmap()���ӳ�䡢malloc()���ӳ�䡢atexit()��stdio������
����*��Ȩ����
����*��Ȩ����
����*BSD chroot jail
����*�����ĺܶ�����
��������W^X�в������ݣ�stack��mmap���ӳ�䣬ֻ��GOT/PLT/.ctor/.dtor�ȡ���Ȼ������OpenBSD�޷���ֹ�������͵Ĺ��������Ѿ�����˲��ٹ����ַ���
PaX
����PaX�Ǹ��dz�BT�Ķ����������������ǻ��������������ͷ��������������ÿһ�ֹ�����ʽ��������ϡ�
����*����x86��ʽ�ڴ���������ݶβ���ִ��
����*����ҳʽ�ڴ���������ݶε�ҳ����ִ��
����*�ں�ҳֻ��{
����-Const�ṹֻ��
����-ϵͳ���ñ�ֻ��
����-�ֲ�������������IDT��ֻ��
����-ȫ�ֶ�����������GDT��ֻ��
����-����ҳֻ��
����-�����Բ�����������LKM���ܹ��� }
����*��ȫ�ĵ�ַ�ռ����ӳ��{
����-ÿ��ϵͳ���õ��ں�ջ���ӳ��
����-�û�ջ���ӳ��
����-ELF��ִ��ӳ�����ӳ��
����-Brk()�����heap���ӳ��
����-Mmap()������heap���ӳ��
����-��̬���ӿ����ӳ�� }
����*��������Ѷ�̬���ӿ�ӳ�䵽0x00��ʼ�ĵ͵�ַ����������
��������˳����һ��Phrack58��Nergalд����<>����ƪ�������ᵽ��α��ջ�壨Fakeframe����dl-resolve()����ͻ��PaX���ɱ����ķ������⼫�п���*nixӦ�ò�exploit��������߼��ļ�����Nergal����˼������⣺Stack/Heap/BSS����ִ�С�mmap���ӳ�䣬��Ȼ���ָ߼��ļ�����Ȼ�޷���������ͻ��PaX��������һ��������ȫ��PaX��Linux�ϣ����뷢�����������������û�л���ģ�����
Grsecurity
����Ӳ������ı���
����X86 CPU�ϲ���4GBƽ̹ģʽ�����ݶκʹ���ε����Ե�ַ���ص��ģ�ҳ��ֻҪ�ɶ��Ϳ���ִ�У����������ᵽ������ں˲����Ż�Ѿ��Ļ�����˸��ַ�����ʹ���ݶβ���ִ�С�����Alpha��PPC��PA-RISC��SPARC��SPARC64��AMD64��IA64���ṩ��ҳִ��bitλ��Intel��AMD�����ӵ�ҳִ�б���λ��ΪNX��ȫ������Windows XP SP2��Linux Kernel 2.6��֧��NX����Ȼ����Ӳ������ҳ��������PaX����ǿ����Ӳ�������֧�����ɴ�������������Ͳ���ϵͳ�ļ����ԣ��ܹ�ʹ����������ķ����õ��ռ���
Conclusion
������ȫ������������վ�ڶ������ϣ������ἰ�ı���������������������������ģ���������Ѿ������ܵĽǶ��Ż������ǵ���Ʒ��Ȼ�����Ǹ����ĵ������Ǽ����ԣ�Ҳ����ᷢ������Щ��Ӫ����BOX�ϸ�����������Щ�������ǵģ�����ϣ������һ�ְ�ȫ�Dz��������󣬼��ȶ������У�ʹ����Щ����ı�������������������������������NX�������Լ��������������ķ�չ��Щ���ⶼ��õ������Ҳ���㾭���ῴ�����������������½������ͻ�ƻ�������������ĸ߼�exploit��������ʵ�ܶ�����ֻ�ʺ���Ϊ��ѧ�����߼��������������о��׶Σ���ʵ�ʵĹ����У�ʹ�ø߼���bypass����ͨ����Ҫ����һЩ�����������ǵ����໨������������exploit����ij��Ⱦ��ܴﵽĿ�ģ���ʹ�û��������������ϵͳ�ϣ���������÷dz����ѣ���Щʱ����ʵ���Dz����ܣ���������Զ���޷���ȷ�õ������ELF���ŵ�ַ��ʱ�򣬺ܶ༼���������ֽ��̸����ʹ������PaX�IJ�����+iptables����,�ٽ���ں�MAC,�����ֵõ�shell�����Dz����ܵģ���ϧżûǮ����Ȼ�ø�Linux box�ŵ�Internet�Ϲ��⣬��ţ���Ǿ��˵����棬��~�ڻ����������δ��Ϊ��ʷ�Ľ��죬�����廳һ�°ɣ��⵱ȻҲ����ʲô���۵��۵����ɼ�����������Ȼ�������¼����ĵ��������û����Evil Hacking���ǻ����ڵ���ǰ��ʲô�أ�
��������

���� 0 ������