SlideShare a Scribd company logo
1 of 40
Download to read offline
‫ﺑﺮرﺳﯽ روﺷﻬﺎي ﺟﻠﻮﮔﯿﺮي از‬
‫ﮐﺎرﮐﺮد اﮐﺴﭙﻠﻮﯾﺖ ﻫﺎ در ﻟﯿﻨﻮﮐﺲ‬


         ‫ﻗﺴﻤﺖ ﯾﮑﻢ – ‪ASLR‬‬



             ‫ﻣﺤﻤﺪ ﮔﻠﯿﺎﻧﯽ‬
             ‫ﺧﺮداد 0931‬
‫ﻓﻬﺮﺳﺖ ﻣﻄﺎﻟﺐ‬



‫ﻧﺤﻮه ﭘﯿﺎده ﺳﺎزي‪ ASLR‬در ﭘﺸﺘﻪ‬   ‫-‬                          ‫‪ ASLR‬ﭼﯿﺴﺖ؟‬       ‫-‬


       ‫ﺑﺮرﺳﯽ ‪ ASLR‬در ‪Heap‬‬     ‫-‬                       ‫ﻗﺒﻞ و ﺑﻌﺪ از ‪ASLR‬‬   ‫-‬


     ‫ﺑﺮرﺳﯽ ‪ ASLR‬در ‪mmap‬‬       ‫-‬                 ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬    ‫-‬


                  ‫ﺟﻤﻊ ﺑﻨﺪي‬    ‫-‬     ‫ﺑﺮرﺳﯽ ﺳﻮرس ﻓﺎﯾﻠﻬﺎي ‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ‬     ‫-‬
‫‪ASLR‬‬

‫‪ ASLR‬ﯾﺎ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﻓﻀﺎي آدرس، روﺷﯽ اﺳﺖ ﮐﻪ در آن، ﻓﻀﺎﻫﺎي ﮐﻠﯿﺪي ﺑﺮﻧﺎﻣﻪ از ﺣﺎﻟﺖ‬          ‫-‬
                          ‫ﺛﺎﺑﺖ و از ﭘﯿﺶ ﺗﻌﯿﯿﻦ ﺷﺪه، ﺑﻪ ﺣﺎﻟﺖ ﺗﺼﺎدﻓﯽ ﺗﻐﯿﯿﺮ ﭘﯿﺪا ﻣﯽ ﮐﻨﺪ.‬
