• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • UNIX系統下的應急響應工具介紹

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    整個文章分三個系列介紹對于 OpenBSD, Linux, 或者Solaris系統的應急響應和取證過程中有用的工具。本部份聚焦在系統工具上,第二部份主要是介紹文件系統工具,最后部分則主要是 網絡 工具。本文用到的都是基于 OpenBSD 3.2, Debian GNU/Linux 3.0 (woody), R

    整個文章分三個系列介紹對于 OpenBSD, Linux, 或者Solaris系統的應急響應和取證過程中有用的工具。本部份聚焦在系統工具上,第二部份主要是介紹文件系統工具,最后部分則主要是網絡工具。本文用到的都是基于 OpenBSD 3.2, Debian GNU/Linux 3.0 (woody), RedHat 8.0 (psyche), and Solaris 9 (aka Solaris 2.9 or SunOS 5.9)的。

        依賴于你所使用的操作系統,本文討論的許多軟件可能不是默認安裝的。這種情況下,請根據文章后面的參考部分獲得這些工具。


    The Soapbox

        那些可以用來處理入侵威脅的工具不在本系列討論內容中,本文只覆蓋在入侵發生之后使用的工具。入侵通常是可以防止的。使用一些比如保證系統更新安裝最新補丁的技術,按照最小化服務配置系統,使用設計為安全的操作系統,使用能夠加固系統的核心補丁等等,這些來防范入侵的技術可能讓你根本就從來不會使用在本系列文章中介紹到的這些工具。

        讀者應該命令,一旦攻擊者獲得了系統控制權,這個系統就基本不應該被信任。我們討論的工具多數都操作在用戶方式。一個欺騙的核心模塊可能不會讓你正常地檢查系統,比如,這個系統已經被入侵的情況下。這些欺騙的模塊會采用多種辦法來隱藏自己,比如根據系統設計來讓自己在系統運行的時候不能輕易檢測到。這意味著,你不應該相信你使用的那些工具的輸出結果。這意味著在響應入侵事件中,應該采取懷疑、研究和謹慎的方式。

        你用于分析系統的工具應該是你可以去信任,而且沒有被修改的。下面討論了一些技術,比如將工具保存在離線的只讀介質中,這樣,你就更可以信賴,而不是那些在已經被入侵的系統上的二進制程序。

        你已經做了所有正確的事情,可以進行下面的一些練習,你的系統已經被入侵了?,F在怎么辦呢?


    Breaking Out the Toolbelt

        現在首先應該檢查那些我們后面需要用到的工具。這里不說man(1)提供的信息,特別是因為命令參數因為系統不同而不同。檢查這樣的信息是留給讀者的一種練習。

        vmstat - 這是可以快速察看內存、CPU和磁盤子系統的命令。vmstat 通常執行一個短時間,以便可以察看子系統利用的趨勢。vmstat 經??梢栽谙到y性能有一些問題的時候幫助我們知道哪些地方應該去深究。

        mpstat - 這個命令在Linux和Solaris上都有,可以用它察看處理器利用的統計。mpstat 提供一個選項,允許在多處理器系統中察看指定CPU的統計。vmstat 沒有這個功能。

        iostat - 顯示比vmstat更詳細的跟子系統相關的統計信息。

        sar,sa,lastcomm,last - 這些是檢查歷史數據和一些近來的系統事件。sar是一個Solaris和Linux的系統性能分析工具。這些可以用于檢查的性能數據類似于vmstat, mpstat和 iostat的顯示。 sar的數據是一段時間保存的內容,因此可以察看過去的信息。 lastcomm可以現在系統最近被執行的命令。這些可以用在系統審計中。sa 可以在*BSD和Linux中找到,它給用戶在系統審計中更多的選項來收集信息。

        ps - 立足于進程狀態,用于顯示系統執行的進程和他們的信息。

        top - 顯示的信息同ps接近,但是top可以了解到CPU消耗,可以根據用戶指定的時間來更新顯示。

        lsof - 列舉打開的文件,顯示系統當前打開的所有文件。Unix系統的所有東西幾乎都可以看作是文件,因此lsof也顯示了系統的狀態中有重要意義的內容。

        file - 判斷文件是什么,不同的文件格式可以16進制的形式現實文件的內容

        readelf - 顯示二進制文件的ELF(可執行鏈接和格式)頭的細節。這些內容可以判斷可執行提供的函數。

        od - 以用戶指定的格式輸出文件內容。od對于在文件內容中有一些解釋的情況下察看原始內容是有幫助的。

        ldd - 讀取ELF頭的內容,并顯示可執行文件依賴的對象庫。
        
        string - 現實文件中的ASCII字符串。對于在二進制文件中查找其中可讀的字符串是非常有用處的。

        find - 用于在文件系統中查找指定的對象。

        strace - 這個工具開始或者附加到一個當前運行的進程中,顯示這個進程所作的所有系統調用。這可以用來判斷程序運行的行為,并且來決定是否是合適的程序。strace 存在于Linux上。在 Solaris上是truss, *BSD提供的ktrace可以達到相似的功能。

        sudo - 可以讓管理員給用戶以其他用戶的權限執行命令的能力,而不用給該用戶密碼。

        grep - 用于按照用戶指定的模式查詢。 grep用匹配規則。

        less - 頁面調度程序,用來按頁顯示文本。

        在參考部分中的"CD-ROM and Floppy distributions"[3]中,一些站點介紹了怎么編譯這些工具以便用于不同的操作系統,并放置在CD-ROM?,F在,開始檢查運行的系統了。


    運氣就是在機會面前有所準備

        運氣對于技術來說,并不是可求解的。攻擊者可以采用很多方法來危及OS的安全。威脅系統安全的漏洞可能是OS提供商,也可以是那些應用軟件。當漏洞還沒有大面積公布,或者還沒有讓它的相關提供商自己知道的時候,攻擊者已經在IRC里面知道那種系統可以被入侵了。作為一個安全管理員,你必須在這場游戲中表現一直出色。但是,攻擊者則只需要一次就足夠。

        然而,你需要做許多前期的準備工作。你應該有一個應急響應的策略。你必須有一張CD-ROM或者軟盤什么的,來存儲檢查系統中需要的工具,而不是使用被入侵的系統中的工具。如果正使用軟盤,讓他們處于寫保護模式,你可以在取證[5]中獲得非常優秀的資源。

        現在回到機器上。把事件響應的日期和時間都紀錄在記錄本上。并且紀錄采取的每一步的所有細節和時間。裝載CD-ROM或者軟盤,并且使用紀錄在這些介質上的軟件,緊記按照易失性的順序[6]保存相關的信息到安全的地方。

        按照易失性順序的重要原因是因為入侵事件發生后與之相關信息的數量和自量都將隨時間增加而迅速減少。那些經驗豐富的攻擊者制造的事件則可能讓曲線更陡,下降速度更快。


    了解自己

        可能在入侵事件之前,你已經在系統上花費了大量時間。你了解這些系統的里里外外,進行了相當多的文檔工作,并且做了備份。在系統上,開啟了進程審計(或者*BSD的系統審計),進行了系統實時數據(sadc[8])來保存系統的性能數據。管理日志的時候,可能沒有足夠的空間來頻繁存儲這些數據,你可以發送syslog數據到安全的日志服務器上。

        你接到webmaster的電話,他發現某個web服務器上CPU負載很高,而這個服務器每天的瀏覽量僅僅幾千而已。webmaster確信服務器存在有什么問題。

        vmstat 和 mpstat (只在*BSD系統上) 表明CPU被用戶空間的一個或者多個進程消耗掉了,但是內存和I/O子系統還沒有大量使用。 iostat 也顯示出磁盤系統不正常。


    $ vmstat  1 4
       procs                      memory    swap          io     system         cpu
    r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
    1  0  0    376   7756  29772 570960   0   0     7     3  441   397  87   5   8
    5  0  0    376   6728  29772 570960   0   0     0     0  498  1249 100   0   0
    6  0  0    376   7240  29772 570960   0   0     0     0  652  1563  97   3   0
    6  0  0    376   7604  29772 570960   0   0     0     0  536  1323  97   3   0
    $ mpstat 1 4
    20:51:21     CPU   %user   %nice %system   %idle    intr/s
    20:51:22     all  100.00    0.00    0.00    0.00    479.00
    20:51:23     all  100.00    0.00    0.00    0.00    496.00
    20:51:24     all  100.00    0.00    0.00    0.00    499.00
    20:51:25     all   97.00    0.00    3.00    0.00    481.00
    Average:     all   98.00    0.60    1.40    0.00    486.60
    $ iostat -dk 1 4
    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
    dev3-0            0.00         0.00         0.01         73       1296
    dev3-0            0.00         0.00         0.00          0          0
    dev3-0            0.00         0.00         0.00          0          0
    dev3-0            0.00         0.00         0.00          0          0

        
        sar (*BSD的sa) 顯示CPU從早些晚上 03:17 就開始被使用。 lastcomm 顯示FTP客戶端在03:17以root運行了幾次, last 這個命令顯示最近的登錄,沒有顯示出這個時間段有 root 從什么地方登錄進來。另外,這個服務器又使用 sudo來管理root權限。這里有兩個系統管理員賬號可以用 root登錄,但是他們并沒有登錄過,特別是在 AM 3這個時間附近。根據這一點,你決定使用CD上準備好的二進制工具?,F在運行 top -d1,并且發現apache這個進程占用了100%的CPU。

        現在用 grep 檢查apche的錯誤日志,這個GNU工具可以有更多有用的參數,-A, -B和-C 可以讓你指定想從哪一個匹配的行的開始,之前或者周圍看。 grep可以通過-E 來使用擴展的模式匹配表達式??梢詸z查系統日志。但是并沒有在這些日志里面檢查到什么奇怪的地方。

        現在繼續進行檢查。運行 ps -eflcyL (Solaris 9),ps -eflcym --headers (Deb3.0, RH8.0)或者 ps auwxhkwvl(OBSD 3.2)。找到進程 apache,而這一次發現有問題了。這里只有一個apache進程和多個httpd進程。httpd實際上是Apache服務器,因為httpd是在apachectl文件執行的二進制,運行的apache是前派生的,因此,如果二進制文件被重命名為"apache",那么也應該有多個進程存在。這就是問題所在。

        使用 lsof -p <pid>[9] ,發現這個apache進程打開了一個叫 john.pot 的文件。立刻通過google,查詢這是一個叫“John the Ripper”的密碼破解工具,正是這個東西讓CPU滿負荷了。

        現在來檢查這個所謂的apache程序。通過 file apache,表明這個文件是ELF可執行的?,F在進行進一步的挖掘,執行 readelf -a apache,確信這是一個ELF可執行程序。 od -xc apache | less 現實ELF魔法數字(7f454c46),ldd顯示apache連接的共享對象庫比實際的httpd進程小一些,這里面一定有文章:


    $ ldd ./apache
            libc.so.6 => /lib/libc.so.6 (0x4001f000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    $ ldd /usr/sbin/httpd
            libm.so.6 => /lib/libm.so.6 (0x7002c000)
            libcrypt.so.1 => /lib/libcrypt.so.1 (0x700c4000)
            libdb.so.2 => /lib/libdb.so.2 (0x70100000)
            libdb2.so.2 => /lib/libdb2.so.2 (0x70120000)
            libexpat.so.1 => /usr/lib/libexpat.so.1 (0x70180000)
            libdl.so.2 => /lib/libdl.so.2 (0x701b4000)
            libc.so.6 => /lib/libc.so.6 (0x701c8000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x70000000)


         執行: strings | grep -i john,顯示如下:

    $ strings apache | grep -i john
    /usr/share/john/password.lst
    /etc/john.ini
    ~/john.pot
    /etc/john.ini
    john
    John the Ripper  Version 1.6  Copyright (c) 1996-98 by Solar Designer
    /etc/john.ini
    /etc/john.ini
    /etc/john.ini


         用 strace -fp 'pgrep apache'(Deb3.0, RH8.0), truss -fp 'pgrep apache'(Sol9),或者 ktrace -dip <pid> (OBSD 3.2),來察看apache進程到底在做什么。


    # strace -fp `pgrep apache`
    --- SIGALRM (Alarm clock) ---
    sigreturn()                             = ? (mask now [])
    --- SIGALRM (Alarm clock) ---
    sigreturn()                             = ? (mask now [])
    --- SIGALRM (Alarm clock) ---
    sigreturn()                             = ? (mask now [])
    _llseek(4, 65536, [65536], SEEK_SET)    = 0
    read(4, "YUzZ41ZA1dkmnrZDaZElnrd"..., 4096) = 4096
    read(4, "MaTe\n(>%\n&10"..., 4096) = 4096
    read(4, "IPVm(%L((H(/CMRBNTUWcr(5"..., 4096) = 4096
    read(4, "fgqBCh26oBDaikmoyBEanreltc"..., 4096) = 4096
    read(4, "agNlNjN69NfN!dsN)"..., 4096) = 4096
    read(4, "_9LRMTes_:6Z_>&%_?)Cw_"..., 4096) = 4096
    read(4, "%Antv%Cr%Dd%Gg%Ke%Lls"..., 4096) = 4096
    read(4, "rtlpbdgiuvGBeamGDuyGEnert"..., 4096) = 4096
    read(4, "We6hilwRYasdpcgilmnoS05cS"..., 4096) = 4096
    read(4, "68jDxMEBTIRNLAGSKCPOqVHFUZWJ$%#^"..., 4096) = 4096
    read(4, "22In22Ke22LiEe22Ma22NEe22P"..., 4096) = 4096
    read(4, "I5yI6eI7aeIAnmrs9t67dhlpuz"..., 4096) = 4096
    read(4, "Eprylsenbu9ak013ft!LcoxSFi9aey"..., 4096) = 4096
    read(4, "o149dlytwMbckr0u_Xixae01537926"..., 4096) = 4096
    read(4, "2-!NCLS-%RS-)ETDNS--M-"..., 4096) = 4096
    read(4, "!*bfgkGJuGLeiayYsGMaAoegu"..., 4096) = 4096
    read(4, "UtsdbgmpyPWaPXyPY1!27sy.05"..., 4096) = 4096
    read(4, "w!9bAjp5clgkr068EFSYf$.?CJKLW]n"..., 4096) = 4096
    --- SIGALRM (Alarm clock) ---
    sigreturn()                             = ? (mask now [])


        用 grep -n 在John the Ripper的源代碼中找到在 crk_password_loop()函數中有一個叫 sig_timer_emu_tick()的函數,它在timer_emu_max到達之后產生 SIGALRM。這就是 strace 顯示的SIGALRM。通過 lsof -p 'pgrep apache'來檢查哪個文件同讀的文件描述符fd 4在讀取數據,以及fd 4相關聯的叫all.chr的文件。察看 john.ini 文件,找到所引用的 all.chr 文件。

        所有跡象表明,這的確是一個密碼破解工具, John the Ripper。因此,無論是你還是其他的任何管理員安裝了這個工具,它運行起來的時候,就會好像web 服務器被入侵了。


    結論

        在下一篇文章中,我們會繼續進行研究在Webserver使用文件系統工具的時候到底發生了什么事情。記住,面對任何威脅最好的準備是做好預防。當入侵真正發生的時候,你要做很多工作去了解你的系統,設置策略,和實施應急響應的技術,你的優勢越明顯,那么控制和根除威脅就更能實現。


    [下面參考中的連接請察看原文檔。]
    References

    [1] Acquiring/Installing software
    &#8226;    OpenBSD ports system
    &#8226;    FreeBSD ports system
    &#8226;    Freeware for Solaris
    &#8226;    HOWTO install packages on a Debian system
    &#8226;    Installing packages on a RedHat system
    &#8226;    GNU binutils (readelf)
    &#8226;    lsof
    &#8226;    top
    &#8226;    sudo
    [2] Kernel Modules Countermeasures
    &#8226;    Dino Dai Zovi's paper on kernel rootkits
    &#8226;    Sealing the linux kernel
    &#8226;    gr-security linux kernel patch
    &#8226;    LIDS linux kernel patch
    [3] CD-ROM and Floppy distributions
    &#8226;    Here is a link that explains how to make CD-ROMs on Linux: http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html
    &#8226;    F.I.R.E. (Forensic and Incident Response Environment) Bootable CD
    &#8226;    Knoppix Linux
    &#8226;    How to Make a Bootable, Full System OpenBSD CD-ROM
    &#8226;    LNX-BBC mini-linux distribution
    &#8226;    Google's Tiny Linux distributions list
    [4] Incident Response Policy
    &#8226;    Handbook for Computer Security Incident Response Teams
    &#8226;    Expectations for Computer Security Incident Response
    &#8226;    Recommended Internet Service Provider Security Services and Procedures
    &#8226;    Recovering from an Incident (CERT)
    &#8226;    Security Practices and Implementations (CERT)
    &#8226;    
    [5] Forensics
    &#8226;    Incident response and Forensics Resources
    &#8226;    Forensics resources maintained by Dan Farmer
    &#8226;    Computer Forensics Resource Center
    &#8226;    
    [6] Order of Volatility
    &#8226;    Computer Forensics Analysis Class: Introduction, Pg. 14 (Dan Farmer & Wietse Venema)
    [7] Process aclearcase/" target="_blank" >ccounting
    &#8226;    Solaris 9 SysAdmin Guide: Resource Management and Network Services, Ch 7
    &#8226;    Enabling Process Accounting on Linux HOWTO
    &#8226;    OpenBSD sa(8) man page
    [8] System Activity Data Collector (sadc)
    &#8226;    sadc(8) Linux man page
    &#8226;    Solaris 9 SysAdmin Guide: Monitoring System Performance (Tasks), Ch 24
    [9] lsof alternatives
    Don't have lsof? These techniques might help.
    Solaris 9:
    1.    use psto find the pid of the process you're interested in.
    2.    run /usr/proc/bin/pfiles .
    3.    Look for the string 'ino:' in the output. The number that follows is the 'inode number'.
    4.    run find -inum <inode number>
    OpenBSD 3.2:
    1.    run fstat -v.
    2.    Look in the INUM column to find the the inode numbers that a particular process has open.
    3.    run find -inum <inode number>
    Poking around in /proc (Deb 3.0, RH 8.0):
    1.    ls -l /proc/<pid>/fd


    進一步研究

        下面的命令沒有在本系列中列出來,它們在分析系統的時候也非常有幫助:nm, size, ar, objdump, what(OBSD3.2), ltrace(Deb3.0, RH8.0), /usr/procebin/*(Sol9), w, who, 和 fuser.

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>