È»¶ø£¬ÔÚÄ³Ð©ÌØ¶¨³¡¾°Ï£¬³öÓÚÐÔÄÜÓÅ»¯¡¢¼æÈÝÐÔ¿¼ÂÇ»òµ÷ÊÔÐèÇó£¬ÎÒÃÇ¿ÉÄÜÐèÒª½ûÓÃASLR
±¾ÎĽ«´ÓASLRµÄ»ù±¾ÔÀí³ö·¢£¬Ì½ÌÖÔÚLinuxϵͳÖнûÓÃASLRµÄDZÔÚÓ°Ï졢ʵʩ·½·¨ÒÔ¼°ÃæÁÙµÄȨºâ£¬Ö¼ÔÚΪ¶ÁÕßÌṩһ¸öÈ«Ãæ¶øÉîÈëµÄÀí½â
Ò»¡¢ASLRµÄ»ù±¾ÔÀíÓëÖØÒªÐÔ ASLRµÄºËÐÄ˼ÏëÊÇͨ¹ýÔÚ³ÌÐòÆô¶¯Ê±Ëæ»ú»¯Æä´úÂë¶Î¡¢Êý¾Ý¶Î¡¢¶ÑºÍÕ»µÄÄÚ´æµØÖ·£¬Ê¹µÃÿ´ÎÖ´ÐÐʱÕâÐ©ÇøÓòµÄµØÖ·¶¼²»Í¬
ÕâÑùÒ»À´£¬¼´Ê¹¹¥»÷Õß·¢ÏÖÁËij¸öÄÚ´æÂ©¶´£¬È绺³åÇøÒç³ö£¬ËûÃÇÒ²ºÜÄÑ׼ȷԤ²âÄ¿±ê³ÌÐòµÄÄÚ´æ²¼¾Ö£¬´Ó¶øÄÑÒÔ¹¹ÔìÓÐЧµÄ¹¥»÷ÔØºÉ
ASLRÏÔÖøÌá¸ßÁËÀûÓÃÕâЩ©¶´µÄÄѶȣ¬ÊÇÏÖ´ú²Ù×÷ϵͳ°²È«²ßÂÔµÄÖØÒª×é³É²¿·Ö
¶þ¡¢ASLRµÄ¾ÖÏÞÐÔ ¾¡¹ÜASLR¼«´óµØÔöÇ¿ÁËϵͳµÄ°²È«ÐÔ£¬µ«Ëü²¢·ÇÍòÎÞһʧ
Ê×ÏÈ£¬Ëæ×Ź¥»÷¼¼ÊõµÄ·¢Õ¹£¬ÈçROP£¨Return-Oriented Programming£©ºÍJOP£¨Jump-Oriented Programming£©µÈ¸ß¼¶ÀûÓü¼ÇɵijöÏÖ£¬¹¥»÷Õß¿ªÊ¼Ñ°ÕÒ²¢ÀûÓóÌÐòÖеÄСƬ¶Î´úÂ루³ÆÎª¡°gadget¡±£©À´¹¹½¨¹¥»÷ÔØºÉ£¬´Ó¶øÈƹýASLRµÄÏÞÖÆ
Æä´Î£¬ASLRµÄËæ»úÐÔÒÀÀµÓÚÏµÍ³ìØ³ØµÄ´óСºÍ¸üÐÂÆµÂÊ£¬µÍìØ»·¾³Ï¿ÉÄܵ¼ÖÂËæ»úÐÔ²»×㣬ʹµÃµØÖ·Ô¤²â³ÉΪ¿ÉÄÜ
×îºó£¬ASLR¶ÔÓÚ¾²Ì¬Á´½ÓµÄ¿âÎļþºÍÒ»Ð©ÌØ¶¨ÀàÐ͵Ä©¶´£¨Èç¸ñʽ×Ö·û´®Â©¶´£©µÄ·À»¤Ð§¹ûÓÐÏÞ
Èý¡¢LinuxϽûÓÃASLRµÄÐèÇóÓ볡¾° ¾¡¹ÜASLR¶ÔÌáÉýϵͳ°²È«ÐÔÖÁ¹ØÖØÒª£¬µ«ÔÚÄ³Ð©ÌØ¶¨Çé¿öÏ£¬ÎÒÃÇ¿ÉÄÜÐèÒªÔÝʱ½ûÓÃËü£º 1.ÐÔÄÜÓÅ»¯£ºÔÚijЩ¸ßÐÔÄܼÆËã»·¾³ÖУ¬ASLRÒýÈëµÄÄÚ´æËæ»ú»¯¿ÉÄܵ¼Ö¶îÍâµÄÄÚ´æ·ÃÎÊÑÓ³Ù£¬Ó°Ïì³ÌÐòÖ´ÐÐЧÂÊ
¶ÔÓÚÕâÀà¶ÔÐÔÄܼ«ÎªÃô¸ÐµÄÓ¦Ó㬽ûÓÃASLR¿ÉÄÜÊÇÒ»¸öºÏÀíµÄÑ¡Ôñ
2.¼æÈÝÐÔ¿¼ÂÇ£º²¿·ÖÀϾÉÈí¼þ»òÌØ¶¨Ó²¼þÇý¶¯¿ÉÄܲ»¼æÈÝASLR£¬µ¼ÖÂϵͳ²»Îȶ¨»ò¹¦ÄÜÒì³£
ÔÚÕâЩÇé¿öÏ£¬½ûÓÃASLRÒÔÈ·±£ÏµÍ³Õý³£ÔËÐÐÊDZØÒªµÄ
3.µ÷ÊÔÓë²âÊÔ£ºÔÚÈí¼þ¿ª·¢ºÍµ÷ÊԽ׶Σ¬¿ª·¢Õß¿ÉÄÜÐèÒªÖØÏÖÌØ¶¨µÄÄÚ´æ²¼¾ÖÒÔ¶¨Î»ºÍÐÞ¸´Â©¶´
½ûÓÃASLR¿ÉÒÔ°ïÖú¿ª·¢Õ߸ü¾«È·µØ¿ØÖƳÌÐòµÄÄÚ´æ²¼¾Ö£¬Ìá¸ßµ÷ÊÔЧÂÊ
ËÄ¡¢LinuxϽûÓÃASLRµÄ·½·¨ ÔÚLinuxϵͳÖУ¬½ûÓÃASLRͨ³£Éæ¼°ÐÞ¸ÄϵͳÅäÖûò±àÒëÑ¡Ïî
ÒÔÏÂÊÇһЩ³£Óõķ½·¨£º 1.Äں˲ÎÊýµ÷Õû£ºLinuxÄÚºËÌṩÁËÒ»¸öÃûΪ`kernel.randomize_va_space`µÄ²ÎÊý£¬ÓÃÓÚ¿ØÖÆASLRµÄÆôÓÃ״̬
ͨ¹ýÉèÖøòÎÊýΪ0£¬¿ÉÒÔÈ«¾Ö½ûÓÃASLR
Õâ¿ÉÒÔͨ¹ý±à¼`/etc/sysctl.conf`Îļþ²¢Ìí¼Ó`vm.randomize_va_space = 0`À´ÊµÏÖ£¬È»ºóÖ´ÐÐ`sysctl -p`ʹ¸ü¸ÄÉúЧ
2.±àÒëÆ÷Ñ¡ÏÔÚ±àÒë³ÌÐòʱ£¬¿ÉÒÔͨ¹ýÌØ¶¨µÄ±àÒëÆ÷Ñ¡ÏîÀ´½ûÓÃASLR
ÀýÈ磬¶ÔÓÚGCC±àÒëÆ÷£¬¿ÉÒÔʹÓÃ`-fno-pie`£¨Position Independent Executable£©ºÍ`-Wl,-z,norelro`£¨No RELocation Read-Only£©Ñ¡ÏîÀ´Éú³É²»ÒÀÀµÓÚµØÖ·¿Õ¼äËæ»ú»¯µÄ¿ÉÖ´ÐÐÎļþ
3.¶¯Ì¬Á´½ÓÆ÷ÅäÖ㺶ÔÓÚʹÓö¯Ì¬Á´½ÓµÄ³ÌÐò£¬¿ÉÒÔͨ¹ýÉèÖÃ`LD_LIBRARY_PATH`»·¾³±äÁ¿ºÍÐÞ¸Ä`/etc/ld.so.preload`ÎļþÀ´Ó°Ï춯̬Á´½ÓÆ÷µÄÐÐΪ£¬¼ä½ÓÓ°ÏìASLRµÄÆôÓÃ״̬
È»¶ø£¬ÕâÖÖ·½·¨Í¨³£²»ÈçÖ±½ÓÐÞ¸ÄÄں˲ÎÊý»ò±àÒëÆ÷Ñ¡ÏîÖ±½ÓÓÐЧ
Îå¡¢½ûÓÃASLRµÄDZÔÚ·çÏÕÓëȨºâ ½ûÓÃASLRÎÞÒÉ»áÏ÷ÈõϵͳµÄ°²È«·À»¤ÄÜÁ¦£¬Ê¹µÃÀûÓÃÄÚ´æÂ©¶´±äµÃ¸ü¼ÓÈÝÒ×
Òò´Ë£¬ÔÚ×ö³öÕâÒ»¾ö¶¨Ö®Ç°£¬±ØÐë³ä·ÖÆÀ¹ÀDZÔڵݲȫ·çÏÕ£¬²¢²ÉÈ¡ÆäËû°²È«´ëÊ©½øÐв¹³¥
1.¼ÓÇ¿´úÂëÉó¼ÆÓë©¶´ÐÞ¸´£º½ûÓÃASLRºó£¬Ó¦¼Ó´ó¶Ô´úÂëµÄ°²È«Éó¼ÆÁ¦¶È£¬¼°Ê±·¢ÏÖ²¢ÐÞ¸´Ç±ÔÚµÄÄÚ´æÂ©¶´£¬¼õÉÙ±»¹¥»÷µÄ»ú»á
2.ʵʩÆäËû°²È«»úÖÆ£º½áºÏʹÓÃÆäËû°²È«»úÖÆ£¬ÈçÕ»±£»¤£¨Stack Canaries£©¡¢¶Ñ±£»¤£¨Heap Protection£©¡¢Êý¾ÝÖ´Ðб£»¤£¨DEP/NX£©µÈ£¬ÒÔÔöǿϵͳµÄÕûÌ尲ȫÐÔ
3.ÏÞÖÆ·ÃÎÊȨÏÞ£ºÍ¨¹ýÑϸñµÄȨÏÞ¿ØÖÆ£¬ÏÞÖÆ¶Ô¹Ø¼üϵͳºÍÓ¦ÓõķÃÎÊ£¬¼õÉÙDZÔÚ¹¥»÷Ãæ
4.³ÖÐø¼à¿ØÓëÏìÓ¦£º½¨Á¢ÓÐЧµÄ°²È«¼à¿ØÌåϵ£¬¼°Ê±·¢ÏÖ²¢ÏìÓ¦°²È«Ê¼þ£¬¼õÉÙËðʧ
Áù¡¢½áÂÛ ASLR×÷ΪһÏîÖØÒªµÄ°²È«»úÖÆ£¬ÔÚÌáÉýϵͳ°²È«ÐÔ·½Ãæ·¢»ÓÁËÖØÒª×÷ÓÃ
È»¶ø£¬ÔÚÌØ¶¨³¡¾°Ï£¬³öÓÚÐÔÄÜÓÅ»¯¡¢¼æÈÝÐÔ¿¼ÂÇ»òµ÷ÊÔÐèÇó£¬ÎÒÃÇ¿ÉÄÜÐèÒª½ûÓÃASLR
ÔÚ×ö³öÕâÒ»¾ö¶¨Ê±£¬±ØÐë³ä·ÖȨºâ°²È«·çÏÕÓëÊÕÒæ£¬²¢²ÉÈ¡ÆäËû°²È«´ëÊ©½øÐв¹³¥
ͨ¹ý¼ÓÇ¿´úÂëÉ󼯡¢ÊµÊ©ÆäËû°²È«»úÖÆ¡¢ÏÞÖÆ·ÃÎÊȨÏÞÒÔ¼°³ÖÐø¼à¿ØÓëÏìÓ¦£¬ÎÒÃÇ¿ÉÒÔÔÚÒ»¶¨³Ì¶ÈÉϼõÇá½ûÓÃASLR´øÀ´µÄ°²È«·çÏÕ£¬È·±£ÏµÍ³µÄÎȶ¨ÔËÐÐ
×ÜÖ®£¬°²È«ÓëÐÔÄÜÖ®¼äµÄƽºâÊÇÒ»¸ö³ÖÐøµÄ¹ý³Ì£¬ÐèÒªÎÒÃÇÔÚʵ¼ùÖв»¶Ï̽Ë÷ºÍµ÷Õû