对GitHub的审查和封锁

**對 GitHub 的審查和封鎖**的行動經常在多個國家發生，例如中華人民共和國、俄羅斯、印度、土耳其等。審查和封鎖包括但不限於 DNS 污染、中間人攻擊等方式。由於使用者量巨大，以及諸多使用者對開發資源的需求強烈，故相關封鎖常引發使用者和科技公司的強烈反應。

## 背景

GitHub 是一個基於 Git 的原始碼代管網站，主要用於儲存原始碼並用於專案管理。截止到 2015 年，GitHub 已有超過 1000 萬使用者和 2.4 億個 Git 倉庫。此外，GitHub 還提供了免費的貼上箱服務（Gist）和免費的網路空間 GitHub Pages。GitHub 許可協定禁止濫用 GitHub 的各項服務，保留了刪除內容的權力。此外，如果 GitHub 收到 DMCA 刪除通知，GitHub 也會刪除專案。

## 中華人民共和國

### 防火長城封鎖

#### DNS 污染

2013 年 1 月 20 日，中華人民共和國政府的防火長城利用 DNS 污染和關鍵詞過濾等手段封鎖 GitHub，令中國大陸的使用者無法正常存取。對此，李開復在新浪微博抗議，迅速引起廣大網友的關注，這條資訊更在三小時內被轉發逾 3 萬 2 千次。2013 年 1 月 23 日，GitHub 被解封，事件得以平息（但新疆地區的 Github 始終沒有解封，依然會受到 DNS 污染的影響）。

自 2014 年 11 月起，Github Gist 在中國大陸被封鎖，封鎖方式為 DNS 污染，至今未解除封鎖。

2019 年 10 月 29 日晚間，為 GitHub 提供代管原始碼原始檔案的域名（raw.githubusercontent.com）遭到 DNS 污染，後於同年 11 月起被短暫解封（但在同年 12 月份起被更換方式重新予以間歇性封鎖，並一直持續至今，詳見下文敘述）。

此外，一些代管在 Github Pages 上的部分網站（\*.github.io）也遭到了 DNS 污染，比如端點星。

#### 中間人攻擊

2013 年 1 月 26 日，有中國大陸的使用者在存取 GitHub 時發現憑證無效，經檢查發現，GitHub 的憑證變為了一自簽署的 X.509 憑證，生成時間為 2013 年 1 月 25 日，有效期一年，故有人推測 GitHub 疑似遭到了中間人攻擊。攻擊持續了約一個小時後停止，存取恢復正常。

2020 年 3 月 26 日，中國大陸多地使用者存取 GitHub Pages 時發現遭遇中間人攻擊，憑證變為一張通過私人 QQ 電子信箱自簽章的憑證，生成時間為 2019 年 9 月 26 日。部分地區遭受攻擊數小時後停止，但也有部分地區持續遭受攻擊 1-2 天且憑證變為了另一張使用 MyMail 自簽章的憑證。部分使用者稱同一時間京東也遭到了相同攻擊，Github 主站和部分子域名也遭到了攻擊，百度、必應更是在 3 月 24 日就遭到了該憑證攻擊，有第三方研究者指出影響的域名多達 15462 個，且劫持早在 3 月 21 日就已開始。尚無明確證據證明此次事件與審查有關。

#### DDoS 攻擊

GitHub 從 2015 年 3 月 26 日凌晨 2 時左右（世界協調時間，以下簡稱為 UTC）起遭到了持續的 DDoS 攻擊。GitHub 在其部落格稱，這次攻擊是 GitHub 歷史上最嚴重的一次 DDoS 攻擊。

GitHub 堅信攻擊者的目的在於迫使 GitHub 刪除特定類型的內容。第三方研究者指出，此次攻擊採用了 HTTP 劫持，百度的 JS 指令碼檔案被中間人植入了攻擊 GitHub 的代碼，其功能是每隔 2 秒載入一次 GreatFire 或其運營的紐約時報中文網鏡像站點的帳號主頁。。百度已否認自身產品存在安全問題。這次攻擊導致 GitHub 在全球範圍內的存取速度下降。

