• Linux Performance Monitoring

    這篇文章主要介紹如何運用 Linux 的兩個常用的工具 (vmstat & iostat)

    來得知目前 Linux 系統運作的效能,並且舉幾個例子說明如何解讀結果,

    並且進一步分析是 CPU , memory or  disk 效能瓶頸

     

    記憶體效能瓶頸  vmstat

    首先介紹的工具是 vmstat ,該工具可以分析目前系統記憶體與CPU等的狀況。

    $ vmstat    5

    vmstat1

     

    如何解讀 vmstat 的結果?

    Procs

    • Procs > r : 有多少的 process 等待 CPU 執行。如果 r  的數值大於 # of CPU,則表示 CPU 效能瓶頸。
    • Procs > b: 有多少 process 等待 I/O (磁碟、網路、使用者輸入等)

    Memory

    • swap > si:  how many blocks per second the operating system is swapping in from Disk.
    • swap > so:   how many blocks per second the operating system is swapping out to disk
    • 多半的情況下,這個值 si & so 皆為 0 ,如果超過 > 10 ,表示記憶體效能瓶頸,做很多的 page in/out 的動作。

     

    io

    • io > bi : how many blocks per second are read in from (bi) disk
    • io > bo: written out to (bo) disk
    • 這個值可以佐證得知是否為 Disk I/O 的問題

     

    system

    • in: the number of interrupts per second (in)
    • cs: the number of context switches per second (cs).

    cpu

    • us:  CPU time spent running user application
    • sy:  CPU running system (kernel) code
    • id:  CPU idle
    • wa: CPU waiting for I/O

     

    如何觀察 I/O 效能瓶頸 iostat

    $ iostat -dx 5

    iostat

     

    這個結果主要觀察幾個重點,想像 CPU 是收銀機櫃台:

    • avgqu-sz: 平均有多少客戶在等待結帳
    • await: 平均每個客戶等待結帳的時間 (mili sec)
    • svctm: 平均每個櫃台處理每個客戶的時間 (不包含等待時間)
    • %util: 超過 80% 表示 I/O 效能瓶頸

     

    接著讓我們看幾個個案

    CPU Bound

    vmstat_CPU

    用 vmstat 觀察之後,如果是 CPU 忙碌的情況,通常會有下列特徵

    • r: # of process waiting for CPU > # of  CPU,有許多的 process 等待 CPU 執行
    • CPU > us:  CPU 主要花在 user application 的比率很高,這個例子中, 89%, 90%, 88%

    補充說明什麼是 cs (context switch)

    如果 CPU 要執行的資料沒有在記憶體中,那麼該 process 就會到 disk 讀取,並且等待 disk 讀取完成。這個動作就叫做  context switch。

     

    iostat_cpu

    另外看到 iostat的狀態,從上面這個圖中,通常我們會閱讀 %util , 這個例子中 47%  45% 不算很高的磁碟讀取,但是也表示有一定的 disk I/O 。如果該值達到 100%,就表示磁碟效能瓶頸。

     

    I/O Bound 個案

    這個例子,我們執行 vmstat 與iostat,比較明顯的值是 iostat 中 %util 超過 100%

    補充說明的是:通常磁碟效能瓶頸多半會發生在 “讀取”  而非 “寫入”

    因為讀取,通常是要讀完之後,process 才能夠繼續進行接下來的工作

    而寫入,通常是可以延遲讀寫,或是批次等到一定時間或是量之後再寫入磁碟。

    IOBound

     

     

    Memory swap 的狀況

    如果有 memory swap 的情況,最直接的方式就是看 Swap > si/so

    這兩個值 si/so 如果 > 0 ,則表示有 memory swap 的狀況。

    接著可以觀察:

    • b: # of process waiting for disk IO
    • System/cs:  context switch

    因為磁碟讀取,會導致更多的 disk I/O wait 與 context switch 增加。

    • wa: CPU waiting on I/O

    這個例子中,可以看到 22 -> 47 -> 77  ,I/O wait 越來越增加的趨勢。

     

    vmstat_swap

     

     

    Idle的情況

    當電腦不忙碌的情況下,有幾個值會接近 0

    procs > b:  接近 0,因為沒有 process 執行

    procs > r:  接近 0,因為沒有 process 執行

    cpu > us/sy: 接近 0,因為不管是 user mode or system mode 都沒有 cpu 使用

    cpu > id: Idle 會接近 100。表示 CPU 100% idle

    vmstat Idle

     

    摘要

    CPU

    • 如果 r 的數值大於 # of CPU,則表示 CPU 效能瓶頸。
      us: CPU time spent running user application
      sy: CPU running system (kernel) code

    Memory

    • 多半的情況下,這個值 si & so 皆為 0

     

    Disk IO

    • in: the number of interrupts per second (in)
      cs: the number of context switches per second (cs).
      io > bi : how many blocks per second are read in from (bi) disk
      io > bo: written out to (bo) disk
    • %util: 超過 80% 表示 I/O 效能瓶頸

    Tags: , , , , ,

  • Bash Bug  CVE-2014-6271 來龍去脈

    ID-10079246

    Linux 比較不會中毒或是受駭客攻擊嗎?

    這次2014最具威脅性的安全漏洞就是針對 Linux 的漏洞

    http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271

    透過 Linux Sell Script 的安全漏洞

    駭客可以設定特別的環境變數之後,入侵電腦,執行任何的指令

    或是透過 Apache HTTP Server 執行任何指令

    只要在 http request 內容作一些特別的手腳,

    送到 Linux Appache server,也能夠執行任何的指令,

    因此這個漏洞讓許多的 Apache/Linux 架設的網站,都暴露於被駭客攻擊的風險,駭客可以透過 http、telnet 、或是其他方法攻擊該主機,執行駭客想要的程式碼

     

    哪些環境會受到這個弱點的攻擊呢?

    • 使用mod_cgi or mod_cgid的Apache Web Server
    • 使用OpenSSH sshd

     

     

    如何透過 Web Request 攻擊?

    駭客會組出一定的字元,測試該網站主機 (Apache/linux)是否受到這個弱點的影響,

    進而執行相關的程式碼,例如

    http-user-agent = BugSell_Scan 
    http-header[Cookie] = () { :; }; ping -c 3 201.12.210.1
    http-header[Host] = () { :; }; ping -c 3 201.12.210.1
    http-header[Referer] = () { :; }; ping -c 3 201.12.210.1
    說明
    將這些特別組的字元() { :; };  傳送到 Linux/Apache Web Server
    若該主機有Bash Bug 弱點,就會執行 之後的指令
    ping -c 3 201.12.210.1

    系統管理如何驗證

    對於系統管理者來說,如何驗證系統是否受到這樣的威脅呢?
    設定環境變數如下:
    $ env x=‘() { :;}; echo vulnerable’ bash -c “echo code executed due to the bug bash”
    如果該環境有 Bash Bug 的風險則印出:
    vulnerable code executed due to the bug bash
    如果該環境沒有風險,則印出:
    warning: x: ignoring function definition attempt bash: error importing function definition for `x’ this is a test

    系統管理如何修復更新?

    只要將 Linux Bash 更新最新版即可
    # yum update bash

    Windows 會受到影響嗎?

    由於這個 bash bug 主要的影響對象為 Linux Bash,
    目前對於 Windows 的影響尚未有具體的 case

    如何驗證我的網站是否已經受到攻擊?

    由於駭客會透過下列的 http request攻擊
    http-user-agent = BugSell_Scan 
    http-header[Cookie] = () { :; }; ping -c 3 201.12.210.1
    http-header[Host] = () { :; }; ping -c 3 201.12.210.1
    http-header[Referer] = () { :; }; ping -c 3 201.12.210.1
    因此可以用關鍵字 “() { :; }” 搜尋相關的 Apache log 是否有這樣的存取記錄
    例如
    200.10.1.1 – – [25/Sep/2014:08:00:00 +0000] “GET / HTTP/1.0″ 404 311 “() { :; }; ping -c 3 201.12.210.1 ; copy files….;”

    Shellshock 漏洞免費檢測工具

    http://www.trendmicro.tw/tw/security/shellshock-bash-bug-exploit/index.html

     

    最後建議:

    這次Bash Bug  CVE-2014-6271 影響的層面遠遠勝過之前的 openSSL 心在流血,幾乎所有的 Linux / Apache 都會受到影響,而且可以讓駭客任意執行任何指令,建議採與下列行動:

    1. 更新 Linux Bash 版本
    2. 設定 FireWall 阻擋特定關鍵字 “() { :; }
    3. 檢查 Apache Log 搜尋特定關鍵字 “() { :; }” ,看看該網站是否已經受到攻擊

    Tags: , , , , , , , , ,