2015年元月最後幾天,glibc幽靈漏洞來襲,引用 中華財經網的報道 稍作介紹:html
Linux glibc函數庫日前曝出名爲GHOST(幽靈)的高危漏洞,漏洞編號是CVE-2015-0235。攻擊者可利用此漏洞實施遠程攻擊,並徹底控制目標系統。據360網絡攻防實驗室介紹,各大Linux發行商已經發布漏洞補丁,提醒企業網管作好服務器的安全更新。 Glibc是GNU發佈的libc庫,即c運行庫。它是Linux系統中最底層的API,幾乎其它任何運行庫都會依賴於glibc。glibc除了封裝Linux操做系統所提供的系統服務外,它自己也提供了許多其它一些必要功能服務的實現。 國外安全研究人員發現,glibc的__nss_hostname_digits_dots()函數有緩衝區溢出漏洞。這一漏洞既能夠本地利用,也能夠遠程利用。研究人員對漏洞進行了測試驗證:向目標郵件服務器發送特別構造的郵件,從而得到了遠程登陸Linxu系統的shell腳本。經過這種方式能夠繞過32位和64位系統上的全部現存保護機制(好比SSLR、PIE和NX)。 受glibc-2.2影響的GNU C函數最先版本是在2000年11月發佈的。這一漏洞曾在2013年5月被修補(在glibc-2.17 和glibc-2.18版本之間)。但因爲當時並無被認定爲安全威脅,包括Debian 七、Red Hat Enterprise Linux 6 & 七、 CentOS 6 & 7和Ubuntu 12.04在內的多數知名Linux版本在長達一年半的時間都沒有修補幽靈漏洞。 據360網絡攻防實驗室的安全專家介紹,Linux glibc幽靈漏洞最容易的攻擊入口是郵件服務器,和存在SSRF(Server-side Request Forgery)漏洞的WEB接口。值得慶幸的是,此漏洞目前尚未公開通用的攻擊代碼,這也給了服務器管理員們及時安裝補丁的寶貴時間。 目前Debian 、Red Hat Enterprise Linux、 CentOS和Ubuntu等Linux發行商已發佈了漏洞補丁,用戶只須要根據各發行版的安全公告升級glibc就能夠修補漏洞,避免受到黑客的幽靈攻擊。
兩天後,各大牛紛紛推出了本身的bug修復腳本,這裏我借用turnkeylinux的博客作相關業務服務器的更新:linux
1. 測試代碼 ghosttest.c git
/* ghosttest.c: GHOST vulnerability tester */ /* Credit: http://www.openwall.com/lists/oss-security/2015/01/27/9 */ #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #define CANARY "in_the_coal_mine" struct { char buffer[1024]; char canary[sizeof(CANARY)]; } temp = { "buffer", CANARY };
int main(void) { struct hostent resbuf; struct hostent *result; int herrno; int retval; /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/ size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1; char name[sizeof(temp.buffer)]; memset(name, '0', len); name[len] = '\0'; retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno); if (strcmp(temp.canary, CANARY) != 0) { puts("vulnerable"); exit(EXIT_SUCCESS); } if (retval == ERANGE) { puts("not vulnerable"); exit(EXIT_SUCCESS); } puts("should not happen"); exit(EXIT_FAILURE); }
編譯ghosttest.c生成可執行文件ghosttestshell
#gcc -o ghosttest ghosttest.c安全
2. 升級腳本 update.shbash
#!/bin/bash update_log="/root/glibc_update.log" rpm -qa | grep glibc >> $update_log yum clean all >> $update_log yum -y update glibc >> $update_log cd /tmp/ chmod 700 /tmp/ghosttest ./ghosttest >> $update_log ./ghosttest rm /tmp/ghosttest /etc/init.d/crond restart >> $update_log /etc/init.d/rsyslog restart >> $update_log /etc/init.d/acpid restart >> $update_log /etc/init.d/sshd restart >> $update_log
3. 後續操做就是重啓業務服務,balabala ^_^服務器
後記:網絡
內網一臺服務因爲安裝失誤,致使在磁盤的開始位置寫了兩個引導分區,故而每次重啓機器都引導出錯,報錯信息以下:app
報錯信息解釋一下:系統引導獲取grub.conf指定的img文件,img文件指定的磁盤分區表已經失效,故而每次重啓都因找不到對應的磁盤分區而失敗。ssh
解決方案:用光盤啓動,執行 grub-install --root-directory=/boot /dev/sda