2015 年 3 月 28 日（UTC+8）起，GitHub 在中國大陸十分不穩定，多數情況下無法存取。截止 29 日，攻擊者共使用了四種 DDoS 攻擊技術：

1. 第一輪，利用中國大陸以外的網友與翻牆的網友瀏覽被劫持的百度 JavaScript 檔案，該檔案每 2 秒向 GitHub 上的兩個頁面發出請求，被 GitHub 的彈窗警告攔住；
2. 第二輪，跨網域 <img> 攻擊，被 GitHub 檢查 Referer 攔住；
3. 第三輪，DDoS 攻擊 GitHub Pages；
4. 第四輪，SYN flood，利用 TCP 協定缺陷傳送大批偽造的 TCP 連線請求，耗盡 GitHub 的資源。

根據系統狀態訊息頁面的顯示，已於 3 月 31 日停止了網路攻擊，該日凌晨 0:09 分（UTC）已經穩定。GitHub 在其 Twitter 與微博予以了證實。至此，此網路攻擊共持續了五天。這次用於網路攻擊的工具被稱為「大炮」。

2015 年 3 月 30 日（UTC+8），中國外交部發言人在例行記者會上被媒體問及此事時，不承認也不否認網路攻擊與中國政府有關，稱「中國是網路黑客攻擊的最主要的受害者之一。」、「近期似乎只要是美國或者其他哪個國家有網站受到攻擊，就會有人聯想是不是中方黑客所為，這很奇怪。」

2015 年 4 月 1 日，美國總統奧巴馬簽署了一項政令，授權的內容為：凡參與由美國境外授意或實施，且對「美國的國家安全、外交政策、經濟狀況，或者金融穩定造成重大威脅」的駭客，將採取旅行與金融方面的制裁；5 月 8 日，美國國務院發言人 Jeff Rathke 稱，美國聯邦政府已要求中國當局調查相關的網路攻擊並告知調查結果。

2015 年 8 月 22 日，翻牆軟體 Shadowsocks 作者迫於警方壓力刪除項目。25 日，翻牆軟體 GoAgent 作者自行刪除自己的代碼。同一天 GitHub 再次遭到來自中國大陸的 DDoS 攻擊。開發者普遍認為此次攻擊與中國政府有關。

#### IP 位址封鎖與間歇性阻斷

自 2019 年 12 月起，Github 所有靜態資源（`*.githubusercontent.com`）所使用的 IP 位址 151.101.0.133、151.101.228.133 的 443 埠（HTTPS）遭到連接重設，導致出現圖片及頭像無法正常載入，以及無法下載原始資原始檔等問題，直到後來 Github 官方更換 IP 位址後才予以解決（但之前使用的 IP 位址至今未被解封，2021 年起又增加了對 151.101.108.133 的封鎖）。

自 2020 年中旬起，由於 WordPress 部落格所屬的 IP 位址 192.0.66.2 在中國大陸地區遭到與上文所述相同的 IP 位址封鎖，故導致 Github 的官方部落格受到牽連，無法在中國大陸正常存取。

自 2021 年 2 月末起（中國兩會期間），「防火長城」升級對 Github 的封鎖措施，開始檢測 `*.github.com`，以及 `raw.githubusercontent.com` 域名的 SNI，並對上述域名所對應的 IP 位址的 443 埠（HTTPS 協定）間歇性執行 TCP 重設攻擊，或者直接封鎖指定埠（強制丟包），從而出現連接重設、連接逾時等錯誤，每次封鎖至少持續 3 分鐘後才能正常進入網站。這導致了 Github 在中國大陸的存取被嚴重干擾，非常不穩定，時斷時續，相關干擾一直持續至今未解除。

### 政府刪除請求

自從 2016 年開始，GitHub 為了防止在實施網際網路審查的國家被完全封鎖，啟用了黑名單機制，他們會稽核來自於那一些國家的政府請求，並使得政府請求的頁面無法被來自於該國的 IP 位址存取，並顯示「Repository unavailable because of the Chinese Internet Blacklist（由於中國網際網路黑名單，儲存庫不可用）」。根據 GitHub 官方所說，這是「以便我們在該轄區的使用者可以繼續存取 GitHub 進行協同運作和構建軟體。」他們專門建立了一個頁面來記錄所有可供公開的政府請求。

