庫注入在 Linux 上不如 Windows 上常見,但它依然是一個成績。上去望望它們若何事情的,和若何判別它們。
絕管在 Linux 體系上幾近見不到,但庫(Linux 上的同享方針文件)注入還是一個嚴肅的要挾。在采訪了來自 AT&T 公司 Alien 試驗室的 Jaime Blasco 后,我加倍意想到了個中一些進擊是何等的易實行。
在這篇文章中,我會先容一種進擊要領以及它的幾種檢測手腕。我也會供應一些鋪示進擊細節的鏈接以及一些檢測對象。起首,引入一個小小的違景信息。
同享庫漏洞
DLL 以及 .so 文件都是許可代碼(偶然候是數據)被不同的過程同享的同享庫文件。專用的代碼可以放進一個文件中使得每個必要它的過程可以從新使用而不是多次被重寫。這也增進了對專用代碼的治理。
Linux 過程常用這些同享庫。(顯示同享工具依靠的)ldd 下令可以對任何法式文件顯示其同享庫。這里有一些例子:
$ ldd /bin/date
linux-vdso.so.1 (0x00007ffc5f179000)
大樂透獎金分配 libc.so.6 => /lib/x86_64-linux-g今彩539開獎號碼預測nu/libc.so.6 (0x00007f02bea15000)
/lib64/ld-linux-x86-64.so.2 (0x00007f02bec3a000)
$ ldd /bin/netstat
linux-vdso.so.1 (0x00007ffcb67cd000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f45e5d7b000)
libc.so.6 =&大樂透玩法gt; /lib/x86_64-linux-gnu/libc.so.6 (0x00007f45e5b90000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f45e5b1c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f45e5b16000)
/lib64/ld-linux-x86-64.so.2 (0x00007f45e5dec000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f45e5af5000)
linux-vdso.so.1 (在一些體系上大概會有不同的名字)是內核主動映照到每個過程地址空間的文件。它的事情是找到并定位過程所需的其余同享庫。
對庫加載機制加以行使的一種要領是經由過程使用 LD_PRELOAD 情況變量。正如 Jaime Blasco 在他的研究中所詮釋的那樣,“LD_PRELOAD 是在過程啟動時加載同享庫的最簡略且最受迎接的要領。可以將此情況變量設置到同享庫的路徑,以便在加載其余同享工具之前加載該同享庫。”
為了鋪示有多簡略,我創立了一個極其簡略的同享庫而且偏財運生肖賦值給我的(之前不存在) LD_PRELOAD 情況變量。以后我使用 ldd 下令查望它關于經常使用 Linux 下令的影響。
$ export LD_PRELOAD=/home/shs/shownum.so
$ ldd /bin/date
linux-vdso.so.1 (0x00007ffe005ce000)
/home/shs/shownum.so (0x00007f1e6b65f000) <== 它在這里
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1e6b458000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1e6b682000)
注重,僅僅將新的庫賦給 LD_PRELOAD 就影響到了運轉的任何法式。
經由過程配置 LD_PRELOAD 指定的同享庫起首被加載(緊隨 linux-vdso.so.1),這些庫可以極大水平上改變一個過程。例如,它們可以重定向體系挪用到它們本人的資本,或者對法式運轉的舉動方式進行意想不到的變動。
osquery 對象可以檢測庫注入
osquery 對象(可以在 osquery.io下載)供應了一個特別很是奇特的查望 Linux 體系的方式。它根本大將操作體系視作一個高機能的瓜葛數據庫。然后,大概你會猜到,這就象征著它可以用來查問而且天生 SQL 表,該表供應了諸如如下的具體信息:
一個供應了過程信息的內核表鳴做 process_envs 。它供應了種種過程使用情況變量的具體信息。Jaime Blasco 供應了一個相稱龐大的查問,可以使用 osquery 辨認出使用 LD_PRELOAD 的過程。
注重,這個查問是從 process_envs 表中獵取數據。進擊 ID(T1055)參考 Mitre 對進擊要領的詮釋。
SELECT process_envs.pid as source_process_id, process_envs.key as environment_variable_key, process_envs.value as environment_variable_value, processes.name as source_process, processes.path as file_path, processes.cmdline as source_process_commandline, processes.cwd as current_working_六合彩全車directory, 'T1055' as event_attack_id, 'Process Injection' as event_attack_technique, 'Defense Evasion, Privilege Escalation' as event_attack_tactic FROM process_envs join processes USING (pid) WHERE key = 'LD_PRELOAD';
注重 LD_PRELOAD 情況變量偶然是正當使用的。例如,種種寧靜監控對象可能會使用到它,由于開發職員必要進行故障清除、調試或者機能闡發。然而,它的使用依然很少見,應該加以提防。
一樣值得注重的是 osquery 可以交互使用或者是作為按期查問的保衛過程往運轉。相識更多請查閱文章末尾給出的參考。
【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。
|