您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“怎么檢測(cè)Linux上的庫(kù)注入”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“怎么檢測(cè)Linux上的庫(kù)注入”這篇文章吧。
DLL 和 .so 文件都是允許代碼(有時(shí)候是數(shù)據(jù))被不同的進(jìn)程共享的共享庫(kù)文件。公用的代碼可以放進(jìn)一個(gè)文件中使得每個(gè)需要它的進(jìn)程可以重新使用而不是多次被重寫。這也促進(jìn)了對(duì)公用代碼的管理。
Linux 進(jìn)程經(jīng)常使用這些共享庫(kù)。(顯示共享對(duì)象依賴的)ldd
命令可以對(duì)任何程序文件顯示其共享庫(kù)。這里有一些例子:
$ ldd /bin/date linux-vdso.so.1 (0x00007ffc5f179000) libc.so.6 => /lib/x86_64-linux-gnu/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 => /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
(在一些系統(tǒng)上也許會(huì)有不同的名字)是內(nèi)核自動(dòng)映射到每個(gè)進(jìn)程地址空間的文件。它的工作是找到并定位進(jìn)程所需的其他共享庫(kù)。
對(duì)庫(kù)加載機(jī)制加以利用的一種方法是通過(guò)使用 LD_PRELOAD
環(huán)境變量。正如 Jaime Blasco 在他的研究中所解釋的那樣,“LD_PRELOAD
是在進(jìn)程啟動(dòng)時(shí)加載共享庫(kù)的很簡(jiǎn)單且非常受歡迎的方法??梢詫⒋谁h(huán)境變量配置到共享庫(kù)的路徑,以便在加載其他共享對(duì)象之前加載該共享庫(kù)?!?/p>
為了展示有多簡(jiǎn)單,我創(chuàng)建了一個(gè)極其簡(jiǎn)單的共享庫(kù)并且賦值給我的(之前不存在) LD_PRELOAD
環(huán)境變量。之后我使用 ldd
命令查看它對(duì)于常用 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)
注意,僅僅將新的庫(kù)賦給 LD_PRELOAD
就影響到了運(yùn)行的任何程序。
通過(guò)設(shè)置 LD_PRELOAD
指定的共享庫(kù)首先被加載(緊隨 linux-vdso.so.1),這些庫(kù)可以極大程度上改變一個(gè)進(jìn)程。例如,它們可以重定向系統(tǒng)調(diào)用到它們自己的資源,或?qū)Τ绦蜻\(yùn)行的行為方式進(jìn)行意想不到的更改。
osquery
工具(可以在 osquery.io下載)提供了一個(gè)非常獨(dú)特的查看 Linux 系統(tǒng)的方式。它基本上將操作系統(tǒng)視作一個(gè)高性能的關(guān)系數(shù)據(jù)庫(kù)。然后,也許你會(huì)猜到,這就意味著它可以用來(lái)查詢并且生成 SQL 表,該表提供了諸如以下的詳細(xì)信息:
運(yùn)行中的進(jìn)程
加載的內(nèi)核模塊
打開(kāi)的網(wǎng)絡(luò)鏈接
一個(gè)提供了進(jìn)程信息的內(nèi)核表叫做 process_envs
。它提供了各種進(jìn)程使用環(huán)境變量的詳細(xì)信息。Jaime Blasco 提供了一個(gè)相當(dāng)復(fù)雜的查詢,可以使用 osquery
識(shí)別出使用 LD_PRELOAD
的進(jìn)程。
注意,這個(gè)查詢是從 process_envs
表中獲取數(shù)據(jù)。攻擊 ID(T1055)參考 Mitre 對(duì)攻擊方法的解釋。
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
環(huán)境變量有時(shí)是合法使用的。例如,各種安全監(jiān)控工具可能會(huì)使用到它,因?yàn)殚_(kāi)發(fā)人員需要進(jìn)行故障排除、調(diào)試或性能分析。然而,它的使用仍然很少見(jiàn),應(yīng)當(dāng)加以防范。
同樣值得注意的是 osquery
可以交互使用或是作為定期查詢的守護(hù)進(jìn)程去運(yùn)行。了解更多請(qǐng)查閱文章末尾給出的參考。
你也能夠通過(guò)查看用戶的環(huán)境設(shè)置來(lái)定位 LD_PRELOAD
的使用。如果在用戶賬戶中使用了 LD_PRELOAD
,你可以使用這樣的命令來(lái)查看(假定以個(gè)人身份登錄后):
$ env | grep PRELOADLD_PRELOAD=/home/username/userlib.so
以上是“怎么檢測(cè)Linux上的庫(kù)注入”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。