2016 年 6 月 8 日，中國網路空間安全協會致信 （頁面存檔備份，存於網際網路檔案館）GitHub，稱專案「Zhao」下的一個 issue （頁面存檔備份，存於網際網路檔案館）誹謗中共中央總書記習近平涉嫌殺害自己的同父異母的兄長習正寧，要求儘快刪除該 issue。三天後 GitHub 公開了這封公開信。這是 GitHub 收到的第六個政府刪除請求，也是第一個來自中國政府的請求。該專案是部落格主編程隨想製作的「趙家人」名單。目前，在中國大陸存取該專案，網站會返回 HTTP 451 錯誤。

### 瀏覽器端封鎖

2019 年 4 月 3 日起，中國部分公司的一些網頁瀏覽器（如 QQ 瀏覽器、搜狗瀏覽器、UC 瀏覽器和 2345 瀏覽器等）將 GitHub 上的 996.icu （頁面存檔備份，存於網際網路檔案館）專案倉庫標記為「危險網站」、「違法網站」、「欺詐網站」等，阻止使用者存取相關 GitHub 網頁。同年 11 月 30 日起，上述瀏覽器封鎖了搭建在 Github 上的 Evil Huawei 專案。

## 俄羅斯

俄羅斯政府通過俄聯邦電信、資訊科技和大眾傳媒監督局維護一份網路封鎖的黑名單，封鎖網站包括兒童色情、毒品、宣揚自殺、宣揚恐怖主義和其他非法網站等。

### 運營商封鎖

2014 年 12 月 2 日，俄聯邦電信、資訊科技和大眾傳媒監督局因為網站內包含了幾種涉及自殺教學的內容而封禁了 GitHub。因為 GitHub 全站使用 HTTPS 連接，無法針對部分頁面進行封鎖，因此網際網路服務供應商被強制要求封鎖整個網站。 實行封鎖的運營商包括：Beeline、MTS、MGTS 和 Megafon。監督局負責人 Maxim Ksenzov 表示，GitHub 被封禁是因為之前的 2014 年 10 月 10 日 GitHub 未遵守俄羅斯的刪除請求。在 2014 年 10 月 2 日 GitHub 曾被短暫封鎖，直到原始的自殺教程被刪除。

### 被封禁的內容

2014 年 3 月 23 日，有人在 GitHub 上面發布了介紹自殺的手冊，內含用俄語描述的 31 種自殺方法，該專案被數個使用者複刻。在 GitHub 被封鎖之後，很多 GitHub 使用者舉報了該專案。該專案於 2014 年 10 月 2 日被建立者刪除。

### 回應

按照俄羅斯政府的相關要求，GitHub 封鎖了相關倉庫在俄羅斯內的存取，以解除對 GitHub 的封鎖。GitHub 為監督局專門建立了一個名為「roskomnadzor」的倉庫，並記錄來自監督局的刪除通知。在倉庫的 README 檔案中，GitHub 指出，他們對網際網路審查表示關注，公開透明是為了防止一些審查反倒會使事情欲蓋彌彰。GitHub 還指出，發布通知僅僅是為了記錄，不會針對倉庫內容的觀點進行判斷。

### 政府刪除請求

截至 2016 年 6 月，GitHub 共收到 6 份政府刪除請求，其中 5 份來自俄羅斯政府。

## 印度

印度根據聯邦和州法律來審查網站。網際網路服務供應商需要按照資訊科技法的要求來進行審查。但有評論指出，這些法律規定比較模糊，供應商容易過分審查。

### 運營商封鎖

在 2014 年 12 月 17 日，印度電信部門命令運營商封禁 32 個網站。命令於 2014 年 12 月 31 日被公開，其中包括 GitHub、Gist、Vimeo、網際網路檔案館和多個貼上箱服務。

封鎖令被印度執政黨印度人民黨的 Arvind Gupta 所證實，他還指出封鎖令與印度的反恐小組針對伊斯蘭國的建議有關。Gupta 還指出，配合政府調查的網站會被解除封鎖。

