%20%E6%BC%8F%E6%B4%9E%E7%9A%84%20Glibc%20%E8%A3%9C%E4%B8%81.png)
我已經看到很多關於 glibc 庫中新發現的漏洞,攻擊者可以利用該漏洞(儘管很困難)。
這是一篇關於這個主題的(火與硫磺)文章: http://arstechnica.com/security/2016/02/extremely-severe-bug-leaves-dizzying-number-of-apps-and-devices-vulnerable/
我了解漏洞的本質,但我必須承認,在閱讀修補程式解決方案時我有點迷失。似乎需要在機器上執行幾個步驟,但它說電子郵件中附有一個「補丁」。
補丁具體在哪裡?
https://sourceware.org/ml/libc-alpha/2016-02/msg00416.html
抱歉,我不是 Linux 系統工程師(aptitude 和 yum 是我的家鄉)。
不幸的是,我為客戶管理的一些網站主要在 Amazon Linux 上,我讀到這些網站也可能受到影響 - 讓我們假設它們是。
我只是想確保我保護了這些盒子,我可能有能力應用補丁,但我認為我對 glibc 郵件存檔感到困惑。
任何人都可以闡明它 - 即用我們低階前端 Web 開發人員可以理解的語言來表達它嗎?
我知道這是新的/不斷發展的,我確信未來幾天將會提供更好的文件。
提前致謝。
答案1
如果您使用任何支援良好的發行版,則不需要原始補丁本身。大多數發行版現在都已經更新了 libc,並將其推送到其儲存庫,您所需要做的就是使用套件管理器來升級 libc。 (如果他們現在還沒有這樣做,請認真考慮切換發行版。)Amazon Linux 確實就是這種情況。從他們的安全公告:
[C]使用 Amazon EC2 並已修改其配置以使用非 AWS DNS 基礎架構的客戶應立即依照其 Linux 發行版提供的指示更新其 Linux 環境。使用 AWS DNS 基礎架構的 EC2 客戶不受影響,無需採取任何操作。
對於使用 Amazon Linux 且已修改其配置以使用非 AWS DNS 基礎架構的 Amazon EC2 客戶:
CVE-2015-7547 的修復程式已推送到 Amazon Linux AMI 儲存庫,嚴重程度評級為「嚴重」。在 2016 年 2 月 16 日或之後使用預設 Amazon Linux 設定啟動的執行個體將自動包含此 CVE 所需的修復。
如果您想查看補丁,請查看diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
電子郵件中以以下內容開頭的部分:
CVE-2015-7547
2016-02-15 Carlos O'Donell
[BZ #18665]
* resolv/nss_dns/dns-host.c (gaih_getanswer_slice): Always set
*herrno_p.
(gaih_getanswer): Document functional behviour. Return tryagain
if any result is tryagain.
* resolv/res_query.c (__libc_res_nsearch): Set buffer size to zero
when freed.
* resolv/res_send.c: Add copyright text.
(__libc_res_nsend): Document that MAXPACKET is expected.
(send_vc): Document. Remove buffer reuse.
(send_dg): Document. Remove buffer reuse. Set *thisanssizp to set the
size of the buffer. Add Dprint for truncated UDP buffer.
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index a255d5e..47cfe27 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -1031,7 +1031,10 @@ gaih_getanswer_slice (const querybuf *answer, int anslen, const char *qname,
int h_namelen = 0;
if (ancount == 0)
- return NSS_STATUS_NOTFOUND;
+ {
+ *h_errnop = HOST_NOT_FOUND;
+ return NSS_STATUS_NOTFOUND;
+ }
...