‫ﺑﺎ وﺟﻮد ‪ ،ASLR‬ﻧﻔﻮذﮔﺮ ﻗﺎدر ﺑﻪ ﺗﻌﯿﯿﻦ آدرس ﺑﺮﮔﺸﺖ ﻣﻨﺎﺳﺐ )ﮐﻪ ﺑﻪ ﮐﺪ‪ ‬دﻟﺨﻮاه او اﺷﺎره ﮐﻨﺪ(،‬   ‫-‬
                                                                         ‫ﻧﺨﻮاﻫﺪ ﺑﻮد.‬
‫‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ از ﻧﺴﺨﮥ 21.6.2 )5002 ‪ (May‬ﺑﻪ ﺻﻮرت ﭘﯿﺶ ﻓﺮض در ﺣﺪ ﺿﻌﯿﻔﯽ‬                   ‫-‬
                                                                  ‫ﻗﺮار داده ﺷﺪه اﺳﺖ.‬
   ‫‪ PaX‬و ‪ ،exec-shield‬ﭘﯿﺎده ﺳﺎزي ﻫﺎي ﻗﻮي ﺗﺮي از اﯾﻦ روش در ﻟﯿﻨﻮﮐﺲ اراﺋﻪ ﮐﺮده اﻧﺪ.‬      ‫-‬
‫اﮔﺮﭼﻪ اﯾﻦ ﺗﮑﻨﯿﮏ در ﮐﺮﻧﻞ ﻟﯿﻨﻮﮐﺲ از ﺳﺎل 5002 ﺑﻪ ﺻﻮرت ﭘﯿﺶ ﻓﺮض ﻗﺮار ﮔﺮﻓﺖ وﻟﯽ‬               ‫-‬
                ‫‪ ،PaX‬در ﺳﺎل 1002 ﯾﮏ ﭘﯿﺎده ﺳﺎزي ﮐﺎﻣﻞ از اﯾﻦ ﺗﮑﻨﯿﮏ را اراﺋﻪ ﮐﺮده ﺑﻮد.‬
‫ﻗﺒﻞ از ‪ASLR‬‬
‫ﺑﺪون اﺳﺘﻔﺎده از ﺗﮑﻨﯿﮏ ‪ ،ASLR‬آدرس ﺷﺮوع ﭘﺸﺘﻪ از ﻗﺒﻞ ﻣﺸﺨﺺ ﺑﻮده و ﺑﻨﺎﺑﺮاﯾﻦ ﻣﯽ ﺗﻮان‬                             ‫-‬
                                                                        ‫آدرس ﻗﺮارﮔﯿﺮي ﺷﻠﮑﺪ را ﺑﺪﺳﺖ آورد.‬
          ‫در اﯾﻦ ﺣﺎﻟﺖ، ﺗﻨﻬﺎ ﮐﺎﻓﯽ اﺳﺖ آدرس ﺷﺮوع ﺷﻠﮑﺪ را ﺑﺮ روي ‪ EIP‬ﺑﺎزﻧﻮﯾﺴﯽ ﻧﻤﺎﯾﯿﻢ:‬                         ‫-‬
                        ‫آدرس ﺷﻠﮑﺪ‬

                                    ‫آدرس ﺷﻠﮑﺪ‬

                                                ‫آدرس ﺷﻠﮑﺪ‬

                                                            ‫آدرس ﺷﻠﮑﺪ‬

                                                                          ‫آدرس ﺷﻠﮑﺪ‬

                                                                                      ‫آدرس ﺷﻠﮑﺪ‬
            ‫ﺑﺎﻓﺮ آﺳﯿﺐ‬                                                                  ‫‪IP‬‬
             ‫ﺷﻠﮑﺪ‬                      ‫ﻓﻀﺎي ﺣﺎﻓﻈﻪ‬
             ‫ﭘﺬﯾﺮ‬                                                                     ‫)‪(EIP‬‬




                                                     ‫ﺳـــــﺮرﯾــــــــﺰ‬
                ‫ﺳﺎﯾﺰ واﻗﻌﯽ ﺑﺎﻓﺮ‬
‫ﻗﺒﻞ از ‪ASLR‬‬
‫وﺿﻌﯿﺖ ﻓﻀﺎي آدرس ﯾﮏ ﺑﺮﻧﺎﻣﻪ )‪ (cat‬در دو ﺑﺎر اﺟﺮاي ﻣﺨﺘﻠﻒ ﻗﺒﻞ از ﻓﻌﺎل ﺳﺎزي ‪ ASLR‬ﺑﻪ‬   ‫-‬
                                                             ‫ﺻﻮرت زﯾﺮ ﻣﯽ ﺑﺎﺷﺪ:‬
‫ﻗﺒﻞ از ‪ASLR‬‬
‫ﻗﺒﻞ از ‪ASLR‬‬

                       ‫- وﺿﻌﯿﺖ آدرس ﻫﺎ در دو اﺟﺮا از ﻗﺮار زﯾﺮ اﺳﺖ:‬


  ‫اﺠﺮای دوم‬                  ‫اﺠﺮای ﮑﻢ‬           ‫ﻤﮑﺎن ﺣﺎﻓﻈﻪ‬
‫000‪0x0804e‬‬                ‫000‪0x0804e‬‬              ‫‪HEAP‬‬
‫000‪0xbffea‬‬                 ‫000‪0xbffea‬‬             ‫‪Stack‬‬
‫00076‪0x00b‬‬                ‫00076‪0x00b‬‬               ‫‪Libc‬‬
‫00084080‪0x‬‬                ‫00084080‪0x‬‬            ‫ﺧﻮد ِ ﻓﺎ ﻞ اﺠﺮا ـ‬



              ‫آدرس ﻫﺎ در ﻫﺮ دو اﺟﺮا ﯾﮑﺴﺎن اﺳﺖ‬
‫ﺑﻌﺪ از ‪ASLR‬‬

    ‫- ﺑﺎ اﺳﺘﻔﺎده از ‪ ،ASLR‬آدرس ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ، از ﻗﺒﻞ ﻧﺎﻣﺸﺨﺺ ﺧﻮاﻫﺪ ﺑﻮد.‬
‫- ﺑﻪ دﻟﯿﻞ ﺗﺼﺎدﻓﯽ ﺑﻮدن ﻣﺤﻞ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ، ﻧﻤﯽ ﺗﻮان آدرس ﺷﻠﮑﺪ را ﺑﻪ‬
                                                                                                                      ‫ﻫﻨﮕﺎم ﺑﺎرﮔﺰاري ﺑﺪﺳﺖ آورد.‬
                                     ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬


                                                            ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬


                                                                                   ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬


                                                                                                          ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬


                                                                                                                                 ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬


                                                                                                                                                         ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬
                         ‫ﺑﺎﻓﺮ آﺳﯿﺐ‬                                                                                                                       ‫‪IP‬‬
                          ‫ﺷﻠﮑﺪ‬                                   ‫ﻓﻀﺎي ﺣﺎﻓﻈﻪ‬
                          ‫ﭘﺬﯾﺮ‬                                                                                                                          ‫)‪(EIP‬‬




                                             ‫ﺑﺎ وﺟﻮد ﺳﺮرﯾﺰ، ﺑﻪ دﻟﯿﻞ ﻣﺸﺨﺺ‬
            ‫)????????(‬




                             ‫ﻧﺒﻮدن آدرس ﺷﻠﮑﺪ، ﻧﻤﯽ ﺗﻮان ﺳﺎﯾﺰ واﻗﻌﯽ ﺑﺎﻓﺮ‬
                                             ‫ﮐﻨﺘﺮل اﺟﺮا را ﺑﻪ آن اﻧﺘﻘﺎل داد‬
‫ﺑﻌﺪ از ‪ASLR‬‬
‫وﺿﻌﯿﺖ ﻓﻀﺎي آدرس ﯾﮏ ﺑﺮﻧﺎﻣﻪ )‪ (cat‬در دو ﺑﺎر اﺟﺮاي ﻣﺨﺘﻠﻒ ﺑﻌﺪ از ﻓﻌﺎل ﺳﺎزي ‪ ASLR‬ﺑﻪ‬   ‫-‬
                                                             ‫ﺻﻮرت زﯾﺮ ﻣﯽ ﺑﺎﺷﺪ:‬
‫ﺑﻌﺪ از ‪ASLR‬‬
‫ﻗﺒﻞ از ‪ASLR‬‬
                             ‫وﺿﻌﯿﺖ آدرس ﻫﺎ در دو اﺟﺮا از ﻗﺮار زﯾﺮ اﺳﺖ:‬   ‫-‬


  ‫اﺠﺮای دوم‬               ‫اﺠﺮای ﮑﻢ‬                ‫ﻤﮑﺎن ﺣﺎﻓﻈﻪ‬
‫00060680‪0x‬‬             ‫0000‪0x08dd‬‬                   ‫‪HEAP‬‬
‫00061‪0xbfe‬‬             ‫000828‪0xbf‬‬                   ‫‪Stack‬‬
‫00076‪0x00b‬‬             ‫00076‪0x00b‬‬                    ‫‪Libc‬‬
‫00084080‪0x‬‬             ‫00084080‪0x‬‬                 ‫ﺧﻮد ِ ﻓﺎ ﻞ اﺠﺮا ـ‬




         ‫آدرس ‪ HEAP‬و ‪ STACK‬در ﻫﺮ اﺟﺮا ﻣﺘﻔﺎوت‬
                          ‫اﺳﺖ.‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬

            ‫‪ ،ASLR‬ﻣﮑﺎن ﻫﺎي ﻣﺨﺘﻠﻒ ﻗﺮار ﮔﯿﺮي ﯾﮏ ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ را ﺗﺼﺎدﻓﯽ ﻣﯽ ﻧﻤﺎﯾﺪ.‬          ‫-‬

 ‫ﺑﺎ ﻫﺮ ﺑﺎر اﺟﺮاي ﺑﺮﻧﺎﻣﻪ، آدرس اﯾﻦ ﻣﮑﺎن ﻫﺎي ﺣﺎﻓﻈﻪ ﻧﺴﺒﺖ ﺑﻪ اﺟﺮاي ﻗﺒﻠﯽ ﻣﺘﻔﺎوت ﺧﻮاﻫﺪ ﺑﻮد.‬      ‫-‬


                             ‫‪ ،ASLR‬در ﻟﯿﻨﻮﮐﺲ از ﻧﺴﺨﮥ 21.6.2 درون ﮐﺮﻧﻞ ﻗﺮار داده ﺷﺪ.‬        ‫-‬


                ‫ﻗﺒﻞ از 5002 )21.6.2(، ‪ ASLR‬ﺗﻮﺳﻂ ‪ PaX‬در ﺳﺎل 1002 ﻣﻌﺮﻓﯽ ﺷﺪه ﺑﻮد.‬             ‫-‬


‫‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزي را ﺑﺮروي ﺑﺎﯾﻨﺮي ﻫﺎي ‪ ELF‬اﻧﺠﺎم ﻣﯽ دﻫﺪ. ﺑﻨﺎﺑﺮاﯾﻦ‬           ‫-‬


          ‫ﻣﯽ ﺗﻮان اﯾﻦ ﭘﯿﺎده ﺳﺎزي را در ﺗﻮاﺑﻊِ ﮐﺘﺎﺑﺨﺎﻧﻪ اي ‪) ELF‬و ﺳﺎﯾﺮ ﺗﻮاﺑﻊ( ﺟﺴﺘﺠﻮ ﻧﻤﻮد.‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
‫ﺑﺎ ﯾﮏ ﺑﺮرﺳﯽ ﮐﻠّﯽ در ﻓﺎﯾﻠﻬﺎي ﺳﻮرسِ ﻟﯿﻨﻮﮐﺲ، ﻣﯽ ﺗﻮان ﻗﺴﻤﺘﻬﺎﯾﯽ ﮐﻪ ﺗﺤﺖ ﺗﺄﺛﯿﺮ ‪ASLR‬‬    ‫-‬
                                                 ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﺷﺪه اﻧﺪ را ﯾﺎﻓﺖ:‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬

‫ﺑﺎ ﺑﺮرﺳﯽ دﻗﯿﻖ ﺗﺮ اﯾﻦ ﺳﻮرس ﻫﺎ ﻣﯽ ﺗﻮان اﻃﻼﻋﺎت ﺑﯿﺸﺘﺮي در ﻣﻮرد ﻧﺤﻮة ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﻫﺎ در‬      ‫-‬

                                                                        ‫‪ ASLR‬ﺑﺪﺳﺖ آورد:‬

‫در ﺻﻮرﺗﯽ ﮐﻪ ﺳﯿﺴﺘﻢ ﻓﺎﻗﺪ ‪ MMU‬ﺑﺎﺷﺪ )ﻧﻈﯿﺮ ﺑﺮﺧﯽ ﺳﯿﺴﺘﻢ ﻫﺎي ‪ ،(embedded‬ﺗﻌﺮﯾﻒ ﺗﺼﺎدﻓﯽ‬                ‫-‬

                                           ‫ﺳﺎزي در ﻓﺎﯾﻞ ‪ include/mm.h‬ﺻﻮرت ﻣﯽ ﭘﺬﯾﺮد.‬

                           ‫‪ MMU‬ﯾﮏ واﺣﺪ ﺳﺨﺖ اﻓﺰاري اﺳﺖ ﮐﻪ در اﮐﺜﺮ ﺳﯿﺴﺘﻢ ﻫﺎ وﺟﻮد دارد.‬        ‫-‬

‫ﻻزم ﺑﻪ ذﮐﺮ اﺳﺖ ﮐﻪ در ﺳﯿﺴﺘﻢ ﻫﺎي ﻟﯿﻨﻮﮐﺴﯽ )آﺧﺮﯾﻦ ﻧﺴﺨﻪ 93.6.2(، ﻗﺎﺑﻠﯿﺖ اﺳﺘﻔﺎده از ‪ MMU‬ﺑﻪ‬        ‫-‬

                                                           ‫ﺻﻮرت ﭘﯿﺶ ﻓﺮض ﻓﻌﺎل ﻣﯽ ﺑﺎﺷﺪ.‬

‫ﮐﺎرﺑﺮد ‪ MMU‬ﯾﺎ واﺣﺪ ﻣﺪﯾﺮﯾﺖ ﺣﺎﻓﻈﻪ در ﺳﯿﺴﺘﻢ ﻫﺎي اﻣﺮوزي، ﮐﻨﺘﺮل دﺳﺘﺮﺳﯽ ‪ CPU‬ﺑﻪ واﺣﺪ ﺣﺎﻓﻈﻪ‬         ‫-‬

                       ‫اﺳﺖ ﮐﻪ اﯾﻦ اﻣﺮ ﺷﺎﻣﻞ ﺗﺒﺪﯾﻞ آدرس ﻣﺠﺎزي ﺑﻪ آدرس ﻓﯿﺰﯾﮑﯽ و ... ﻣﯽ ﺑﺎﺷﺪ.‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
‫ﺑﺴﯿﺎري از ﺗﻨﻈﯿﻤﺎت ﻓﻮق، ﮐﻨﺘﺮل ﻫﺎﯾﯽ اﺳﺖ ﮐﻪ ﺑﺴﺘﻪ ﺑﻪ ﻧﺤﻮه ﮐﺎﻣﭙﺎﯾﻞ ﮐﺮﻧﻞ اﻧﺠﺎم ﻣﯽ ﺷﻮد:‬   ‫-‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
                             ‫ﯾﮑﯽ از اﯾﻦ ﻣﻮارد در ﻓﺎﯾﻞ ‪ personality.h‬ﻗﺎﺑﻞ ﺗﻨﻈﯿﻢ اﺳﺖ.‬    ‫-‬
‫اﯾﻦ ﻣﻘﺪار، اﻣﮑﺎنِ ﻏﯿﺮ ﻓﻌﺎل ﺳﺎزي ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ در ﻣﻮرد ﺗﺎﺑﻊ )(‪ mmap‬را ﻓﺮاﻫﻢ ﻣﯽ ﻧﻤﺎﯾﺪ:‬   ‫-‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬

‫ﻓﺎﯾﻞ ‪ /include/linux/sysctl.h‬ﺣﺎوي اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﻓﺮاﺧﻮاﻧﯽ ﺗﺎﺑﻊ )(‪ sysctl‬ﻣﯽ ﺑﺎﺷﺪ.‬       ‫-‬

 ‫اﯾﻦ ﺗﺎﺑﻊ ﻗﺎﺑﻠﯿﺖ ﺗﻨﻈﯿﻢ ﯾﮏ ﺳﺮي ﭘﺎراﻣﺘﺮ ﻫﺎي ﻓﻀﺎي ﮐﺮﻧﻞ را از ﻓﻀﺎي ﮐﺎرﺑﺮي ﻓﺮاﻫﻢ ﻣﯽ ﻧﻤﺎﯾﺪ.‬   ‫-‬

‫از ﺟﻤﻠﻪ اﯾﻦ ﻗﺎﺑﻠﯿﺖ ﻫﺎ، ﻗﺎﺑﻠﯿﺖ‪ KERN_RANDOMIZE ‬ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﻣﺮﺑﻮط ﺑﻪ ﺗﺼﺎدﻓﯽ ﺳﺎزي‬           ‫-‬

                                                      ‫ﻓﻀﺎي ﺣﺎﻓﻈﮥ ﻣﺠﺎزي ﭘﺮوﺳﻪ اﺳﺖ.‬

    ‫ﺑﺮاي ﺳﯿﺴﺘﻢ ﻫﺎي ‪ ISA UniCore‬و ‪ ،PKUnity SoC‬ﺗﺼﺎدﻓﯽ ﺳﺎزي ‪ ،heap‬در ﻓﺎﯾﻠﻬﺎي‬              ‫-‬

 ‫‪ arch/unicore32/kernel/process.c‬و ‪arch/unicore32/include/asm/elf.h‬‬

                                                                       ‫اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬
‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
‫ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎ ﺑﺮرﺳﯽ ﻓﺎﯾﻠﻬﺎﯾﯽ ﮐﻪ در آﻧﻬﺎ از ﺗﻮاﺑﻊ ﺗﺼﺎدﻓﯽ ﺳﺎزي اﺳﺘﻔﺎده ﺷﺪه، ﻣﯽ ﺗﻮان ﺑﻪ ﻧﺤﻮه‬    ‫-‬

                                     ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺳﺎﺧﺘﺎرﻫﺎي ﻣﺨﺘﻠﻒ ﻟﯿﻨﻮﮐﺴﯽ ﭘﯽ ﺑﺮد.‬

‫ﻧﻈﺮ ﺑﻪ ﻓﺮاواﻧﯽ اﺳﺘﻔﺎده از اﯾﻦ ﻧﻮع ﺗﻮاﺑﻊ و اﺳﺘﻔﺎده از آن در ﻣﻌﻤﺎري ﻫﺎي ﻣﺨﺘﻠﻒ ),‪ARM, MIPS‬‬    ‫-‬

                           ‫‪TILE‬و ...( ﺑﻪ ﺑﺮرﺳﯽ ﻓﺎﯾﻠﻬﺎي ﻣﻮرد ﺗﻮﺟﻪ در 68‪ x‬ﺑﺴﻨﺪه ﻣﯽ ﻧﻤﺎﯾﯿﻢ.‬

        ‫ﺑﺨﺶ ﻫﺎي ﻣﺨﺘﻠﻒ ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزي در ‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ 68‪ ،x‬از ﻗﺮار زﯾﺮ اﺳﺖ:‬           ‫-‬

                                                            ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﭘﺸﺘﻪ.‬     ‫-‬

                                                   ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺗﺎﺑﻊ )(‪.mmap‬‬       ‫-‬

                                                           ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ‪.heap‬‬      ‫-‬

            ‫ﺑﺪﯾﻦ ﺗﺮﺗﯿﺐ ﻫﺮ ﺑﺨﺶ دﯾﮕﺮي ﮐﻪ از ﻣﻮارد ﻓﻮق اﺳﺘﻔﺎده ﻧﻤﺎﯾﺪ ﻧﯿﺰ ﺗﺼﺎدﻓﯽ ﺧﻮاﻫﺪ ﺷﺪ.‬     ‫-‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
             ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﭘﺸﺘﻪ، ﺑﻪ ﻫﻨﮕﺎم ﺑﺎرﮔﺰاري ﻓﺎﯾﻞ ﻫﺎ در ﺣﺎﻓﻈﻪ ﺻﻮرت ﻣﯽ ﭘﺬﯾﺮد.‬   ‫-‬
‫ﺑﺎرﮔﺰاري ﺑﺎﯾﻨﺮي ﻫﺎ ﺗﻮﺳﻂ ﺗﺎﺑﻊ )(‪ load_elf_binary‬ﺻﻮرت ﻣﯽ ﭘﺬﯾﺮد ﮐﻪ در ﻓﺎﯾﻞ‬            ‫-‬
                                                   ‫‪ fs/binfmt_elf.c‬ﺗﻌﺮﯾﻒ ﺷﺪه.‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
  ‫در اﯾﻦ ﺗﺎﺑﻊ، ﭘﺲ از ﺗﻨﻈﯿﻢ ﻧﻤﻮدن ﯾﮏ ﺳﺮي ﻓﻠﮓ ﻫﺎ، از ﺗﻮاﺑﻊ دﯾﮕﺮي ﺟﻬﺖ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﭘﺸﺘﻪ اﺳﺘﻔﺎده‬         ‫-‬
                                                                                      ‫ﺷﺪه اﺳﺖ:‬



                                                                                ‫‪ : Current‬ﯾﮏ ﻣﺎﮐﺮو‬
                                                                                ‫اﺳﺖ ﮐﻪ اﺷﺎره ﮔﺮي ﺑﻪ‬
                                                                                ‫اﺳﺘﺮاﮐﭽﺮِ ﭘﺮوﺳﮥ ﺟﺎري‬
                                                                                    ‫ﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ.‬




           ‫در ﺻﻮرﺗﯽ ﮐﻪ در ﻣﺸﺨﺼﺎت ﭘﺮوﺳﮥ ﺟﺎري )‪ ،(include/linux/personality.h‬ﻣﻘﺪار‬
‫‪ ADDR_NO_RANDOMIZE‬ﺗﻨﻈﯿﻢ ﻧﺸﺪه ﺑﺎﺷﺪ و ﻣﺘﻐﯿﺮ ‪ randomize_va_space‬ﻧﯿﺰ ﺻﻔﺮ ﻧﺒﺎﺷﺪ، آﻧﮕﺎه‬
  ‫ﻓﻠﮓ‪ ‬ﺗﺼﺎدﻓﯽ ﺳﺎزي )‪ (PF_RANDOMIZE‬ﻧﯿﺰ ﻋﻼوه ﺑﺮ ﺳﺎﯾﺮ ﻓﻠﮓ ﻫﺎ در ﻣﻮرد اﯾﻦ ﭘﺮوﺳﻪ ﺳﺖ ﺧﻮاﻫﺪ ﺷﺪ.‬
‫ﺑﻪ ﻋﺒﺎرت ﺳﺎده ﺗﺮ، اﮔﺮ ﭘﺮوﺳﻪ ﻧﯿﺎزي ﺑﻪ آدرس ﻫﺎي ﺛﺎﺑﺖ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ و ‪ ASLR‬ﻓﻌﺎل ﺑﺎﺷﺪ، ﻓﻀﺎي آدرس ﭘﺮوﺳﻪ،‬
                                     ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﻣﯽ ﺷﻮد.‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
‫ﺳﭙﺲ ﺑﺎ ﻓﺮاﺧﻮاﻧﯽ ﺗﺎﺑﻊ )(‪ setup_arg_pages‬و ﭘﺎس دادن آدرس ‪ ToS‬ﺑﻪ آن، ﻓﻠﮓ ﻫﺎ و ﻣﺠﻮز ﻫﺎ، ﺑﻪ‬          ‫-‬
     ‫روز رﺳﺎﻧﯽ ﺷﺪه، ﭘﺸﺘﻪ ﺑﻪ دﻟﺨﻮاه ﺟﺎﯾﮕﺰاري ﻣﺠﺪد ﺷﺪه و ﻣﻘﺪاري ﻓﻀﺎي اﺿﺎﻓﻪ ﺑﻪ آن اﻓﺰوده ﻣﯽ ﺷﻮد.‬
‫در ﻫﻤﯿﻦ ﻣﺮﺣﻠﻪ از ﺗﺎﺑﻊ )(‪ randomize_stack_top‬اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد ﺗﺎ ﻣﺤﻞ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ ﺑﻪ‬             ‫-‬
                                                                   ‫ﺻﻮرت ﺗﺼﺎدﻓﯽ اﻧﺘﺨﺎب ﺷﻮد.‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
‫ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺗﺎﺑﻊ )(‪) randomize_stack_top‬ﮐﻪ در ﻫﻤﯿﻦ ﻓﺎﯾﻞ ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ( اﻧﺠﺎم‬                        ‫-‬
                                                                                               ‫ﻣﯽ ﺷﻮد.‬
‫ﻣﻘﺪار ﺑﺮﮔﺸﺘﯽ ﺗﻮﺳﻂ اﯾﻦ ﺗﺎﺑﻊ، ﻋﺒﺎرت اﺳﺖ از ﯾﮏ آدرس ﮐﻪ اﯾﻦ آدرس آدرس ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ ﻗﻠﻤﺪاد‬                       ‫-‬
                                                                                            ‫ﺧﻮاﻫﺪ ﺷﺪ.‬
   ‫در اﯾﻦ ﺗﺎﺑﻊ، ﻣﺤﻞ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ، ﺑﻪ ﺻﻮرت ﺗﺼﺎدﻓﯽ ﺑﻪ اﻧﺪازة ‪ random_variable‬ﺟﺎﺑﺠﺎ ﻣﯽ ﺷﻮد.‬                    ‫-‬




                                                                      ‫‪ ،PAGE_ALIGN‬اﺷﺎره ﮔﺮ را‬
                                                                      ‫ﺑﻪ اﺑﺘﺪاي ‪ PAGE‬ﺑﻌﺪي ﺗﻨﻈﯿﻢ‬
                                                                                ‫ﻣﯽ ﻧﻤﺎﯾﺪ‬



                                                           ‫اﮔﺮ ﭘﺸﺘﻪ ﻫﻢ ﺟﻬﺖ ﺑﺎ آدرس ﻫﺎي ﺣﺎﻓﻈﻪ رﺷﺪ ﮐﻨﺪ، ﻣﻘﺪار‬
                                                    ‫‪ random_variable‬ﺑﻪ آدرﺳﯽ ﮐﻪ ﺗﻮﺳﻂ ‪ PAGE_ALIGN‬ﺑﺮﮔﺮداﻧﺪه‬
                                                        ‫ﻣﯽ ﺷﻮد، اﺿﺎﻓﻪ ﻣﯽ ﺷﻮد. و در ﻏﯿﺮ اﯾﻦ ﺻﻮرت اﯾﻦ ﻣﻘﺪار از آدرسِ‬
                                                        ‫‪ PAGE_ALIGN‬ﮐﻢ ﻣﯽ ﺷﻮد )ﻧﻈﯿﺮ ﺑﺮﺧﯽ ﻣﻌﻤﺎري ﻫﺎي ‪.(RISC‬‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
‫ﻧﺤﻮه ﺗﺨﺼﯿﺺ ﻣﻘﺪار ﺑﻪ ﻣﺘﻐﯿﺮ ‪ random_variable‬در اﯾﻦ ﺗﺎﺑﻊ، ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ ﮐﻤﮑﯽ‬                 ‫-‬

   ‫)(‪ get_random_int‬و ﺳﭙﺲ ﺷﯿﻔﺖ دادن اﯾﻦ آدرس ﺑﻪ ﻣﯿﺰانِ ‪ PAGE_SHIFT‬اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬

        ‫‪ PAGE_SHIFT‬در ﻣﻮرد 68‪ x‬ﺑﺮاﺑﺮ 21 ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ ﮐﻪ در ﻓﺎﯾﻞ زﯾﺮ ﻗﺎﺑﻞ ﻣﺸﺎﻫﺪ اﺳﺖ:‬           ‫-‬

                                        ‫)‪.(arch/x86/include/asm/page_types.h‬‬




                                                     ‫ﻣﻘﺪار ﺑﺪﺳﺖ آﻣﺪه از )(‪ get_random_int‬ﺑﺎ ﻣﻘﺪار‬
                                              ‫‪ STACK_RND_MASK‬ﺟﻤﻊ ﻣﻨﻄﻘﯽ ﺷﺪه و ﻧﺘﯿﺠﻪ ﻣﻘﺪارِ اوﻟﯿﮥ‬
                                                 ‫‪ random_variable‬را ﺗﺸﮑﯿﻞ ﻣﯽ دﻫﺪ )ﻗﺒﻞ از ﺷﯿﻔﺖ(.‬
                                              ‫‪ STACK_RND_MASK‬ﻧﯿﺰ ﻗﺒﻞ از ﺗﻌﺮﯾﻒ ﺗﺎﺑﻊ ﻣﻘﺪار دﻫﯽ ﺷﺪه‬
                                                ‫)ﻣﻘﺪار ﺛﺎﺑﺖ( و ﻣﺸﺨﺺ ﮐﻨﻨﺪة ﺑﯿﺖ ﻫﺎي ارزﺷﻤﻨﺪ در ﺗﺼﺎدﻓﯽ‬
                                                                      ‫ﺳﺎزي ﻣﯽ ﺑﺎﺷﺪ.‬
‫‪ PAGE_SHIFT‬ﭼﯿﺴﺖ؟‬

‫آدرس ﻫﺎي ﺣﺎﻓﻈﻪ اي ﮐﻪ در ﺳﻄﺢ ﮐﺮﻧﻞ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﯽ ﮔﯿﺮد، ﻧﻈﺮ ﺑﻪ اﺳﺘﻔﺎده از وﯾﮋﮔﯽ‬        ‫-‬

                                              ‫‪ ،PAGING‬ﻣﻀﺎرﺑﯽ از ﺣﺠﻢ ‪ PAGE‬ﻫﺎ ﻣﯽ ﺑﺎﺷﺪ.‬

                      ‫ﺣﺠﻢ ‪ PAGE‬ﻫﺎ در ‪ asm/page.h‬ﻗﺎﺑﻞ ﺗﻨﻈﯿﻢ اﺳﺖ )ﻣﺘﻐﯿﺮ ‪.(PAGE_SIZE‬‬          ‫-‬

                  ‫آدرس ﻫﺎي ﻣﻮرد اﺳﺘﻔﺎده در ﮐﺮﻧﻞ، ﺷﺎﻣﻞ دو ﻗﺴﻤﺖ ﭘﺮ ارزش و ﮐﻢ ارزش ﻣﯽ ﺑﺎﺷﺪ.‬   ‫-‬

       ‫ﻗﺴﻤﺖ ﭘﺮ ارزش، ﺑﻪ آدرسِ ‪ PAGE‬و ﻗﺴﻤﺖ ﮐﻢ ارزش ﺑﻪ آﻓﺴﺖ درون ‪ PAGE‬ﺗﺨﺼﯿﺺ ﻣﯽ ﯾﺎﺑﺪ.‬         ‫-‬

‫ﺑﺎ ﺷﯿﻔﺖ دادن اﯾﻦ آدرس ﻫﺎ و ﺑﺮون رﯾﺰي آﻓﺴﺖ‪ ،PAGE ‬ﻣﻘﺪاري ﮐﻪ ﺑﺎﻗﯽ ﺧﻮاﻫﺪ ﻣﺎﻧﺪ، اﺷﺎره ﮔﺮي ﺑﻪ‬   ‫-‬

                                                                         ‫‪ PAGE‬ﻣﯽ ﺑﺎﺷﺪ.‬

                               ‫‪ ،PAGE_SHIFT‬ﻣﯿﺰان اﯾﻦ ﺷﯿﻔﺖ را در ﺳﯿﺴﺘﻢ ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ.‬         ‫-‬
‫‪ PAGE_SHIFT‬ﭼﯿﺴﺖ؟‬

 ‫ﺑﺎ 21 ﺑﯿﺖ ﻣﯽ ﺗﻮان درون ‪ PAGE‬را آدرس دﻫﯽ ﻧﻤﻮد.‬                                    ‫212 = 6904 = ‪PAGE_SIZE‬‬




  ‫‪A‬‬     ‫‪B‬‬    ‫‪C‬‬      ‫‪D‬‬       ‫‪E‬‬        ‫‪F‬‬      ‫‪G‬‬       ‫‪H‬‬        ‫‪I‬‬      ‫‪J‬‬   ‫‪K‬‬     ‫‪L‬‬     ‫‪M‬‬    ‫‪N‬‬    ‫‪O‬‬    ‫‪P‬‬   ‫‪Q‬‬




‫آدرﺳﯽ ﮐﻪ ﺑﻪ ﺧﻮد‪ PAGE ‬اﺷﺎره ﻣﯽ ﮐﻨﺪ‬                                 ‫آدرسِ ﻣﺤﺘﻮﯾﺎت درون ‪PAGE‬‬



  ‫0‬    ‫0‬     ‫0‬      ‫0‬       ‫0‬       ‫0‬       ‫0‬       ‫0‬       ‫0‬       ‫0‬   ‫0‬    ‫0‬      ‫‪A‬‬    ‫‪B‬‬    ‫‪C‬‬   ‫‪D‬‬    ‫‪E‬‬

            ‫ﺑﺎ 21 ﺑﯿﺖ ﺷﯿﻔﺖ ﺑﻪ ﺳﻤﺖ راﺳﺖ، آدرس ‪ PAGE‬را ﺑﺪﺳﺖ ﺧﻮاﻫﯿﻢ آورد‬



                   ‫‪ PAGE_SHIFT‬ﺑﺮاﺑﺮ 21 ﻣﯽ ﺑﺎﺷﺪ.‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
‫ﻧﺤﻮه ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺗﺎﺑﻊ )(‪ get_random_int‬ﮐﻪ در ﻓﺎﯾﻞ ‪ drivers/char/random.c‬ﺗﻌﺮﯾﻒ‬               ‫-‬
                                                                   ‫ﺷﺪه از ﻗﺮار زﯾﺮ اﺳﺖ:‬




                                                   ‫ﭘﺲ از ﺗﻌﺮﯾﻒ آراﯾﮥ ‪ HASH‬و ﺗﻨﻈﯿﻢ آدرس آن‬
                                                       ‫)آدرسِ آراﯾﮥ ‪ ،(CPU‬ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ‬
                                                  ‫)(‪ ،get_keyptr‬ﻣﺘﻐﯿﺮِ ‪ keyptr‬ﻣﻘﺪار دﻫﯽ اوﻟﯿﻪ‬
                                                  ‫ﺷﺪه و ﺳﭙﺲ ﺑﺎ اﺳﺘﻔﺎده از آدرس آرﯾﮥ ‪ HASH‬ﺑﻪ‬
                                                    ‫ﻫﻤﺮاه ‪ PID‬ﭘﺮوﺳﻪ ﺟﺎري و ﺗﻌﺪاد ﺳﯿﮑﻞ ﻫﺎي‬
                                                   ‫ﭘﺮدازﻧﺪه و ﻣﺪت زﻣﺎن ﻓﻌﺎل ﺑﻮدن ﺳﯿﺴﺘﻢ، ﯾﮏ‬
                                                  ‫ﻣﻘﺪار ﺗﺼﺎدﻓﯽ در ﺧﺎﻧﻪ اول آراﯾﮥ ‪ HASH‬ﻗﺮار داده‬
                                                          ‫ﺷﺪه و ﺳﭙﺲ ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ‬
                                                   ‫)(‪ half_md4_transform‬اﯾﻦ ﻣﻘﺪار ﺑﺎز ﻫﻢ‬
                                                       ‫ﺗﺼﺎدﻓﯽ ﺗﺮ ﺷﺪه و ﺑﺎزﮔﺮداﻧﺪه ﻣﯽ ﺷﻮد‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
  ‫ﺗﺎﺑﻊ )(‪ half_md4_transform‬ﮐﻪ در ﻓﺎﯾﻞِ ‪ lib/halfmd4.c‬ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ، ﯾﮏ‬               ‫-‬
‫ﭘﯿﺎده ﺳﺎزي ﻣﺨﺘﺼﺮ از اﻟﮕﻮرﯾﺘﻢ 4‪ MD‬ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ در ﺳﻪ دورِ 8 ﺗﺎﯾﯽ و ﺑﺎ اﺳﺘﻔﺎده از ﻋﻤﻠﮕﺮ‬
                  ‫ﻫﺎي ‪ XOR‬و ‪ AND‬اﯾﻦ اﻟﮕﻮرﯾﺘﻢ را ﺑﺮروي ورودي ﺧﻮد اﻋﻤﺎل ﻣﯽ ﻧﻤﺎﯾﺪ.‬
‫‪ ASLR‬در ﭘﺸﺘﻪ‬
   ‫ﺑﺪﯾﻦ ﺗﺮﺗﯿﺐ ‪ ASLR‬در ﭘﺸﺘﻪ ﺑﺎ اﺳﺘﻔﺎده از 4 ﻣﻘﺪار اﺻﻠﯽ و ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ 4‪) MD‬ﯾﮏ ﭘﯿﺎده ﺳﺎزي‬     ‫-‬
                                                             ‫ﻣﺨﺘﺼﺮ از اﯾﻦ ﺗﺎﺑﻊ( اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬
                                                                    ‫اﯾﻦ ﻣﻘﺎدﯾﺮ اﺻﻠﯽ ﻋﺒﺎرﺗﻨﺪ از:‬   ‫-‬
                                                                 ‫ﺷﻤﺎره ﭘﺮوﺳﮥ اﺟﺮا ﺷﺪه.‬      ‫-‬
                                                              ‫ﺗﻌﺪاد ﺳﯿﮑﻞ ﻫﺎي ﭘﺮدازﻧﺪه.‬      ‫-‬
                                                          ‫ﻣﺪت زﻣﺎن روﺷﻦ ﺑﻮدن ﺳﯿﺴﺘﻢ.‬         ‫-‬
                     ‫اﯾﻦ ﭘﯿﺎده ﺳﺎزي اﺑﺘﺪاﯾﯽ ‪ ASLR‬در ﮐﺮﻧﻞ ﻟﯿﻨﻮﮐﺲ از ﻧﺴﺨﮥ 21.6.2 ﻗﺮار داده ﺷﺪ.‬      ‫-‬
‫ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎ درﻧﻈﺮ ﮔﺮﻓﺘﻦ ‪ STACK_RND_MASK‬ﮐﻪ ﺑﺎ ﺧﺮوﺟﯽ ﻣﻘﺪار ﺗﺼﺎدﻓﯽِ ﺗﻮﻟﯿﺪ ﺷﺪه از ﻣﻮارد ﻓﻮق،‬          ‫-‬
‫ﻣﺎﺳﮏ ﻣﯽ ﺷﻮد )ر.ك. ‪ ،(Binfmt_elf.c‬ﻣﯽ ﺗﻮان ﭼﻨﯿﻦ ﻧﺘﯿﺠﻪ ﮔﺮﻓﺖ ﮐﻪ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﭘﺸﺘﻪ در ‪ِASLR‬‬
 ‫ﭘﯿﺶ ﻓﺮض ﻟﯿﻨﻮﮐﺲ، ﺑﺮروي 11 ﺑﯿﺖ اﻧﺠﺎم ﺷﺪه و 7402 آدرس ﺗﺼﺎدﻓﯽ ﻣﺨﺘﻠﻒ ﺟﻬﺖ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ‬
                                                                                ‫ﺗﻮﻟﯿﺪ ﻣﯽ ﺷﻮد.‬
‫‪ ASLR‬در ‪heap‬‬
‫اﯾﻦ ﭘﯿﺎده ﺳﺎزي ﻧﯿﺰ ﻫﻨﮕﺎم ﺑﺎرﮔﺰاري ﻓﺎﯾﻠﻬﺎي ﺑﺎﯾﻨﺮي اﻧﺠﺎم ﻣﯽ ﺷﻮد ﮐﻪ در ﻓﺎﯾﻞ ‪fs/binfmt_elf.c‬‬     ‫-‬
                                                       ‫ﻣﯽ ﺗﻮان ﺟﺰﺋﯿﺎت آن را ﻣﺸﺎﻫﺪه ﻧﻤﻮد.‬




                                                         ‫ﭘﺲ از ﭼﮏ ﮐﺮدنِ ﻓﻠﮓ ﻫﺎي ﭘﺮوﺳﻪ و ﺑﺮرﺳﯽ‬
                                                          ‫‪ ،PF_RANDOMIZE‬در ﺻﻮرﺗﯽ ﮐﻪ ﮔﺰﯾﻨﮥ‬
                                                       ‫‪ randomize_va_space‬ﻧﯿﺰ ﺗﻨﻈﯿﻢ ﺷﺪه ﺑﺎﺷﺪ،‬
                                                            ‫آدرس ﺷﺮوعِ ‪ ،heap‬ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊِ‬
                                                      ‫)(‪ arch_randomize_brk‬ﺗﺨﺼﯿﺺ داده ﺧﻮاﻫﺪ‬
                                                                            ‫ﺷﺪ.‬
‫‪ ASLR‬در ‪heap‬‬
 ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ‪ heap‬در ﺗﺎﺑﻊ )(‪ arch_randomize_brk‬ﮐﻪ در ﻓﺎﯾﻞ‬                      ‫-‬
                        ‫‪ arch/x86/kernel/process.c‬ﺗﻌﺮﯾﻒ ﺷﺪه، اﻧﺠﺎم ﻣﯽ ﭘﺬﯾﺮد:‬




‫در اﯾﻦ ﺗﺎﺑﻊ از ﺗﺎﺑﻊِ ‪ randomize_range‬ﺑﻪ ﻣﻨﻈﻮر ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﺷﺮوع ‪heap‬‬
                             ‫اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.‬
‫‪ ASLR‬در ‪heap‬‬
‫ﺗﺎﺑﻊ )(‪ randomize_range‬در ﻓﺎﯾﻞ ‪ drivers/char/random.c‬ﺗﻌﺮﯾﻒ ﺷﺪه و ﯾﮏ‬           ‫-‬
                                     ‫آدرسِ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﺷﺪه را ﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ.‬




  ‫در اﯾﻦ ﺗﺎﺑﻊ ﻧﯿﺰ ﻫﻤﺎﻧﻨﺪ ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﻫﺎي ﭘﺸﺘﻪ، از ‪ PAGE_ALIGN‬و‬
‫)(‪ get_random_int‬اﺳﺘﻔﺎده ﺷﺪه ﮐﻪ در ﻧﺘﯿﺠﻪ ﯾﮏ آدرس ﺗﺼﺎدﻓﯽ ﺑﺮ ﻣﯽ ﮔﺮدد.‬
‫‪ ASLR‬در )(‪mmap‬‬
‫ﺗﻨﻈﯿﻤﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزيِ ‪ mmap‬در ‪ ،ASLR‬ﺑﺴﺘﻪ ﺑﻪ ﭘﺮدازﻧﺪه ﻣﻮرد اﺳﺘﻔﺎده، در زﯾﺮﺷﺎﺧﮥ ﻣﺮﺑﻮﻃﻪ در‬       ‫-‬
                                                              ‫ﺷﺎﺧﮥ ‪ arch‬ﻗﺮار ﺧﻮاﻫﺪ ﮔﺮﻓﺖ.‬




   ‫ﺗﺎﺑﻊِ )(‪ arch_pick_mmap_layout‬ﺑﻪ ﻣﺤﺾ اﯾﺠﺎد ﺣﺎﻓﻈﮥ‬
  ‫ﻣﺠﺎزي ﺑﺮاي ﻫﺮ ﭘﺮوﺳﻪ ﺻﺪا زده ﺷﺪه و ﺗﻨﻈﯿﻤﺎت ﻣﺮﺑﻮﻃﻪ را اﻧﺠﺎم‬            ‫ﺑﺴﺘﻪ ﺑﻪ ﺑﺮﺧﯽ ﻓﻠﮓ ﻫﺎ و ﭘﺎراﻣﺘﺮ‬
                          ‫ﻣﯽ دﻫﺪ‬                                        ‫ﻫﺎي ﭘﺮوﺳﮥ ﻓﺮاﺧﻮاﻧﺪه ﺷﺪه، اﯾﻦ‬
                                                                     ‫ﺗﺎﺑﻊ، )(‪ mmap_legacy_base‬و‬
                                                                       ‫ﯾﺎ )(‪ mmap_base‬را ﻓﺮاﺧﻮاﻧﯽ‬
                                                                                 ‫ﻣﯽ ﻧﻤﺎﯾﺪ.‬
‫‪ ASLR‬در )(‪mmap‬‬




‫ﺗﺎﺑﻊ ﻓﻮق، ﺑﺎ ﺑﺮرﺳﯽ ﻓﻠﮓ‪ ‬ﺳﺎزﮔﺎري در ﻣﻮرد ﭘﺮوﺳﻪ و ﻫﻤﭽﻨﯿﻦ در ﺻﻮرﺗﯽ ﮐﻪ ﻣﺤﺪودﯾﺘﯽ در اﺳﺘﻔﺎده از‬
‫ﻣﻨﺎﺑﻊ ﺑﺮاي اﯾﻦ ﭘﺮوﺳﻪ ﺗﻌﺮﯾﻒ ﻧﺸﺪه ﺑﺎﺷﺪ، ﭘﺮوﺳﮥ ﺟﺎري را ﺟﺰو ﭘﺮوﺳﻪ ﻫﺎي ﺟﺪﯾﺪ در ﻧﻈﺮ ﻣﯽ ﮔﯿﺮد ﮐﻪ‬
             ‫ﻧﯿﺎزي ﺑﻪ رﻋﺎﯾﺖ ﭘﯿﺶ ﺳﺎزﮔﺎري )ﺟﻬﺖ ﺗﺼﺎدﻓﯽ ﺳﺎزي( ﻧﺨﻮاﻫﺪ داﺷﺖ.‬
‫‪ ASLR‬در )(‪mmap‬‬


                 ‫در ﺻﻮرت ﻓﺮاﺧﻮاﻧﯽ ﻫﺮﯾﮏ از اﯾﻦ ﺗﻮاﺑﻊ، در‬
                 ‫ﺻﻮرﺗﯽ ﮐﻪ ﺑﻨﺎ ﺑﻪ ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﻫﺎ‬
                  ‫ﺑﺎﺷﺪ، از ﺗﺎﺑﻊ )(‪ mmap_rnd‬ﺑﺮاي اﯾﻦ‬
                        ‫ﻣﻨﻈﻮر اﺳﺘﻔﺎده ﺧﻮاﻫﺪ ﺷﺪ.‬
‫‪ ASLR‬در )(‪mmap‬‬




‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ‪ ،mmap‬در ﺗﺎﺑﻊِ )(‪ mmap_rnd‬و ﺑﺎ ﻫﻤﺎن ﺗﮑﻨﯿﮏ ﻣﻮرد اﺳﺘﻔﺎده در ﺗﺼﺎدﻓﯽ ﺳﺎزي‬
                  ‫‪) Stack‬ﺗﮑﻨﯿﮏ )(‪ (get_random_int‬اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬
    ‫ﺑﺮاي ﺳﯿﺴﺘﻢ ﻫﺎي 23 ﺑﯿﺘﯽ، 8 ﺑﯿﺖ ﺗﺼﺎدﻓﯽ ﺷﺪه و ﺑﺮاي ﺳﯿﺴﺘﻢ ﻫﺎي 46 ﺑﯿﺘﯽ، 82 ﺑﯿﺖ.‬
‫ﺟﻤﻊ ﺑﻨﺪي ‪ASLR‬‬

‫‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ ﭘﯿﺎده ﺳﺎزي ﻫﺎي ﻣﺨﺘﻠﻔﯽ دارد ﮐﻪ در ﮐﻠﯿﻪ ﭘﯿﺎده ﺳﺎزي ﻫﺎ، ﻓﻀﺎي آدرس ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺑﻪ ﺻﻮرت‬       ‫-‬

                                                                             ‫ﺗﺼﺎدﻓﯽ اﻧﺘﺨﺎب ﻣﯽ ﺷﻮد.‬

‫در ﺻﻮرﺗﯽ ﮐﻪ ﻣﺴﺌﻮل ﺳﯿﺴﺘﻢ ﻗﺼﺪ اﺳﺘﻔﺎده از ﭘﯿﺎده ﺳﺎزي ﻫﺎي ﮐﺎﻣﻞ ﺗﺮ ‪ ASLR‬را داﺷﺘﻪ ﺑﺎﺷﺪ، ﻣﯽ ﺑﺎﯾﺴﺖ وﺻﻠﻪ‬       ‫-‬

        ‫ﻫﺎي اﻣﻨﯿﺘﯽ اراﺋﻪ ﺷﺪه ﺗﻮﺳﻂ ﺷﺮﮐﺖ ﻫﺎﯾﯽ ﻧﻈﯿﺮ ‪ PaX‬را ﻧﺼﺐ ﻧﻤﺎﯾﺪ )ﮐﻪ در اﮐﺜﺮ ﻣﻮاﻗﻊ اﯾﻦ ﭼﻨﯿﻦ ﻧﯿﺴﺖ(.‬

              ‫در ‪ ASLR‬ﭘﯿﺶ ﻓﺮض ﻟﯿﻨﻮﮐﺲ، آدرس ﺑﺎرﮔﺰاري ﭘﺸﺘﻪ، ‪ heap‬و ‪ mmap‬ﺗﺼﺎدﻓﯽ ﺳﺎزي ﻣﯽ ﺷﻮد.‬             ‫-‬

‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﺑﺮ ﻣﺒﻨﺎي آدرس اوﻟﯿﻪ، زﻣﺎن روﺷﻦ ﺑﻮدن ﺳﯿﺴﺘﻢ، ﺗﻌﺪاد ﺳﯿﮑﻞ ﻫﺎي ﭘﺮدازﻧﺪه و ‪ PID‬ﭘﺮوﺳﻪ ﺟﺎري‬       ‫-‬

                                                                                      ‫اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬

‫ﺑﺮاي اﯾﻨﮑﻪ اﻃﻼﻋﺎت ﺑﻪ ﻣﯿﺰان ﺑﯿﺸﺘﺮي ﻏﯿﺮ ﻗﺎﺑﻞ ﭘﯿﺶ ﺑﯿﻨﯽ ﺑﺎﺷﺪ، از ﯾﮏ اﻟﮕﻮرﯾﺘﻢ ﻣﺨﺘﺼﺮ 4‪ MD‬ﻧﯿﺰ اﺳﺘﻔﺎده ﻣﯽ‬     ‫-‬

                                                                                              ‫ﺷﻮد.‬
‫ﺑﺎ ﺳﭙﺎس، ﻣﻨﺘﻈﺮ درﯾﺎﻓﺖ ﭘﯿﺸﻨﻬﺎدﻫﺎ و دﯾﺪﮔﺎه ﻫﺎي‬
         ‫ﺷﻤﺎ درﺑﺎرة اﯾﻦ اﺳﻼﯾﺪ ﻫﺴﺘﻢ:‬
  ‫‪Mohammad.golyani@gmail.com‬‬

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Linux Protections Against Exploits

  • 1. ‫ﺑﺮرﺳﯽ روﺷﻬﺎي ﺟﻠﻮﮔﯿﺮي از‬ ‫ﮐﺎرﮐﺮد اﮐﺴﭙﻠﻮﯾﺖ ﻫﺎ در ﻟﯿﻨﻮﮐﺲ‬ ‫ﻗﺴﻤﺖ ﯾﮑﻢ – ‪ASLR‬‬ ‫ﻣﺤﻤﺪ ﮔﻠﯿﺎﻧﯽ‬ ‫ﺧﺮداد 0931‬
  • 2. ‫ﻓﻬﺮﺳﺖ ﻣﻄﺎﻟﺐ‬ ‫ﻧﺤﻮه ﭘﯿﺎده ﺳﺎزي‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫-‬ ‫‪ ASLR‬ﭼﯿﺴﺖ؟‬ ‫-‬ ‫ﺑﺮرﺳﯽ ‪ ASLR‬در ‪Heap‬‬ ‫-‬ ‫ﻗﺒﻞ و ﺑﻌﺪ از ‪ASLR‬‬ ‫-‬ ‫ﺑﺮرﺳﯽ ‪ ASLR‬در ‪mmap‬‬ ‫-‬ ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫-‬ ‫ﺟﻤﻊ ﺑﻨﺪي‬ ‫-‬ ‫ﺑﺮرﺳﯽ ﺳﻮرس ﻓﺎﯾﻠﻬﺎي ‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ‬ ‫-‬
  • 3. ‫‪ASLR‬‬ ‫‪ ASLR‬ﯾﺎ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﻓﻀﺎي آدرس، روﺷﯽ اﺳﺖ ﮐﻪ در آن، ﻓﻀﺎﻫﺎي ﮐﻠﯿﺪي ﺑﺮﻧﺎﻣﻪ از ﺣﺎﻟﺖ‬ ‫-‬ ‫ﺛﺎﺑﺖ و از ﭘﯿﺶ ﺗﻌﯿﯿﻦ ﺷﺪه، ﺑﻪ ﺣﺎﻟﺖ ﺗﺼﺎدﻓﯽ ﺗﻐﯿﯿﺮ ﭘﯿﺪا ﻣﯽ ﮐﻨﺪ.‬ ‫ﺑﺎ وﺟﻮد ‪ ،ASLR‬ﻧﻔﻮذﮔﺮ ﻗﺎدر ﺑﻪ ﺗﻌﯿﯿﻦ آدرس ﺑﺮﮔﺸﺖ ﻣﻨﺎﺳﺐ )ﮐﻪ ﺑﻪ ﮐﺪ‪ ‬دﻟﺨﻮاه او اﺷﺎره ﮐﻨﺪ(،‬ ‫-‬ ‫ﻧﺨﻮاﻫﺪ ﺑﻮد.‬ ‫‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ از ﻧﺴﺨﮥ 21.6.2 )5002 ‪ (May‬ﺑﻪ ﺻﻮرت ﭘﯿﺶ ﻓﺮض در ﺣﺪ ﺿﻌﯿﻔﯽ‬ ‫-‬ ‫ﻗﺮار داده ﺷﺪه اﺳﺖ.‬ ‫‪ PaX‬و ‪ ،exec-shield‬ﭘﯿﺎده ﺳﺎزي ﻫﺎي ﻗﻮي ﺗﺮي از اﯾﻦ روش در ﻟﯿﻨﻮﮐﺲ اراﺋﻪ ﮐﺮده اﻧﺪ.‬ ‫-‬ ‫اﮔﺮﭼﻪ اﯾﻦ ﺗﮑﻨﯿﮏ در ﮐﺮﻧﻞ ﻟﯿﻨﻮﮐﺲ از ﺳﺎل 5002 ﺑﻪ ﺻﻮرت ﭘﯿﺶ ﻓﺮض ﻗﺮار ﮔﺮﻓﺖ وﻟﯽ‬ ‫-‬ ‫‪ ،PaX‬در ﺳﺎل 1002 ﯾﮏ ﭘﯿﺎده ﺳﺎزي ﮐﺎﻣﻞ از اﯾﻦ ﺗﮑﻨﯿﮏ را اراﺋﻪ ﮐﺮده ﺑﻮد.‬
  • 4. ‫ﻗﺒﻞ از ‪ASLR‬‬ ‫ﺑﺪون اﺳﺘﻔﺎده از ﺗﮑﻨﯿﮏ ‪ ،ASLR‬آدرس ﺷﺮوع ﭘﺸﺘﻪ از ﻗﺒﻞ ﻣﺸﺨﺺ ﺑﻮده و ﺑﻨﺎﺑﺮاﯾﻦ ﻣﯽ ﺗﻮان‬ ‫-‬ ‫آدرس ﻗﺮارﮔﯿﺮي ﺷﻠﮑﺪ را ﺑﺪﺳﺖ آورد.‬ ‫در اﯾﻦ ﺣﺎﻟﺖ، ﺗﻨﻬﺎ ﮐﺎﻓﯽ اﺳﺖ آدرس ﺷﺮوع ﺷﻠﮑﺪ را ﺑﺮ روي ‪ EIP‬ﺑﺎزﻧﻮﯾﺴﯽ ﻧﻤﺎﯾﯿﻢ:‬ ‫-‬ ‫آدرس ﺷﻠﮑﺪ‬ ‫آدرس ﺷﻠﮑﺪ‬ ‫آدرس ﺷﻠﮑﺪ‬ ‫آدرس ﺷﻠﮑﺪ‬ ‫آدرس ﺷﻠﮑﺪ‬ ‫آدرس ﺷﻠﮑﺪ‬ ‫ﺑﺎﻓﺮ آﺳﯿﺐ‬ ‫‪IP‬‬ ‫ﺷﻠﮑﺪ‬ ‫ﻓﻀﺎي ﺣﺎﻓﻈﻪ‬ ‫ﭘﺬﯾﺮ‬ ‫)‪(EIP‬‬ ‫ﺳـــــﺮرﯾــــــــﺰ‬ ‫ﺳﺎﯾﺰ واﻗﻌﯽ ﺑﺎﻓﺮ‬
  • 5. ‫ﻗﺒﻞ از ‪ASLR‬‬ ‫وﺿﻌﯿﺖ ﻓﻀﺎي آدرس ﯾﮏ ﺑﺮﻧﺎﻣﻪ )‪ (cat‬در دو ﺑﺎر اﺟﺮاي ﻣﺨﺘﻠﻒ ﻗﺒﻞ از ﻓﻌﺎل ﺳﺎزي ‪ ASLR‬ﺑﻪ‬ ‫-‬ ‫ﺻﻮرت زﯾﺮ ﻣﯽ ﺑﺎﺷﺪ:‬
  • 7. ‫ﻗﺒﻞ از ‪ASLR‬‬ ‫- وﺿﻌﯿﺖ آدرس ﻫﺎ در دو اﺟﺮا از ﻗﺮار زﯾﺮ اﺳﺖ:‬ ‫اﺠﺮای دوم‬ ‫اﺠﺮای ﮑﻢ‬ ‫ﻤﮑﺎن ﺣﺎﻓﻈﻪ‬ ‫000‪0x0804e‬‬ ‫000‪0x0804e‬‬ ‫‪HEAP‬‬ ‫000‪0xbffea‬‬ ‫000‪0xbffea‬‬ ‫‪Stack‬‬ ‫00076‪0x00b‬‬ ‫00076‪0x00b‬‬ ‫‪Libc‬‬ ‫00084080‪0x‬‬ ‫00084080‪0x‬‬ ‫ﺧﻮد ِ ﻓﺎ ﻞ اﺠﺮا ـ‬ ‫آدرس ﻫﺎ در ﻫﺮ دو اﺟﺮا ﯾﮑﺴﺎن اﺳﺖ‬
  • 8. ‫ﺑﻌﺪ از ‪ASLR‬‬ ‫- ﺑﺎ اﺳﺘﻔﺎده از ‪ ،ASLR‬آدرس ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ، از ﻗﺒﻞ ﻧﺎﻣﺸﺨﺺ ﺧﻮاﻫﺪ ﺑﻮد.‬ ‫- ﺑﻪ دﻟﯿﻞ ﺗﺼﺎدﻓﯽ ﺑﻮدن ﻣﺤﻞ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ، ﻧﻤﯽ ﺗﻮان آدرس ﺷﻠﮑﺪ را ﺑﻪ‬ ‫ﻫﻨﮕﺎم ﺑﺎرﮔﺰاري ﺑﺪﺳﺖ آورد.‬ ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬ ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬ ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬ ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬ ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬ ‫آدرس ﺷﻠﮑﺪ ﻣﻌﻠﻮم ﻧﯿﺴﺖ‬ ‫ﺑﺎﻓﺮ آﺳﯿﺐ‬ ‫‪IP‬‬ ‫ﺷﻠﮑﺪ‬ ‫ﻓﻀﺎي ﺣﺎﻓﻈﻪ‬ ‫ﭘﺬﯾﺮ‬ ‫)‪(EIP‬‬ ‫ﺑﺎ وﺟﻮد ﺳﺮرﯾﺰ، ﺑﻪ دﻟﯿﻞ ﻣﺸﺨﺺ‬ ‫)????????(‬ ‫ﻧﺒﻮدن آدرس ﺷﻠﮑﺪ، ﻧﻤﯽ ﺗﻮان ﺳﺎﯾﺰ واﻗﻌﯽ ﺑﺎﻓﺮ‬ ‫ﮐﻨﺘﺮل اﺟﺮا را ﺑﻪ آن اﻧﺘﻘﺎل داد‬
  • 9. ‫ﺑﻌﺪ از ‪ASLR‬‬ ‫وﺿﻌﯿﺖ ﻓﻀﺎي آدرس ﯾﮏ ﺑﺮﻧﺎﻣﻪ )‪ (cat‬در دو ﺑﺎر اﺟﺮاي ﻣﺨﺘﻠﻒ ﺑﻌﺪ از ﻓﻌﺎل ﺳﺎزي ‪ ASLR‬ﺑﻪ‬ ‫-‬ ‫ﺻﻮرت زﯾﺮ ﻣﯽ ﺑﺎﺷﺪ:‬
  • 11. ‫ﻗﺒﻞ از ‪ASLR‬‬ ‫وﺿﻌﯿﺖ آدرس ﻫﺎ در دو اﺟﺮا از ﻗﺮار زﯾﺮ اﺳﺖ:‬ ‫-‬ ‫اﺠﺮای دوم‬ ‫اﺠﺮای ﮑﻢ‬ ‫ﻤﮑﺎن ﺣﺎﻓﻈﻪ‬ ‫00060680‪0x‬‬ ‫0000‪0x08dd‬‬ ‫‪HEAP‬‬ ‫00061‪0xbfe‬‬ ‫000828‪0xbf‬‬ ‫‪Stack‬‬ ‫00076‪0x00b‬‬ ‫00076‪0x00b‬‬ ‫‪Libc‬‬ ‫00084080‪0x‬‬ ‫00084080‪0x‬‬ ‫ﺧﻮد ِ ﻓﺎ ﻞ اﺠﺮا ـ‬ ‫آدرس ‪ HEAP‬و ‪ STACK‬در ﻫﺮ اﺟﺮا ﻣﺘﻔﺎوت‬ ‫اﺳﺖ.‬
  • 12. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫‪ ،ASLR‬ﻣﮑﺎن ﻫﺎي ﻣﺨﺘﻠﻒ ﻗﺮار ﮔﯿﺮي ﯾﮏ ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻓﻈﻪ را ﺗﺼﺎدﻓﯽ ﻣﯽ ﻧﻤﺎﯾﺪ.‬ ‫-‬ ‫ﺑﺎ ﻫﺮ ﺑﺎر اﺟﺮاي ﺑﺮﻧﺎﻣﻪ، آدرس اﯾﻦ ﻣﮑﺎن ﻫﺎي ﺣﺎﻓﻈﻪ ﻧﺴﺒﺖ ﺑﻪ اﺟﺮاي ﻗﺒﻠﯽ ﻣﺘﻔﺎوت ﺧﻮاﻫﺪ ﺑﻮد.‬ ‫-‬ ‫‪ ،ASLR‬در ﻟﯿﻨﻮﮐﺲ از ﻧﺴﺨﮥ 21.6.2 درون ﮐﺮﻧﻞ ﻗﺮار داده ﺷﺪ.‬ ‫-‬ ‫ﻗﺒﻞ از 5002 )21.6.2(، ‪ ASLR‬ﺗﻮﺳﻂ ‪ PaX‬در ﺳﺎل 1002 ﻣﻌﺮﻓﯽ ﺷﺪه ﺑﻮد.‬ ‫-‬ ‫‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزي را ﺑﺮروي ﺑﺎﯾﻨﺮي ﻫﺎي ‪ ELF‬اﻧﺠﺎم ﻣﯽ دﻫﺪ. ﺑﻨﺎﺑﺮاﯾﻦ‬ ‫-‬ ‫ﻣﯽ ﺗﻮان اﯾﻦ ﭘﯿﺎده ﺳﺎزي را در ﺗﻮاﺑﻊِ ﮐﺘﺎﺑﺨﺎﻧﻪ اي ‪) ELF‬و ﺳﺎﯾﺮ ﺗﻮاﺑﻊ( ﺟﺴﺘﺠﻮ ﻧﻤﻮد.‬
  • 13. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫ﺑﺎ ﯾﮏ ﺑﺮرﺳﯽ ﮐﻠّﯽ در ﻓﺎﯾﻠﻬﺎي ﺳﻮرسِ ﻟﯿﻨﻮﮐﺲ، ﻣﯽ ﺗﻮان ﻗﺴﻤﺘﻬﺎﯾﯽ ﮐﻪ ﺗﺤﺖ ﺗﺄﺛﯿﺮ ‪ASLR‬‬ ‫-‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﺷﺪه اﻧﺪ را ﯾﺎﻓﺖ:‬
  • 14. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
  • 15. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫ﺑﺎ ﺑﺮرﺳﯽ دﻗﯿﻖ ﺗﺮ اﯾﻦ ﺳﻮرس ﻫﺎ ﻣﯽ ﺗﻮان اﻃﻼﻋﺎت ﺑﯿﺸﺘﺮي در ﻣﻮرد ﻧﺤﻮة ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﻫﺎ در‬ ‫-‬ ‫‪ ASLR‬ﺑﺪﺳﺖ آورد:‬ ‫در ﺻﻮرﺗﯽ ﮐﻪ ﺳﯿﺴﺘﻢ ﻓﺎﻗﺪ ‪ MMU‬ﺑﺎﺷﺪ )ﻧﻈﯿﺮ ﺑﺮﺧﯽ ﺳﯿﺴﺘﻢ ﻫﺎي ‪ ،(embedded‬ﺗﻌﺮﯾﻒ ﺗﺼﺎدﻓﯽ‬ ‫-‬ ‫ﺳﺎزي در ﻓﺎﯾﻞ ‪ include/mm.h‬ﺻﻮرت ﻣﯽ ﭘﺬﯾﺮد.‬ ‫‪ MMU‬ﯾﮏ واﺣﺪ ﺳﺨﺖ اﻓﺰاري اﺳﺖ ﮐﻪ در اﮐﺜﺮ ﺳﯿﺴﺘﻢ ﻫﺎ وﺟﻮد دارد.‬ ‫-‬ ‫ﻻزم ﺑﻪ ذﮐﺮ اﺳﺖ ﮐﻪ در ﺳﯿﺴﺘﻢ ﻫﺎي ﻟﯿﻨﻮﮐﺴﯽ )آﺧﺮﯾﻦ ﻧﺴﺨﻪ 93.6.2(، ﻗﺎﺑﻠﯿﺖ اﺳﺘﻔﺎده از ‪ MMU‬ﺑﻪ‬ ‫-‬ ‫ﺻﻮرت ﭘﯿﺶ ﻓﺮض ﻓﻌﺎل ﻣﯽ ﺑﺎﺷﺪ.‬ ‫ﮐﺎرﺑﺮد ‪ MMU‬ﯾﺎ واﺣﺪ ﻣﺪﯾﺮﯾﺖ ﺣﺎﻓﻈﻪ در ﺳﯿﺴﺘﻢ ﻫﺎي اﻣﺮوزي، ﮐﻨﺘﺮل دﺳﺘﺮﺳﯽ ‪ CPU‬ﺑﻪ واﺣﺪ ﺣﺎﻓﻈﻪ‬ ‫-‬ ‫اﺳﺖ ﮐﻪ اﯾﻦ اﻣﺮ ﺷﺎﻣﻞ ﺗﺒﺪﯾﻞ آدرس ﻣﺠﺎزي ﺑﻪ آدرس ﻓﯿﺰﯾﮑﯽ و ... ﻣﯽ ﺑﺎﺷﺪ.‬
  • 16. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
  • 17. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫ﺑﺴﯿﺎري از ﺗﻨﻈﯿﻤﺎت ﻓﻮق، ﮐﻨﺘﺮل ﻫﺎﯾﯽ اﺳﺖ ﮐﻪ ﺑﺴﺘﻪ ﺑﻪ ﻧﺤﻮه ﮐﺎﻣﭙﺎﯾﻞ ﮐﺮﻧﻞ اﻧﺠﺎم ﻣﯽ ﺷﻮد:‬ ‫-‬
  • 18. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬
  • 19. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫ﯾﮑﯽ از اﯾﻦ ﻣﻮارد در ﻓﺎﯾﻞ ‪ personality.h‬ﻗﺎﺑﻞ ﺗﻨﻈﯿﻢ اﺳﺖ.‬ ‫-‬ ‫اﯾﻦ ﻣﻘﺪار، اﻣﮑﺎنِ ﻏﯿﺮ ﻓﻌﺎل ﺳﺎزي ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ در ﻣﻮرد ﺗﺎﺑﻊ )(‪ mmap‬را ﻓﺮاﻫﻢ ﻣﯽ ﻧﻤﺎﯾﺪ:‬ ‫-‬
  • 20. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫ﻓﺎﯾﻞ ‪ /include/linux/sysctl.h‬ﺣﺎوي اﻃﻼﻋﺎت ﻣﺮﺑﻮط ﺑﻪ ﻓﺮاﺧﻮاﻧﯽ ﺗﺎﺑﻊ )(‪ sysctl‬ﻣﯽ ﺑﺎﺷﺪ.‬ ‫-‬ ‫اﯾﻦ ﺗﺎﺑﻊ ﻗﺎﺑﻠﯿﺖ ﺗﻨﻈﯿﻢ ﯾﮏ ﺳﺮي ﭘﺎراﻣﺘﺮ ﻫﺎي ﻓﻀﺎي ﮐﺮﻧﻞ را از ﻓﻀﺎي ﮐﺎرﺑﺮي ﻓﺮاﻫﻢ ﻣﯽ ﻧﻤﺎﯾﺪ.‬ ‫-‬ ‫از ﺟﻤﻠﻪ اﯾﻦ ﻗﺎﺑﻠﯿﺖ ﻫﺎ، ﻗﺎﺑﻠﯿﺖ‪ KERN_RANDOMIZE ‬ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﻣﺮﺑﻮط ﺑﻪ ﺗﺼﺎدﻓﯽ ﺳﺎزي‬ ‫-‬ ‫ﻓﻀﺎي ﺣﺎﻓﻈﮥ ﻣﺠﺎزي ﭘﺮوﺳﻪ اﺳﺖ.‬ ‫ﺑﺮاي ﺳﯿﺴﺘﻢ ﻫﺎي ‪ ISA UniCore‬و ‪ ،PKUnity SoC‬ﺗﺼﺎدﻓﯽ ﺳﺎزي ‪ ،heap‬در ﻓﺎﯾﻠﻬﺎي‬ ‫-‬ ‫‪ arch/unicore32/kernel/process.c‬و ‪arch/unicore32/include/asm/elf.h‬‬ ‫اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬
  • 21. ‫‪ ASLR‬ﭼﮕﻮﻧﻪ ﮐﺎر ﻣﯽ ﮐﻨﺪ؟‬ ‫ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎ ﺑﺮرﺳﯽ ﻓﺎﯾﻠﻬﺎﯾﯽ ﮐﻪ در آﻧﻬﺎ از ﺗﻮاﺑﻊ ﺗﺼﺎدﻓﯽ ﺳﺎزي اﺳﺘﻔﺎده ﺷﺪه، ﻣﯽ ﺗﻮان ﺑﻪ ﻧﺤﻮه‬ ‫-‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺳﺎﺧﺘﺎرﻫﺎي ﻣﺨﺘﻠﻒ ﻟﯿﻨﻮﮐﺴﯽ ﭘﯽ ﺑﺮد.‬ ‫ﻧﻈﺮ ﺑﻪ ﻓﺮاواﻧﯽ اﺳﺘﻔﺎده از اﯾﻦ ﻧﻮع ﺗﻮاﺑﻊ و اﺳﺘﻔﺎده از آن در ﻣﻌﻤﺎري ﻫﺎي ﻣﺨﺘﻠﻒ ),‪ARM, MIPS‬‬ ‫-‬ ‫‪TILE‬و ...( ﺑﻪ ﺑﺮرﺳﯽ ﻓﺎﯾﻠﻬﺎي ﻣﻮرد ﺗﻮﺟﻪ در 68‪ x‬ﺑﺴﻨﺪه ﻣﯽ ﻧﻤﺎﯾﯿﻢ.‬ ‫ﺑﺨﺶ ﻫﺎي ﻣﺨﺘﻠﻒ ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزي در ‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ 68‪ ،x‬از ﻗﺮار زﯾﺮ اﺳﺖ:‬ ‫-‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﭘﺸﺘﻪ.‬ ‫-‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺗﺎﺑﻊ )(‪.mmap‬‬ ‫-‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي در ‪.heap‬‬ ‫-‬ ‫ﺑﺪﯾﻦ ﺗﺮﺗﯿﺐ ﻫﺮ ﺑﺨﺶ دﯾﮕﺮي ﮐﻪ از ﻣﻮارد ﻓﻮق اﺳﺘﻔﺎده ﻧﻤﺎﯾﺪ ﻧﯿﺰ ﺗﺼﺎدﻓﯽ ﺧﻮاﻫﺪ ﺷﺪ.‬ ‫-‬
  • 22. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﭘﺸﺘﻪ، ﺑﻪ ﻫﻨﮕﺎم ﺑﺎرﮔﺰاري ﻓﺎﯾﻞ ﻫﺎ در ﺣﺎﻓﻈﻪ ﺻﻮرت ﻣﯽ ﭘﺬﯾﺮد.‬ ‫-‬ ‫ﺑﺎرﮔﺰاري ﺑﺎﯾﻨﺮي ﻫﺎ ﺗﻮﺳﻂ ﺗﺎﺑﻊ )(‪ load_elf_binary‬ﺻﻮرت ﻣﯽ ﭘﺬﯾﺮد ﮐﻪ در ﻓﺎﯾﻞ‬ ‫-‬ ‫‪ fs/binfmt_elf.c‬ﺗﻌﺮﯾﻒ ﺷﺪه.‬
  • 23. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫در اﯾﻦ ﺗﺎﺑﻊ، ﭘﺲ از ﺗﻨﻈﯿﻢ ﻧﻤﻮدن ﯾﮏ ﺳﺮي ﻓﻠﮓ ﻫﺎ، از ﺗﻮاﺑﻊ دﯾﮕﺮي ﺟﻬﺖ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﭘﺸﺘﻪ اﺳﺘﻔﺎده‬ ‫-‬ ‫ﺷﺪه اﺳﺖ:‬ ‫‪ : Current‬ﯾﮏ ﻣﺎﮐﺮو‬ ‫اﺳﺖ ﮐﻪ اﺷﺎره ﮔﺮي ﺑﻪ‬ ‫اﺳﺘﺮاﮐﭽﺮِ ﭘﺮوﺳﮥ ﺟﺎري‬ ‫ﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ.‬ ‫در ﺻﻮرﺗﯽ ﮐﻪ در ﻣﺸﺨﺼﺎت ﭘﺮوﺳﮥ ﺟﺎري )‪ ،(include/linux/personality.h‬ﻣﻘﺪار‬ ‫‪ ADDR_NO_RANDOMIZE‬ﺗﻨﻈﯿﻢ ﻧﺸﺪه ﺑﺎﺷﺪ و ﻣﺘﻐﯿﺮ ‪ randomize_va_space‬ﻧﯿﺰ ﺻﻔﺮ ﻧﺒﺎﺷﺪ، آﻧﮕﺎه‬ ‫ﻓﻠﮓ‪ ‬ﺗﺼﺎدﻓﯽ ﺳﺎزي )‪ (PF_RANDOMIZE‬ﻧﯿﺰ ﻋﻼوه ﺑﺮ ﺳﺎﯾﺮ ﻓﻠﮓ ﻫﺎ در ﻣﻮرد اﯾﻦ ﭘﺮوﺳﻪ ﺳﺖ ﺧﻮاﻫﺪ ﺷﺪ.‬ ‫ﺑﻪ ﻋﺒﺎرت ﺳﺎده ﺗﺮ، اﮔﺮ ﭘﺮوﺳﻪ ﻧﯿﺎزي ﺑﻪ آدرس ﻫﺎي ﺛﺎﺑﺖ ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ و ‪ ASLR‬ﻓﻌﺎل ﺑﺎﺷﺪ، ﻓﻀﺎي آدرس ﭘﺮوﺳﻪ،‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﻣﯽ ﺷﻮد.‬
  • 24. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫ﺳﭙﺲ ﺑﺎ ﻓﺮاﺧﻮاﻧﯽ ﺗﺎﺑﻊ )(‪ setup_arg_pages‬و ﭘﺎس دادن آدرس ‪ ToS‬ﺑﻪ آن، ﻓﻠﮓ ﻫﺎ و ﻣﺠﻮز ﻫﺎ، ﺑﻪ‬ ‫-‬ ‫روز رﺳﺎﻧﯽ ﺷﺪه، ﭘﺸﺘﻪ ﺑﻪ دﻟﺨﻮاه ﺟﺎﯾﮕﺰاري ﻣﺠﺪد ﺷﺪه و ﻣﻘﺪاري ﻓﻀﺎي اﺿﺎﻓﻪ ﺑﻪ آن اﻓﺰوده ﻣﯽ ﺷﻮد.‬ ‫در ﻫﻤﯿﻦ ﻣﺮﺣﻠﻪ از ﺗﺎﺑﻊ )(‪ randomize_stack_top‬اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد ﺗﺎ ﻣﺤﻞ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ ﺑﻪ‬ ‫-‬ ‫ﺻﻮرت ﺗﺼﺎدﻓﯽ اﻧﺘﺨﺎب ﺷﻮد.‬
  • 25. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫ﻋﻤﻠﯿﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺗﺎﺑﻊ )(‪) randomize_stack_top‬ﮐﻪ در ﻫﻤﯿﻦ ﻓﺎﯾﻞ ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ( اﻧﺠﺎم‬ ‫-‬ ‫ﻣﯽ ﺷﻮد.‬ ‫ﻣﻘﺪار ﺑﺮﮔﺸﺘﯽ ﺗﻮﺳﻂ اﯾﻦ ﺗﺎﺑﻊ، ﻋﺒﺎرت اﺳﺖ از ﯾﮏ آدرس ﮐﻪ اﯾﻦ آدرس آدرس ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ ﻗﻠﻤﺪاد‬ ‫-‬ ‫ﺧﻮاﻫﺪ ﺷﺪ.‬ ‫در اﯾﻦ ﺗﺎﺑﻊ، ﻣﺤﻞ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ، ﺑﻪ ﺻﻮرت ﺗﺼﺎدﻓﯽ ﺑﻪ اﻧﺪازة ‪ random_variable‬ﺟﺎﺑﺠﺎ ﻣﯽ ﺷﻮد.‬ ‫-‬ ‫‪ ،PAGE_ALIGN‬اﺷﺎره ﮔﺮ را‬ ‫ﺑﻪ اﺑﺘﺪاي ‪ PAGE‬ﺑﻌﺪي ﺗﻨﻈﯿﻢ‬ ‫ﻣﯽ ﻧﻤﺎﯾﺪ‬ ‫اﮔﺮ ﭘﺸﺘﻪ ﻫﻢ ﺟﻬﺖ ﺑﺎ آدرس ﻫﺎي ﺣﺎﻓﻈﻪ رﺷﺪ ﮐﻨﺪ، ﻣﻘﺪار‬ ‫‪ random_variable‬ﺑﻪ آدرﺳﯽ ﮐﻪ ﺗﻮﺳﻂ ‪ PAGE_ALIGN‬ﺑﺮﮔﺮداﻧﺪه‬ ‫ﻣﯽ ﺷﻮد، اﺿﺎﻓﻪ ﻣﯽ ﺷﻮد. و در ﻏﯿﺮ اﯾﻦ ﺻﻮرت اﯾﻦ ﻣﻘﺪار از آدرسِ‬ ‫‪ PAGE_ALIGN‬ﮐﻢ ﻣﯽ ﺷﻮد )ﻧﻈﯿﺮ ﺑﺮﺧﯽ ﻣﻌﻤﺎري ﻫﺎي ‪.(RISC‬‬
  • 26. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫ﻧﺤﻮه ﺗﺨﺼﯿﺺ ﻣﻘﺪار ﺑﻪ ﻣﺘﻐﯿﺮ ‪ random_variable‬در اﯾﻦ ﺗﺎﺑﻊ، ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ ﮐﻤﮑﯽ‬ ‫-‬ ‫)(‪ get_random_int‬و ﺳﭙﺲ ﺷﯿﻔﺖ دادن اﯾﻦ آدرس ﺑﻪ ﻣﯿﺰانِ ‪ PAGE_SHIFT‬اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬ ‫‪ PAGE_SHIFT‬در ﻣﻮرد 68‪ x‬ﺑﺮاﺑﺮ 21 ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ ﮐﻪ در ﻓﺎﯾﻞ زﯾﺮ ﻗﺎﺑﻞ ﻣﺸﺎﻫﺪ اﺳﺖ:‬ ‫-‬ ‫)‪.(arch/x86/include/asm/page_types.h‬‬ ‫ﻣﻘﺪار ﺑﺪﺳﺖ آﻣﺪه از )(‪ get_random_int‬ﺑﺎ ﻣﻘﺪار‬ ‫‪ STACK_RND_MASK‬ﺟﻤﻊ ﻣﻨﻄﻘﯽ ﺷﺪه و ﻧﺘﯿﺠﻪ ﻣﻘﺪارِ اوﻟﯿﮥ‬ ‫‪ random_variable‬را ﺗﺸﮑﯿﻞ ﻣﯽ دﻫﺪ )ﻗﺒﻞ از ﺷﯿﻔﺖ(.‬ ‫‪ STACK_RND_MASK‬ﻧﯿﺰ ﻗﺒﻞ از ﺗﻌﺮﯾﻒ ﺗﺎﺑﻊ ﻣﻘﺪار دﻫﯽ ﺷﺪه‬ ‫)ﻣﻘﺪار ﺛﺎﺑﺖ( و ﻣﺸﺨﺺ ﮐﻨﻨﺪة ﺑﯿﺖ ﻫﺎي ارزﺷﻤﻨﺪ در ﺗﺼﺎدﻓﯽ‬ ‫ﺳﺎزي ﻣﯽ ﺑﺎﺷﺪ.‬
  • 27. ‫‪ PAGE_SHIFT‬ﭼﯿﺴﺖ؟‬ ‫آدرس ﻫﺎي ﺣﺎﻓﻈﻪ اي ﮐﻪ در ﺳﻄﺢ ﮐﺮﻧﻞ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣﯽ ﮔﯿﺮد، ﻧﻈﺮ ﺑﻪ اﺳﺘﻔﺎده از وﯾﮋﮔﯽ‬ ‫-‬ ‫‪ ،PAGING‬ﻣﻀﺎرﺑﯽ از ﺣﺠﻢ ‪ PAGE‬ﻫﺎ ﻣﯽ ﺑﺎﺷﺪ.‬ ‫ﺣﺠﻢ ‪ PAGE‬ﻫﺎ در ‪ asm/page.h‬ﻗﺎﺑﻞ ﺗﻨﻈﯿﻢ اﺳﺖ )ﻣﺘﻐﯿﺮ ‪.(PAGE_SIZE‬‬ ‫-‬ ‫آدرس ﻫﺎي ﻣﻮرد اﺳﺘﻔﺎده در ﮐﺮﻧﻞ، ﺷﺎﻣﻞ دو ﻗﺴﻤﺖ ﭘﺮ ارزش و ﮐﻢ ارزش ﻣﯽ ﺑﺎﺷﺪ.‬ ‫-‬ ‫ﻗﺴﻤﺖ ﭘﺮ ارزش، ﺑﻪ آدرسِ ‪ PAGE‬و ﻗﺴﻤﺖ ﮐﻢ ارزش ﺑﻪ آﻓﺴﺖ درون ‪ PAGE‬ﺗﺨﺼﯿﺺ ﻣﯽ ﯾﺎﺑﺪ.‬ ‫-‬ ‫ﺑﺎ ﺷﯿﻔﺖ دادن اﯾﻦ آدرس ﻫﺎ و ﺑﺮون رﯾﺰي آﻓﺴﺖ‪ ،PAGE ‬ﻣﻘﺪاري ﮐﻪ ﺑﺎﻗﯽ ﺧﻮاﻫﺪ ﻣﺎﻧﺪ، اﺷﺎره ﮔﺮي ﺑﻪ‬ ‫-‬ ‫‪ PAGE‬ﻣﯽ ﺑﺎﺷﺪ.‬ ‫‪ ،PAGE_SHIFT‬ﻣﯿﺰان اﯾﻦ ﺷﯿﻔﺖ را در ﺳﯿﺴﺘﻢ ﻣﺸﺨﺺ ﻣﯽ ﮐﻨﺪ.‬ ‫-‬
  • 28. ‫‪ PAGE_SHIFT‬ﭼﯿﺴﺖ؟‬ ‫ﺑﺎ 21 ﺑﯿﺖ ﻣﯽ ﺗﻮان درون ‪ PAGE‬را آدرس دﻫﯽ ﻧﻤﻮد.‬ ‫212 = 6904 = ‪PAGE_SIZE‬‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫‪F‬‬ ‫‪G‬‬ ‫‪H‬‬ ‫‪I‬‬ ‫‪J‬‬ ‫‪K‬‬ ‫‪L‬‬ ‫‪M‬‬ ‫‪N‬‬ ‫‪O‬‬ ‫‪P‬‬ ‫‪Q‬‬ ‫آدرﺳﯽ ﮐﻪ ﺑﻪ ﺧﻮد‪ PAGE ‬اﺷﺎره ﻣﯽ ﮐﻨﺪ‬ ‫آدرسِ ﻣﺤﺘﻮﯾﺎت درون ‪PAGE‬‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫0‬ ‫‪A‬‬ ‫‪B‬‬ ‫‪C‬‬ ‫‪D‬‬ ‫‪E‬‬ ‫ﺑﺎ 21 ﺑﯿﺖ ﺷﯿﻔﺖ ﺑﻪ ﺳﻤﺖ راﺳﺖ، آدرس ‪ PAGE‬را ﺑﺪﺳﺖ ﺧﻮاﻫﯿﻢ آورد‬ ‫‪ PAGE_SHIFT‬ﺑﺮاﺑﺮ 21 ﻣﯽ ﺑﺎﺷﺪ.‬
  • 29. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫ﻧﺤﻮه ﺗﺼﺎدﻓﯽ ﺳﺎزي در ﺗﺎﺑﻊ )(‪ get_random_int‬ﮐﻪ در ﻓﺎﯾﻞ ‪ drivers/char/random.c‬ﺗﻌﺮﯾﻒ‬ ‫-‬ ‫ﺷﺪه از ﻗﺮار زﯾﺮ اﺳﺖ:‬ ‫ﭘﺲ از ﺗﻌﺮﯾﻒ آراﯾﮥ ‪ HASH‬و ﺗﻨﻈﯿﻢ آدرس آن‬ ‫)آدرسِ آراﯾﮥ ‪ ،(CPU‬ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ‬ ‫)(‪ ،get_keyptr‬ﻣﺘﻐﯿﺮِ ‪ keyptr‬ﻣﻘﺪار دﻫﯽ اوﻟﯿﻪ‬ ‫ﺷﺪه و ﺳﭙﺲ ﺑﺎ اﺳﺘﻔﺎده از آدرس آرﯾﮥ ‪ HASH‬ﺑﻪ‬ ‫ﻫﻤﺮاه ‪ PID‬ﭘﺮوﺳﻪ ﺟﺎري و ﺗﻌﺪاد ﺳﯿﮑﻞ ﻫﺎي‬ ‫ﭘﺮدازﻧﺪه و ﻣﺪت زﻣﺎن ﻓﻌﺎل ﺑﻮدن ﺳﯿﺴﺘﻢ، ﯾﮏ‬ ‫ﻣﻘﺪار ﺗﺼﺎدﻓﯽ در ﺧﺎﻧﻪ اول آراﯾﮥ ‪ HASH‬ﻗﺮار داده‬ ‫ﺷﺪه و ﺳﭙﺲ ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ‬ ‫)(‪ half_md4_transform‬اﯾﻦ ﻣﻘﺪار ﺑﺎز ﻫﻢ‬ ‫ﺗﺼﺎدﻓﯽ ﺗﺮ ﺷﺪه و ﺑﺎزﮔﺮداﻧﺪه ﻣﯽ ﺷﻮد‬
  • 30. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫ﺗﺎﺑﻊ )(‪ half_md4_transform‬ﮐﻪ در ﻓﺎﯾﻞِ ‪ lib/halfmd4.c‬ﺗﻌﺮﯾﻒ ﺷﺪه اﺳﺖ، ﯾﮏ‬ ‫-‬ ‫ﭘﯿﺎده ﺳﺎزي ﻣﺨﺘﺼﺮ از اﻟﮕﻮرﯾﺘﻢ 4‪ MD‬ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ در ﺳﻪ دورِ 8 ﺗﺎﯾﯽ و ﺑﺎ اﺳﺘﻔﺎده از ﻋﻤﻠﮕﺮ‬ ‫ﻫﺎي ‪ XOR‬و ‪ AND‬اﯾﻦ اﻟﮕﻮرﯾﺘﻢ را ﺑﺮروي ورودي ﺧﻮد اﻋﻤﺎل ﻣﯽ ﻧﻤﺎﯾﺪ.‬
  • 31. ‫‪ ASLR‬در ﭘﺸﺘﻪ‬ ‫ﺑﺪﯾﻦ ﺗﺮﺗﯿﺐ ‪ ASLR‬در ﭘﺸﺘﻪ ﺑﺎ اﺳﺘﻔﺎده از 4 ﻣﻘﺪار اﺻﻠﯽ و ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ 4‪) MD‬ﯾﮏ ﭘﯿﺎده ﺳﺎزي‬ ‫-‬ ‫ﻣﺨﺘﺼﺮ از اﯾﻦ ﺗﺎﺑﻊ( اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬ ‫اﯾﻦ ﻣﻘﺎدﯾﺮ اﺻﻠﯽ ﻋﺒﺎرﺗﻨﺪ از:‬ ‫-‬ ‫ﺷﻤﺎره ﭘﺮوﺳﮥ اﺟﺮا ﺷﺪه.‬ ‫-‬ ‫ﺗﻌﺪاد ﺳﯿﮑﻞ ﻫﺎي ﭘﺮدازﻧﺪه.‬ ‫-‬ ‫ﻣﺪت زﻣﺎن روﺷﻦ ﺑﻮدن ﺳﯿﺴﺘﻢ.‬ ‫-‬ ‫اﯾﻦ ﭘﯿﺎده ﺳﺎزي اﺑﺘﺪاﯾﯽ ‪ ASLR‬در ﮐﺮﻧﻞ ﻟﯿﻨﻮﮐﺲ از ﻧﺴﺨﮥ 21.6.2 ﻗﺮار داده ﺷﺪ.‬ ‫-‬ ‫ﺑﻨﺎﺑﺮاﯾﻦ ﺑﺎ درﻧﻈﺮ ﮔﺮﻓﺘﻦ ‪ STACK_RND_MASK‬ﮐﻪ ﺑﺎ ﺧﺮوﺟﯽ ﻣﻘﺪار ﺗﺼﺎدﻓﯽِ ﺗﻮﻟﯿﺪ ﺷﺪه از ﻣﻮارد ﻓﻮق،‬ ‫-‬ ‫ﻣﺎﺳﮏ ﻣﯽ ﺷﻮد )ر.ك. ‪ ،(Binfmt_elf.c‬ﻣﯽ ﺗﻮان ﭼﻨﯿﻦ ﻧﺘﯿﺠﻪ ﮔﺮﻓﺖ ﮐﻪ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﭘﺸﺘﻪ در ‪ِASLR‬‬ ‫ﭘﯿﺶ ﻓﺮض ﻟﯿﻨﻮﮐﺲ، ﺑﺮروي 11 ﺑﯿﺖ اﻧﺠﺎم ﺷﺪه و 7402 آدرس ﺗﺼﺎدﻓﯽ ﻣﺨﺘﻠﻒ ﺟﻬﺖ ﻗﺮار ﮔﯿﺮي ﭘﺸﺘﻪ‬ ‫ﺗﻮﻟﯿﺪ ﻣﯽ ﺷﻮد.‬
  • 32. ‫‪ ASLR‬در ‪heap‬‬ ‫اﯾﻦ ﭘﯿﺎده ﺳﺎزي ﻧﯿﺰ ﻫﻨﮕﺎم ﺑﺎرﮔﺰاري ﻓﺎﯾﻠﻬﺎي ﺑﺎﯾﻨﺮي اﻧﺠﺎم ﻣﯽ ﺷﻮد ﮐﻪ در ﻓﺎﯾﻞ ‪fs/binfmt_elf.c‬‬ ‫-‬ ‫ﻣﯽ ﺗﻮان ﺟﺰﺋﯿﺎت آن را ﻣﺸﺎﻫﺪه ﻧﻤﻮد.‬ ‫ﭘﺲ از ﭼﮏ ﮐﺮدنِ ﻓﻠﮓ ﻫﺎي ﭘﺮوﺳﻪ و ﺑﺮرﺳﯽ‬ ‫‪ ،PF_RANDOMIZE‬در ﺻﻮرﺗﯽ ﮐﻪ ﮔﺰﯾﻨﮥ‬ ‫‪ randomize_va_space‬ﻧﯿﺰ ﺗﻨﻈﯿﻢ ﺷﺪه ﺑﺎﺷﺪ،‬ ‫آدرس ﺷﺮوعِ ‪ ،heap‬ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊِ‬ ‫)(‪ arch_randomize_brk‬ﺗﺨﺼﯿﺺ داده ﺧﻮاﻫﺪ‬ ‫ﺷﺪ.‬
  • 33. ‫‪ ASLR‬در ‪heap‬‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ‪ heap‬در ﺗﺎﺑﻊ )(‪ arch_randomize_brk‬ﮐﻪ در ﻓﺎﯾﻞ‬ ‫-‬ ‫‪ arch/x86/kernel/process.c‬ﺗﻌﺮﯾﻒ ﺷﺪه، اﻧﺠﺎم ﻣﯽ ﭘﺬﯾﺮد:‬ ‫در اﯾﻦ ﺗﺎﺑﻊ از ﺗﺎﺑﻊِ ‪ randomize_range‬ﺑﻪ ﻣﻨﻈﻮر ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﺷﺮوع ‪heap‬‬ ‫اﺳﺘﻔﺎده ﻣﯽ ﺷﻮد.‬
  • 34. ‫‪ ASLR‬در ‪heap‬‬ ‫ﺗﺎﺑﻊ )(‪ randomize_range‬در ﻓﺎﯾﻞ ‪ drivers/char/random.c‬ﺗﻌﺮﯾﻒ ﺷﺪه و ﯾﮏ‬ ‫-‬ ‫آدرسِ ﺗﺼﺎدﻓﯽ ﺳﺎزي ﺷﺪه را ﺑﺮ ﻣﯽ ﮔﺮداﻧﺪ.‬ ‫در اﯾﻦ ﺗﺎﺑﻊ ﻧﯿﺰ ﻫﻤﺎﻧﻨﺪ ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﻫﺎي ﭘﺸﺘﻪ، از ‪ PAGE_ALIGN‬و‬ ‫)(‪ get_random_int‬اﺳﺘﻔﺎده ﺷﺪه ﮐﻪ در ﻧﺘﯿﺠﻪ ﯾﮏ آدرس ﺗﺼﺎدﻓﯽ ﺑﺮ ﻣﯽ ﮔﺮدد.‬
  • 35. ‫‪ ASLR‬در )(‪mmap‬‬ ‫ﺗﻨﻈﯿﻤﺎت ﺗﺼﺎدﻓﯽ ﺳﺎزيِ ‪ mmap‬در ‪ ،ASLR‬ﺑﺴﺘﻪ ﺑﻪ ﭘﺮدازﻧﺪه ﻣﻮرد اﺳﺘﻔﺎده، در زﯾﺮﺷﺎﺧﮥ ﻣﺮﺑﻮﻃﻪ در‬ ‫-‬ ‫ﺷﺎﺧﮥ ‪ arch‬ﻗﺮار ﺧﻮاﻫﺪ ﮔﺮﻓﺖ.‬ ‫ﺗﺎﺑﻊِ )(‪ arch_pick_mmap_layout‬ﺑﻪ ﻣﺤﺾ اﯾﺠﺎد ﺣﺎﻓﻈﮥ‬ ‫ﻣﺠﺎزي ﺑﺮاي ﻫﺮ ﭘﺮوﺳﻪ ﺻﺪا زده ﺷﺪه و ﺗﻨﻈﯿﻤﺎت ﻣﺮﺑﻮﻃﻪ را اﻧﺠﺎم‬ ‫ﺑﺴﺘﻪ ﺑﻪ ﺑﺮﺧﯽ ﻓﻠﮓ ﻫﺎ و ﭘﺎراﻣﺘﺮ‬ ‫ﻣﯽ دﻫﺪ‬ ‫ﻫﺎي ﭘﺮوﺳﮥ ﻓﺮاﺧﻮاﻧﺪه ﺷﺪه، اﯾﻦ‬ ‫ﺗﺎﺑﻊ، )(‪ mmap_legacy_base‬و‬ ‫ﯾﺎ )(‪ mmap_base‬را ﻓﺮاﺧﻮاﻧﯽ‬ ‫ﻣﯽ ﻧﻤﺎﯾﺪ.‬
  • 36. ‫‪ ASLR‬در )(‪mmap‬‬ ‫ﺗﺎﺑﻊ ﻓﻮق، ﺑﺎ ﺑﺮرﺳﯽ ﻓﻠﮓ‪ ‬ﺳﺎزﮔﺎري در ﻣﻮرد ﭘﺮوﺳﻪ و ﻫﻤﭽﻨﯿﻦ در ﺻﻮرﺗﯽ ﮐﻪ ﻣﺤﺪودﯾﺘﯽ در اﺳﺘﻔﺎده از‬ ‫ﻣﻨﺎﺑﻊ ﺑﺮاي اﯾﻦ ﭘﺮوﺳﻪ ﺗﻌﺮﯾﻒ ﻧﺸﺪه ﺑﺎﺷﺪ، ﭘﺮوﺳﮥ ﺟﺎري را ﺟﺰو ﭘﺮوﺳﻪ ﻫﺎي ﺟﺪﯾﺪ در ﻧﻈﺮ ﻣﯽ ﮔﯿﺮد ﮐﻪ‬ ‫ﻧﯿﺎزي ﺑﻪ رﻋﺎﯾﺖ ﭘﯿﺶ ﺳﺎزﮔﺎري )ﺟﻬﺖ ﺗﺼﺎدﻓﯽ ﺳﺎزي( ﻧﺨﻮاﻫﺪ داﺷﺖ.‬
  • 37. ‫‪ ASLR‬در )(‪mmap‬‬ ‫در ﺻﻮرت ﻓﺮاﺧﻮاﻧﯽ ﻫﺮﯾﮏ از اﯾﻦ ﺗﻮاﺑﻊ، در‬ ‫ﺻﻮرﺗﯽ ﮐﻪ ﺑﻨﺎ ﺑﻪ ﺗﺼﺎدﻓﯽ ﺳﺎزي آدرس ﻫﺎ‬ ‫ﺑﺎﺷﺪ، از ﺗﺎﺑﻊ )(‪ mmap_rnd‬ﺑﺮاي اﯾﻦ‬ ‫ﻣﻨﻈﻮر اﺳﺘﻔﺎده ﺧﻮاﻫﺪ ﺷﺪ.‬
  • 38. ‫‪ ASLR‬در )(‪mmap‬‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ‪ ،mmap‬در ﺗﺎﺑﻊِ )(‪ mmap_rnd‬و ﺑﺎ ﻫﻤﺎن ﺗﮑﻨﯿﮏ ﻣﻮرد اﺳﺘﻔﺎده در ﺗﺼﺎدﻓﯽ ﺳﺎزي‬ ‫‪) Stack‬ﺗﮑﻨﯿﮏ )(‪ (get_random_int‬اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬ ‫ﺑﺮاي ﺳﯿﺴﺘﻢ ﻫﺎي 23 ﺑﯿﺘﯽ، 8 ﺑﯿﺖ ﺗﺼﺎدﻓﯽ ﺷﺪه و ﺑﺮاي ﺳﯿﺴﺘﻢ ﻫﺎي 46 ﺑﯿﺘﯽ، 82 ﺑﯿﺖ.‬
  • 39. ‫ﺟﻤﻊ ﺑﻨﺪي ‪ASLR‬‬ ‫‪ ASLR‬در ﻟﯿﻨﻮﮐﺲ ﭘﯿﺎده ﺳﺎزي ﻫﺎي ﻣﺨﺘﻠﻔﯽ دارد ﮐﻪ در ﮐﻠﯿﻪ ﭘﯿﺎده ﺳﺎزي ﻫﺎ، ﻓﻀﺎي آدرس ﺑﺮﻧﺎﻣﻪ ﻫﺎ ﺑﻪ ﺻﻮرت‬ ‫-‬ ‫ﺗﺼﺎدﻓﯽ اﻧﺘﺨﺎب ﻣﯽ ﺷﻮد.‬ ‫در ﺻﻮرﺗﯽ ﮐﻪ ﻣﺴﺌﻮل ﺳﯿﺴﺘﻢ ﻗﺼﺪ اﺳﺘﻔﺎده از ﭘﯿﺎده ﺳﺎزي ﻫﺎي ﮐﺎﻣﻞ ﺗﺮ ‪ ASLR‬را داﺷﺘﻪ ﺑﺎﺷﺪ، ﻣﯽ ﺑﺎﯾﺴﺖ وﺻﻠﻪ‬ ‫-‬ ‫ﻫﺎي اﻣﻨﯿﺘﯽ اراﺋﻪ ﺷﺪه ﺗﻮﺳﻂ ﺷﺮﮐﺖ ﻫﺎﯾﯽ ﻧﻈﯿﺮ ‪ PaX‬را ﻧﺼﺐ ﻧﻤﺎﯾﺪ )ﮐﻪ در اﮐﺜﺮ ﻣﻮاﻗﻊ اﯾﻦ ﭼﻨﯿﻦ ﻧﯿﺴﺖ(.‬ ‫در ‪ ASLR‬ﭘﯿﺶ ﻓﺮض ﻟﯿﻨﻮﮐﺲ، آدرس ﺑﺎرﮔﺰاري ﭘﺸﺘﻪ، ‪ heap‬و ‪ mmap‬ﺗﺼﺎدﻓﯽ ﺳﺎزي ﻣﯽ ﺷﻮد.‬ ‫-‬ ‫ﺗﺼﺎدﻓﯽ ﺳﺎزي ﺑﺮ ﻣﺒﻨﺎي آدرس اوﻟﯿﻪ، زﻣﺎن روﺷﻦ ﺑﻮدن ﺳﯿﺴﺘﻢ، ﺗﻌﺪاد ﺳﯿﮑﻞ ﻫﺎي ﭘﺮدازﻧﺪه و ‪ PID‬ﭘﺮوﺳﻪ ﺟﺎري‬ ‫-‬ ‫اﻧﺠﺎم ﻣﯽ ﺷﻮد.‬ ‫ﺑﺮاي اﯾﻨﮑﻪ اﻃﻼﻋﺎت ﺑﻪ ﻣﯿﺰان ﺑﯿﺸﺘﺮي ﻏﯿﺮ ﻗﺎﺑﻞ ﭘﯿﺶ ﺑﯿﻨﯽ ﺑﺎﺷﺪ، از ﯾﮏ اﻟﮕﻮرﯾﺘﻢ ﻣﺨﺘﺼﺮ 4‪ MD‬ﻧﯿﺰ اﺳﺘﻔﺎده ﻣﯽ‬ ‫-‬ ‫ﺷﻮد.‬
  • 40. ‫ﺑﺎ ﺳﭙﺎس، ﻣﻨﺘﻈﺮ درﯾﺎﻓﺖ ﭘﯿﺸﻨﻬﺎدﻫﺎ و دﯾﺪﮔﺎه ﻫﺎي‬ ‫ﺷﻤﺎ درﺑﺎرة اﯾﻦ اﺳﻼﯾﺪ ﻫﺴﺘﻢ:‬ ‫‪Mohammad.golyani@gmail.com‬‬