2015 年 1 月 2 日，印度通信部門宣布將解封四個網站，其中有 GitHub Gist，並指出一旦剩下的網站遵守印度法律，也會被解除封鎖。解釋封禁原因時，部長提到「在這些網站中，大多數網站在發布內容之前都不需要任何稽核…… 這些網站經常被用於傳遞和交流吉哈德內容……」

2015 年 1 月 4 日，一個 GitHub 發言人指出，一些使用者在存取 GitHub 時仍然會遇到困難，GitHub 已經和印度政府進行接觸，但仍然無法確定封禁的具體原因。發言人還指出，使印度的開發者能夠重新存取 GitHub 是他們的高優先級工作，他們「願意與印度政府合作，建立一套辨識和處理非法內容的過濾系統，以恢復網站的正常存取，並確保將來不會再受到影響。」

### 影響

據印度時報報導，運營商 Vodafone、BSNL、Hathway 封鎖了 GitHub 而通過 Airtel 仍能存取。因為封鎖令只告訴運營商封鎖哪些網站但未指出如何封鎖，因此封鎖程度是不同的。封鎖是不可靠的，並且似乎發生在多個層面上。即使是同一運營商，封鎖方法也有多種，包括 IP 封鎖、使用代理伺服器、DNS 污染。根據封鎖程度不同，突破封鎖的方法也不同，例如更換 DNS 伺服器或使用代理軟體。

### 批評

針對封鎖，TechCrunch 評論到「在名單中加入 GitHub…… 是最腦殘的決定之一」，並預言 GitHub 在資訊科技領域的重要性會使封禁行為引發抗議。Twitter 使用者通過「#GOIblocks」標籤進行抗議，並參照納倫德拉・莫迪在 2012 年發表的資訊來譴責網路封鎖。印度匿名者多次向政府發出威脅，但並未採取實際行動。

## 土耳其

2016 年 10 月 8 日，在土耳其駭客組織 RedHack 聲稱入侵土耳其能源部長、埃爾多安女婿阿爾巴伊拉克之後，土耳其資訊與通信技術署命令網際網路服務供應商封鎖幾個檔案分享網站，包括 Dropbox、Microsoft OneDrive、Google Drive。觀測網路審查情況的 Turkey Blocks 注意到 GitHub 於次日上午被封鎖，並且相關的封鎖令被資訊與通信技術署逐步發佈出來。封鎖導致依賴 GitHub 的軟體（例如 Font Awesome、Homebrew 等）無法正常運行。Startup Istanbul 活動的參與者也表達了對基礎設施可用性的不滿。在土耳其，#GitHub 標籤成為了 Twitter 的熱門標籤之一。按照 The Daily Dot 的說法，RedHack 組織蓄意通過多種服務來傳播郵件內容，期待土耳其政府將其封鎖，以造成史翠珊效應。18 小時後 GitHub 被解封。

## 美國

2019 年 5 月起，美國的出口管理條例開始對開原始碼進行管制。

此時開始對伊朗、敘利亞和克里米亞的私人 repo 和付費帳戶實施限制，2020 年 4 月起一個名為 Aurelia 的軟體代碼被 GitHub 封鎖引起較大紛爭，其理由為參與的兩個志願者為伊朗人，引起該程式諸多志願者不滿並於矽谷的「 駭客新聞 」論壇大舉批判，後續 GitHub 改變作法重新啟動 Aurelia 頁面但封鎖兩個伊朗人帳號，之前並發生過一名為 Hamed Saeed 的開發者已經移民芬蘭多年但祖籍為伊朗而被封鎖的事件。此事件引發一個後續討論，美國訂定的制裁他國法案僅限於不讓特定外國人使用美國技術，然而 GitHub 上的技術是各國志願者撰寫並無償分享，並非美國購買有著作權的所有物，其中也包含伊朗程式員也就是其實有伊朗的技術，美國無權拿不屬於自己的東西制裁別人甚至「拿伊朗的技術制裁伊朗」。GitHub 最後在爭議下覺得有所理虧而改變作法，被封禁的使用者可以下載回自己的作品，但依然不能在社群裏檢視代碼。

## 注釋

## 參考文獻