如何看待PKU Helper數據泄露事件?

2016年4月14日晚,北京大學知名校園輔助應用疑似被拖庫,1.7萬學生敏感信息泄漏,如何看待這一事件及事後學生朋友圈瘋狂轉發的反應?
詳情:PKU Helper數據全曝光,身份信息全泄露,樹洞竟是假匿名!你中槍了嗎?
更新:同類輔助app掌上燕圓也被發現了SQL注入漏洞 PH塵埃落定,掌上燕園用戶又中一槍。你中了幾槍?


更新:
官方聲明:關於PKU Helper信息泄露的聲明
官方技術解釋:關於PKU Helper信息泄露的進一步說明(技術篇)


說法提要:
1.伺服器上沒有存儲過用戶密碼,密碼只存在本地。將密碼明文發到xdpku伺服器,是為了方便特別時期在校外的同學做驗證,伺服器只是代用戶驗證,不存儲密碼。
2.身份證等信息是pku伺服器一併返回的,xdpku伺服器只是順便存下了這些數據,從未使用過。
3.該漏洞是白帽發現的,目前數據並沒有被大規模泄露在互聯網上。烏雲漏洞鏈接:北京大學某校園應用伺服器SQL注射-涉及1.7w學生信息
4.PKU Helper是有官方隱私政策的,只不過許久沒更新,而且沒有掛在登陸頁讓大家閱讀。

技術解釋這篇文章中,仍有一些問題,這方面 @Octolet 的回答中分析的很全面了。

個人認為,目前PKU Helper的一個問題是賬戶驗證機制。其只是借用了IAAA做初次驗證,隨後用xdpku分配的token來做確認用戶身份。本質上xdpku提供的服務和官方的網關連接/教務查詢等功能是完全分離的,但給人一種這些服務都是官方服務的錯覺(被統一的登錄窗口包裝)。這種機制可能會導致IAAA密碼被修改後,PKU Helper提供的服務由於token仍未過期,依然可以正常以原用戶身份登錄,帶來一定的風險。(當然只是根據官方說法的推測,不清楚開發團隊具體是如何設計token過期機制)

當然,這和學校相關介面不開放、安全設計欠缺等直接相關,不能一味責怪開發團隊,its、iaaa有甩不掉的鍋。

===================================
上次更新:
為什麼pku helper設計得如此不安全不重視用戶隱私。

有同學質疑獲取一些用戶數據有何不可 只要不泄露就沒事....

正因為你自己都不重視自己的隱私,這些app才不把你的隱私當回事。

App Store對其中的應用有著明確的隱私策略要求:
App Store最新審核指南(2015年3月更新版)
17.5包含賬號註冊或者訪問用戶現有賬號的應用程序必須包含隱私策略,否則將會被拒絕。

PKU Helper並沒有這樣的隱私策略,不清楚是怎麼被上架的


希望PKU Helper的團隊修復漏洞的同時,能給出明確的隱私方案,用了用戶的哪些數據,用來幹什麼了,解釋清楚。不要等到被拖庫了,大家才知道你手上有這麼多我們的敏感信息。

===================================
先自答一下:

首先PKU Helper的伺服器http://xiongdianpku.com上應該明文保存了所有學生的iaaa密碼,大家應該立刻修改自己的PKU賬號密碼... 這些很可能已經完全泄漏...

之前測試時抓到的包 可以看到登錄時明文傳送了iaaa密碼到pkuhelper自己的伺服器 這個密碼可能只是用來做iaaa驗證... 但考慮到驗證的便捷性 很有可能pkuhelper的資料庫上託管保存了密碼 具體機制還不清楚 等待官方出來解釋
密碼居然還明文傳輸... 這app想必一開始就沒怎麼考慮安全性因素...

至於泄露的其他信息 多半是得到iaaa密碼後從北大伺服器抓取到的 至於為什麼一個輔助app需要抓取學生的身份證號碼 真是匪夷所思

在問題解決前大家可以先用app store上一個樸素的ipgw客戶端,或者信科研究生會開發的的 掌上燕園,功能雖然少了些,連連網關看看課表什麼的還是可以的,最關鍵的是用了學校的api,沒有明文傳密碼的問題。(最新消息稱掌上燕圓也被注入,但拖庫信息中似乎不包含敏感信息。)

用戶使用一款APP 便是對它的一種信任 PKU Helper作為北大幾乎人人必裝的APP 前途一片光明 尤其是開放一些API之後 讓人看到了無限可能 真心希望開發團隊能重視這一次的事件 希望這款app能做得更完美

利益相關: PKU Helper用戶 北大學生


昨天晚上開始關注此事件. 利益相關: P大本科、P大碩士. 從沒有使用PKU Helper的習慣, 但是以前本科時出於好奇試用過.


針對作者的澄清(關於PKU Helper信息泄露的進一步說明(技術篇)), 提出以下質疑:

為什麼竟然存在SQL注入這種低級漏洞?PKU Helper團隊是否沒有安全意識?

PKU Helper團隊在開發的過程中是考慮了注入SQL注入漏洞的防範、通知中心中可能的XSS漏洞等安全問題的,本次受攻擊的文件不是PKU Helper工程中的文件,而是創始人私人網站中寫於四年之前的一段代碼中的漏洞(http://www.xiongdianpku.com/applications/detail.php),此腳本將GET參數中的id值直接拼接入SQL查詢導致了SQL注入漏洞。而由於兩者共用了同一個資料庫,使得PKU Helper資料庫受到攻擊。

?PKU Helper團隊會仔細地review後端代碼,檢查仍然存在的問題。截止發稿時,我們已經修復了一批老代碼中的漏洞。我們也會在下次招新時招納網路安全方面的工程師。?

這一點其實沒什麼好說的, 很多大公司的網站也有SQL注入漏洞. 我覺得作為大學生在校期間利用課餘時間開發的應用, 出現了這種錯誤是完全可以理解的. PKU Helper的開發者們在對於此次事件的回應中反覆表達一個意思, 即大家可以指責他們的技術水平不足, 但是不能懷疑他們的道德. 我想說, 這話正好說反了. 從技術上來說, 有漏洞補了就行, 沒關係, 這次漏洞是P大的一個同學發現的, 並不存在通過這個漏洞泄露大家隱私的問題. 所以從技術上我覺得不需要去責怪開發者們. 真正的關注點恰恰應該是道德上的. 大家的關注點不是PKU Helper存在SQL漏洞導致大家隱私泄露(因為其實並沒有導致隱私泄露), 而應該是PKU Helper在自己的伺服器上保存了用戶的學號、密碼、身份證號、籍貫等等等絕不應該被保存的私人敏感信息。換句話說,我們不想質疑或者指責開發者團隊的技術水平,而相反要對開發團隊保存大家私人敏感信息的動機持有懷疑的態度。

為什麼在登錄和成績查詢時明文傳送密碼?

關於登錄,PKU Helper登錄過程如下:?

1)向伺服器詢問是本地認證還是代理認證:?

2)如果是本地認證,則本地將賬號密碼通過HTTPS發送給IAAA獲取認證token,將token發送給伺服器二次認證身份;

?3)如果是代理認證,則將賬號密碼發送給伺服器,由伺服器代為通過IAAA認證;?一般情況下,PKU Helper通過渠道2進行認證身份,因此只會向伺服器發送token,而不會發送賬號密碼;但由於寒假時段回家的同學們無法在校外登錄、選課和查成績,渠道2的本地IAAA認證部分無法進行,我們為了方便大家使用PKU Helper,臨時改為渠道3進行身份認證,從而向伺服器發送了賬號密碼由伺服器進行代理認證,但是伺服器不會存儲此密碼,在經過認證之後密碼就被清除了。?

然而由於我們的疏忽,未能在寒假結束後及時改回渠道2,導致了問題,我們現已將登錄渠道改回了安全的方案2,請大家放心。

這部分對於登陸邏輯的描述, 從此處提供的iOS客戶端以及之前有答主提供的Android客戶端源碼來看是真實的, 至於源碼是否真實有待考證. 但是, 此處還是有幾個問題.

首先, 代碼裡面的邏輯是, 如果伺服器返回的local參數為1, 則直接用IAAA認證登陸; 如果伺服器返回的local參數為0, 則將學號和密碼發送到xiongdianpku.com, 也就是PKU Helper作者的個人網站. 注意此處的local參數是由伺服器返回的, 伺服器返回local參數的邏輯在後端, 沒有暴露在客戶端的源碼上. 這也就是說, 伺服器依照什麼條件在什麼情況下返回local = 0, 我們是完全不知道的. 伺服器可能只返回local = 0, 也可能隨機返回local = 0. 因此, 只有Helper團隊將整個後台代碼全部開源, 才能夠搞清楚local參數的返回機制. 即是如此, 還是要注意, Helper團隊完全有能力隨時改變伺服器返回local = 0的邏輯.

其次, 我對於他們的說法比較好奇. 根據Helper作者所說, 由於校外不能登陸, 他們用自己的伺服器進行代理認證. 有趣的是, http://xiongdianpku.com這個域名DNS解析結果是

112.124.118.137 [浙江省杭州市 阿里雲BGP數據中心]

也就是說他們的伺服器也是架設在校外的. 如果校外網不能登陸, 那麼他們是怎麼通過校外的伺服器為大家代理登陸的? 從我個人經歷來看, 我沒有注意到存在寒假期間校外不能登陸這個現象, 當然這也可能是因為我放假沒怎麼登陸過學校網站, 沒注意到. 那麼, 這個所謂校外不能登陸的說法, 有沒有同學能夠幫忙證實一下呢?

第三, 密碼到底有沒有保存? 這一點我不太清楚, 希望爆出漏洞的同學證實一下. 如果是幫大家代理登陸, 只要存下token就行了, 為什麼要存賬號密碼? 甚至, 連token都不能夠存在伺服器上, 只能加密後存在客戶端本地, 我覺得這個是基本常識以及基本道德規範的要求. 如果確實存了賬號密碼, 我覺得這一點你們無論如何都無法開脫.

?關於成績,由於dean登錄時候需要明文密碼,我們只能在查詢成績時向http://dean.pku.edu.cn發送學號密碼以登錄dean。?


在使用成績查詢等功能的時候直接向dean傳送明文密碼,在公開的Wireless PKU環境中難道沒有風險嗎?

即使你使用網頁版的dean查詢成績,密碼也是明文傳送的,這一點我們早在2014年3月3日剛發布應用的時候就有說明:

這個沒什麼問題.

身份證號碼真的是「順便」保存的嗎?這些信息的用途是什麼?

1)首先解釋我們為什麼要訪問 https://portal.pku.edu.cn/portal2013/account/getBasicInfo.do 介面:?

①為了歡迎來自XXX學院的你,以及在通知中心中作出評論的時候能夠顯示學院(此功能以在2.0版本中刪除),在登錄的時候我們需要學院信息;?

②大家都知道Helper有一個功能叫做體測成績,一開始這個功能的設定是在第一次使用的時候用戶手動輸入密碼,但是大家說既然初始密碼就是生日為什麼不能幫我們自動填寫?於是我們為了獲取大家的生日以自動填充體測成績密碼,訪問了此介面。


2)其次,這個介面真的有返回身份證號碼嗎??

請看圖:?


3)返回了就返回了,那為什麼要存呢?

為了方便日後可能的用戶統計,我們存儲了所有介面返回的信息,希望能夠給大家呈現一些有意思的統計數據,然而我們欠缺對用戶隱私安全問題的認識,是我們的錯,我們已經進行整改。但我們作為北大校內學生開發的完全公益性app,絕無利用這些信息牟利的任何動機,這一點請大家相信我們團隊。?


4)這些信息被用在了哪裡??

Nowhere。這些數據從未被讀取過,無論是團隊內部還是外部介面,都無可訪問的途徑,用戶統計的任務我們也因在開發二手平台等功能而無暇來做。此次事件後,我們也認識到了不應該存儲無用的用戶信息,已經及時刪除了全部的身份證等信息,歡迎大家來申請查看我們的資料庫欄位表。

這部分是整個事件中的核心.

為了歡迎來自XXX學院的你,以及在通知中心中作出評論的時候能夠顯示學院(此功能以在2.0版本中刪除),在登錄的時候我們需要學院信息;?

不好意思, 因為一個沒用的功能(哪個同學不知道自己是哪個學院的, 需要你特別去顯示出來?)需要學院信息, 所以去爬了你的全套私人信息,

大家都知道Helper有一個功能叫做體測成績,一開始這個功能的設定是在第一次使用的時候用戶手動輸入密碼,但是大家說既然初始密碼就是生日為什麼不能幫我們自動填寫?於是我們為了獲取大家的生日以自動填充體測成績密碼,訪問了此介面。

真的嘛, 哪個"大家"提出過這麼缺乏安全常識的要求? 有調查過同學們的意願嘛?

2)其次,這個介面真的有返回身份證號碼嗎?

請看圖:?

不僅有身份證, 而且還有生日、籍貫、家庭住址、民族一系列全套個人信息哦.

3)返回了就返回了,那為什麼要存呢?

為了方便日後可能的用戶統計,我們存儲了所有介面返回的信息希望能夠給大家呈現一些有意思的統計數據,然而我們欠缺對用戶隱私安全問題的認識,是我們的錯,我們已經進行整改。但我們作為北大校內學生開發的完全公益性app,絕無利用這些信息牟利的任何動機,這一點請大家相信我們團隊。?

這裡承認了保存大家私人敏感數據是為了日後的用戶統計, 那麼就是說Helper團隊正式承認了他們是故意保存大家的私人敏感數據的.
這個與你們之前的說法不同啊.之前不是說是不小心存下來的嗎? 大家都知道如果一個人的口徑反覆改變自相矛盾, 多半說明此人不誠實吧? 這個道理對Helper團隊是否也成立呢? 另外, 誰批准你們使用用戶私人敏感信息進行用戶統計了? 不好意思,你們可能確實希望給大家呈現一些有意思的統計數據, 但是用戶也希望你們為大家呈現一些有意思的統計數據嗎?
"我們作為北大校內學生開發的完全公益性app,絕無利用這些信息牟利的任何動機". 請問這是什麼神邏輯? 為什麼不收費就是一定是公益性的app, 就沒有利用這些信息牟利的動機呢?
我其實相信Helper團隊的絕大多數同學們都不會想要去利用這些信息, 但是, 信息就存在你們伺服器上, 只要有access to那個伺服器的人, 都有access to這些隱私信息. 之前有個問題的匿名答主貼過這樣一個答案:

見如何看待北京大學體育課強制下載「益動GPS」用於打卡? - 匿名用戶的回答
雖然我覺得這個不太可能, 但是我們如何能夠確定這真的不可能呢? 只要從伺服器上把資料庫拖下來, 就立馬有了一個極其強大的、關於P大同學的社工庫, 再用密碼(如果保存了的話)撞一撞庫, 不堪設想啊.

4)這些信息被用在了哪裡??

Nowhere。這些數據從未被讀取過,無論是團隊內部還是外部介面,都無可訪問的途徑,用戶統計的任務我們也因在開發二手平台等功能而無暇來做。此次事件後,我們也認識到了不應該存儲無用的用戶信息,已經及時刪除了全部的身份證等信息歡迎大家來申請查看我們的資料庫欄位表。

大家肯定都願意相信這些數據沒有被用過. 但是, 你們之前不是說要用來統計嗎? 怎麼又"無可訪問的途徑"了? 要麼就是你們的回應自相矛盾, 要麼就是想訪問還是有途徑可以訪問的, 對不對? 另外, 恕我駑鈍, 只要把阿里雲伺服器上的資料庫文件下載下來就行了, 為啥沒有可訪問的途徑?
"已經及時刪除了全部的身份證等信息,歡迎大家來申請查看我們的資料庫欄位表" 這個最搞笑了, 你們都把欄位刪除了, 還有什麼好看的呢? 刪之前備個份也很容易的吧?

5)為什麼樹洞竟不是真匿名?

1)需要推送。

為什麼推送不用token來保存呢?Apple的APNs token我們不僅用於樹洞的推送,還用於通知中心、消息中心等實名功能的推送,所以無論如何我們是清楚學號和token的對應關係的。只要我們能夠知道某條樹洞被評論了推送給誰,我們就一定知道這條樹洞關聯的APNs token,從而我們也能知道這條樹洞的發送人是誰,這從邏輯上是無可避免的。然而請大家相信PKU Helper團隊不會向第三方透露樹洞的發布者信息,將這個校園中難得的交流平台運營下去。


2)需要標記Alice Bob等。

當然這一點可以通過每個洞單獨分配的token來解決,不過一來既然由於1我們不可能不知道樹洞的發布人,二來即使沒有1,由於學號數量有限,遍歷全部學號進行暴力破解也使得hash演算法失去了它的意義。


綜上,因此我們記錄了樹洞的發布者。不過我們確實應該對存儲的學號進行AES加密,使得在萬一被趴庫的時候能夠減少損失,現在我們已經使用加密演算法全面加密了學號信息,請大家放心。

在邏輯上不可避免, 是的. 但是你們可以不記錄. 請搞清楚這兩者的區別. 在邏輯上你可以知道是誰發的某一條樹洞, 但是這跟把發這條樹洞的人的學號給記錄下來存在資料庫里是性質完全不同的兩件事情. 專門把這些數據記錄下來, 是需要一定的工作量的, 不存在不小心記錄下來這種可能性.

打個比方, 有一天你不小心看到了好友的隱私. 看到隱私這個事情不怪你, 而且也已經無法避免了, 所以你的好友也不怪你. 但是, 如果你轉身拿出一個本子, 把你看到的好友的隱私詳細地記錄在紙上, 這個性質就不同了吧? 你也沒法說, 我專門花了2個小時記錄下來是不小心記錄下來的吧?

我覺得從這一點來看, Helper的作者真的有些問題. 他的邏輯是, 由於我想獲得你的隱私是完全可以獲得的, 因此我就順手獲得了. 說得難聽點, 這叫三觀不正吧.

為什麼xiongdianpku作為外網伺服器為什麼有代理能力?

1)首先說明哪些服務需要用到代理:

?外網無法訪問時候的登錄(例如寒假期間);

?所有與http://pe.pku.edu.cn相關的服務(比如體育打卡和體測成績);

?2)為什麼xiongdianpku具有代理能力:

?我們的開發者無私奉獻了自己的ITS賬號為大家提供公共proxy連接,方便大家在校外(和4G)使用這些服務。?

參考我之前的質疑. http://xiongdianpku.com本身就是校外的伺服器, 是如何幫大家進行代理連接的?

發生這樣的事情,既是不幸,也是萬幸,不幸的是我們的伺服器上竟存在可供利用的安全性漏洞,萬幸的是這個漏洞已被及時堵上,沒有成為校外不法人員的戰利品,也給團隊敲響了警鐘。感謝大家的支持,也感謝這位白帽子黑客同學,我們會加強網路安全方面的工作,刪除無用的敏感信息,並利用加密技術保障傳輸和存儲安全,也會review現有的服務,封堵潛在的漏洞。?


最後,無論如何請大家相信北大的團隊始終是為北大學生謀福利求便利的,決不會使用任何方式作出對北大同學不利的事情。

封堵漏洞是必須的, 但是這不是最關鍵的問題. 我們(至少是我)最擔心的不是校外的人偷走了我們的個人隱私數據, 而是Helper團隊中是否存在用同學們的個人信息建立社工庫這樣的嚴重違法犯罪行為?

總的來說, 整篇回應有不少需要質疑的地方、自相矛盾的地方, 甚至有個地方我覺得作者的回應就是三觀不正. 我雖然不是開發者, 但是也有一些計算機、網路、密碼學的基本常識, 不是那麼容易被忽悠的.

最後聲明一下, 我對開發PKU Helper的同學們沒有任何的惡意, 相反, 我非常尊重這些無償開發App的同學們. 我也絕不相信整個團隊都一起故意為了某些目的存儲了大家的私人敏感信息, 我相信任何有智商的人也不會相信這種無稽之談. 但是, 必須承認整個團隊保存隱私數據的做法性質是非常惡劣的. 雖然整個團隊大部分同學的出發點絕對是善意的, 但是在進行調查之間, 沒法排除團隊中有人利用這些信息的可能. 如果真的是這種情況, 那麼不光是這次事件的受害者, 也包括團隊中善意的開發者, 他們都是被利用的對象. 這不是陰謀論, 這只是信息安全可能受到嚴重威脅的人, 並且發現這個威脅竟然可能來自自己的同學的人的正常反應.


4.16最後一次更新

白帽子也最後發布了一條聲明:
【PH漏洞終結帖】GarD0u:流言止於智者

目前我們的處理方案是,停止伺服器端所有服務,然後拋棄原來的所有代碼,全部重寫,寫完一個開啟一個的服務。
在伺服器端代碼全部重寫後,我們將會把伺服器端所有代碼交給計算中心review確保安全性,開源iOS和Android兩個客戶端的代碼,並視情況決定是否開源伺服器端代碼。
最後一點是,計算中心已經插手此事,昨天打電話和我們聊了一下;之後我們的伺服器可能會直接搬至校內而不再在阿里雲上,並且可能會直接受到計算中心的監督與管轄。

最後還是謝謝各位對於PKU Helper的關注與支持,相信我們會越做越好的。

-------------------------------------------------------------------------

更新:熊典也以官方身份發聲明了,回答和我大同小異,鏈接如下,可自行對比查看。
關於PKU Helper信息泄露的進一步說明(技術篇)

-------------------------------------------------------------------------

實名回答一波。
利益相關:PKU Helper for Android 開發者;PKU Helper 後台登錄部分作者。

從技術上來回答一些問題。之後將會開源,即公開全部源代碼。

1. 是否向我們的伺服器傳了用戶名與密碼?

這裡是登錄部分的源代碼(com.pkuhelper.IAAA)
從這裡可以看到,登錄步驟如下:
1. 向我們伺服器local.php詢問是否本地IAAA登錄
2. 如果返回是本地登錄(local=1),則本地直接登錄IAAA,然後將返回的token直接發送給伺服器
3. 如果返回不是本地登錄(local=0),則本地直接將用戶名和密碼發送給我們的伺服器。

為什麼要這麼做?
眾所周知,在今年的寒假期間,學校校內網址(包括且不僅限於course, dean, portal等等)是禁止校外網址進行訪問的,因此用戶無法在這段時間在家裡登錄並進行選課,查成績等操作;因此我們確實臨時將用戶名和密碼傳到伺服器上,通過伺服器掛代理來進行IAAA登錄操作。
事實上,在一般情況下我們都不會這樣做而是直接客戶端本地訪問IAAA,原因有以下幾點:
1) 校外地址訪問IAAA驗證比較慢
2) 如果同一個IP地址訪問IAAA次數過多,或者輸入錯誤次數太多,可能會被IAAA自動封禁
所以,我們一直都是直接客戶端本地訪問IAAA的,然後將返回的token發給伺服器,去獲取用戶的個人信息。

對於上面有個人問的:為什麼第一次在校內無法直接登錄,必須要訪問外網?
答案很簡單啊:因為無法訪問local.php啊。

2. 是否泄漏了我們的未名BBS密碼?

這裡是BBS登錄的源代碼(com.pkuhelper.bbs.Userinfo)
可以見得,客戶端直接向北大未名發送了賬號密碼進行登錄,並沒有經過我們的第三方伺服器,因此更不用擔心BBS密碼被被泄露。
PS: 同時作為未名BBS的技術站務之一,這個bbsclient.php文件是我專門為PKU Helper寫的格式化的數據介面。

3. 為什麼要存身份證?這個東西是學校返回的還是我們主動去抓取的?
當登錄成功後,IAAA將會給你返回一個token;我們使用這個token去訪問portal獲取用戶的個人信息時(https://portal.pku.edu.cn/portal2013/account/getBasicInfo.do)
伺服器將直接返回如下信息:
姓名,性別,學生身份,學院,學生類別,學號,出生日期,民族,身份證號,生源地

我們確實存儲了身份證號碼等信息,同時也存了用戶的民族,籍貫等信息。
當然,現在已經處理(注釋)掉了這個問題,將不再存儲用戶的身份證號碼等信息。現有的伺服器中的這種私密信息也全部予以刪除
這個鍋甩不掉,我們必須背;事實上當初寫這一段時,真沒考慮太多問題,只是看到伺服器返回了身份證號,於是就存著了,就這麼簡單,確實沒想太多。
至於我們拿著這些數據去做了什麼:
什麼都沒做。
事實上當初我們存包括用戶生源地在內的一些信息時,有一個目的:能在用戶數量較大時(覆蓋80%以上學生時),對北京大學的學生做一個全面的統計
包括於,各學院學生數的佔比分布,各省向學校輸出生源的佔比數,每年的變化數,等等。
但是,由於PKU Helper不斷更新版本,以及本人臨近本科畢業階段,和嚴重的拖延症的原因,至今也只有一個草稿版,正式版一版都沒有。

4. 樹洞是否是假匿名?
事實上,在資料庫中,確實是存儲了每一條樹洞信息和回復者信息的學號,再配合之前的users表查詢,也確實能查到用戶的姓名學院等信息。
之所以要存學號的數據,是因為樹洞推送,以及樹洞對不同用戶的區分(Alice, Bob)等這種,需要對用戶身份進行識別。
事實上直接存學號是最簡單的方式,方便於推送和標註分離不同用戶。
但是!和身份證號一樣,資料庫中的每一條樹洞的學號信息無法通過任何正常方式來獲取,也沒有任何介面會返回這用戶學號信息;只有以非正常的手段(比如SQL注入等)來直接侵入資料庫,進行拖庫,才可能看到每一條樹洞的發布者。
除非學校有關部門下發通知,我們也不會去查一個樹洞是誰發布的,他是哪個院的哪一級的;七萬多條樹洞消息,幾萬多條記錄,誰會去管你怎麼怎麼樣。即使前段時間鬧得沸沸揚揚的校外人員能使用校園卡的那條樹洞,我們也恪守了我們的原則,並沒有對發樹洞的人的學號和身份進行查詢。
現在,我們已經對樹洞發布者的信息進行了加密處理,將無法再直接查詢到每條樹洞的發布者信息;那位拖庫的學生,我也希望你能刪掉你自己手上的資料庫。

我也只是一個普通學生,在大三下學期時決定寫PKU Helper的Android版本,並在兩個月內不斷從1.0更新版本到2.0,代碼行數從0到4W多行,而這都是我一個人熬夜和通宵了多少天寫出來的。
當初寫這個軟體的初衷就是,希望能給各位北大學生以方便,能將分散的學校介面集合到一個入口處,方便大家進行連網關,看課表,查成績等操作。
我是無償的,免費的,至今除了被學校官方(新青年)看中納入其旗下後600元的補貼外,以及拿去參見全國大學生應用設計大賽一等獎的2500元獎金外,沒有從這個軟體上獲利一分錢。
因為我愛著這個軟體,這是我的心血之作;我也愛著北大,希望能作為北大之一為這個學校,為其他的學生做一點力所能及的事情。
我可以虛心接受你的質疑,為什麼要向伺服器傳密碼,為什麼不用HTTPS加密,為什麼要存用戶的身份證號;這也確實是我自己的問題,網路安全意識比較薄弱。你們質疑的這些,我虛心接受,並會予以改正。
但是我對那些,質疑開發團隊人品的,以最壞的惡意去揣摩開發團隊專門存這些信息,拿著這些用戶私密信息去做了什麼什麼事比如一些商業活動的人,深感痛心。
你可以質疑我們的能力,質疑我們的網路安全意識,我們也會去不斷改進,增強自己的意識,同時對發現漏洞的提出問題的人深表感謝;但請不要質疑我們的人品,請不要以最壞的惡意去揣摩我們的用心,甚至引入陰謀論,覺得後面有什麼骯髒的交易之類。同是北大學生,天之驕子,我希望能互相理解一點尊重一點。
謝謝!


很多人在關注這件事兒,作為Helper的重度使用者,我當然也是中槍的一員。此事出了以後我一直沒有發表評論,只是在朋友圈裡提醒大家要注意。因為平時作為一名偽碼農,我是深刻地理解如 @駱梁宸 這樣開發者想法的。而同時作為一個用戶,也是了解同學們的想法的。
從定性上來講,這毫無疑問是開發者的錯誤,明文傳輸密碼、不做sql注入的檢測,這都是一些最基本最簡單的錯誤,即使在我看來也是完全不該犯的。這是既定事實,無論開發團隊如何洗白,如何開源都毫無疑問。
現在的爭議其實是,數據傳輸到xiongdianpku以後,就進入了一個黑箱,這個過程中,熊典同學完全是有能力建立社工庫的,同學們擔心的,就是社工庫存在且被用於一些不好的事情。
所以才來寫這個回答,希望大家能夠去支持Helper團隊。

首先,你的隱私一旦放到網上,泄露是早晚的事。如果一個人不想讓自己的隱私泄露,最保險的方式就是永遠不把它放在線上。但同時,你享受不到互聯網帶來的便利。想要享受便利,就要承擔隱私泄露的風險。即使在這個共享的互聯網時代,也沒有天上掉餡餅的事情。
其次,任何系統都不是沒有漏洞的,這就是網路攻防的魅力。Helper團隊認為,讓同學在校外訪問非常有必要,校內系統校外無法訪問,那這就需要一台在校內的外網可以訪問的伺服器,讓同學們從這個伺服器來訪問以求曲線救國,但他們沒有意識到這帶來的風險。這次Helper事件,則利用了這一過程,讓Helper團隊意識到可能的問題,讓Helper變得更好。每個系統都會經歷這樣的過程,每個系統都因此變得更好。
最後,我們假設真的所有人的信息都被保存了,這件事兒除了剝奪了一些你的安全感以外,真的沒有什麼影響。不是我的隱私意識薄弱,這個年頭,的確知道了身份信息可以威脅一個人的財產安全,但是伸手想不被抓,需要大量的知識儲備、大量的時間籌劃。或許可以說,想伸手不被抓,就是讓別人不知道你伸過手。所以你能想到的用身份證號等數據做的所有不好的事都基本不會發生,會發生的更多的是你想不到的事情。
(當然其實很多時候也就是從整體上分析分析這些數據,然後就把他們存在個安全的地方以(zai)備(ye)後(bu)用(yong),就比如我在helper事件出現時正在抓取的14/15級6000+的入學體檢報告,就分析了一下人群特徵。又比如helper獲取數據後也可以分析用戶的組成情況……)

----
想了想,的確可以說整篇文章是流氓邏輯,但是我只是想告訴大家,大家的反應不是因為隱私泄露,而是『知道了』隱私泄露造成的不安全感在作怪。我相信Helper團隊是好心的,是真心為同學們著想的,他們沒有人是因為利益而做的這件事。

請不要因為你自己感到不安全,就去惡意揣測他人的善意。
因為
這份善意是脆弱的
要摧毀它
只需要幾句惡語相向 幾次惡意揣測
畢竟
你可以選擇不用Helper
Helper也可以選擇不再為北大同學服務

----
繼續更新一篇官方聲明
關於PKU Helper信息泄露的進一步說明(技術篇)


之前的答案刪了。叔叔我們不撕。

--------------------------------------------不撕的分割線--------------------------------------------------------------------

不談技術。

PKU Helper安卓版開發者Z同學是我的朋友,也是整個學院我最佩服的人之一。Z同學有兩大愛好,三國殺和寫代碼。大概是去年三月,Z同學去交換,因為空閑的時間比較多,決定開發PKUhelper安卓版。那段時間在他的朋友圈裡全都是諸如15k行代碼紀念之類的東西。一個多月後,3萬行代碼,公測版本上線。從去年四月開始,PKU Helper的功能不斷增加,整個團隊也從一個人慢慢增加到了很多人,並在各種創業大賽上獲獎。今天我們看到的PKU Helper安卓版,是Z同學憑藉一己之力創造的,作為北大的一員,我很感激也很敬佩。

技術上的瑕疵,希望大神們不吝賜教;但是請不要認為開發者人品有瑕疵,他們只是一群熱愛北大的北大人。


至少這次是烏雲發現的,,
想起了寒假dean/student無密碼任意登錄的時候……


我就複製一段陳章的回答:

事實上當初我們存包括用戶生源地在內的一些信息時,有一個目的:能在用戶數量較大時(覆蓋80%以上學生時),對北京大學的學生做一個全面的統計
包括於,各學院學生數的佔比分布,各省向學校輸出生源的佔比數,每年的變化數,等等。
但是,由於PKU Helper不斷更新版本,以及本人臨近本科畢業階段,和嚴重的拖延症的原因,至今也只有一個草稿版,正式版一版都沒有。

可以想見,用戶開開心心地把登錄信息輸入進去的時候,是沒跟你簽什麼研究協議的吧。
用戶提供學校系統的學號及密碼用於驗證,返回的生源地信息是否屬於用戶同意向你公開的數據?你是否有權利拿這個數據,做這個統計?
你想做這個統計,等於你是有意保存用戶的身份數據。
由此推開,不得不懷疑你有意保存別的隱私數據,為了做自己的所謂統計。
前面洗地洗的不錯,寫到這句,打臉了。


這問題下面這麼些宣傳掌上燕園的…結合這個消息的源頭,真的讓人浮想聯翩啊…


感謝葉志晟和張小帥同學真誠的回復和理解,在此也向你們,和其他本題的答主再次致以歉意。
本次事件中存儲身份證信息、明文POST、未防止SQL注入等問題都是我們的過錯,絕無任何推脫之意。已經有的錯誤沒法抹去,我們也不會推卸責任。能做的只有在未來以最認真的態度重視安全問題,保障大家的使用。但是任何系統都會存在漏洞,我們以後也難免再出現疏漏,還望各位技術大牛不吝賜教,及時指出我們的問題,一定改正修復。
橫線下內容為初始回復,不做修改,以供他人參閱。對於葉志晟同學的冒犯,也表示真誠的歉意。感謝你的理解和支持!歡迎對我們繼續監督。
---
利益相關:PKU Helper開發者。
本條發表的內容是我的個人行為,和團隊無關。只代表個人,所以也請原諒我口氣沖。

質疑我們技術的我們虛心接受,質疑我們目的和初衷的我們也不想為你服務。

看完葉今天的更新我才是出離憤怒,現在只剩寒心和噁心。

不懂技術的人恐慌和懷疑,沒有任何錯。懂技術,自己可以用技術手段確認的事情,不去和普通用戶解釋消除恐慌不怪你,這不是你的義務;顛倒黑白妖言惑眾,我不懂你想幹什麼。

不用煩勞您反編譯,PKU Helper的開源化是在秋招的時候就定下的。

想打臉是吧,誠摯歡迎。
我倒想問問葉志晟同學,你現在跳的這麼高,敢不敢來真的review代碼?
我要你被打腫臉之後公開道歉,你敢不敢接?

---
別的具體問題暫不做回復,昨天的聲明本來就不是給技術人員看的,面向的是99%的普通用戶。
技術細節的披露過會兒就該發了,到時候你們想要的答案都會有,沒有也隨時歡迎質詢。我不是後端,但也會儘力解答。

最後再以個人名義誠摯道歉。此次信息泄露我們負有不可推卸的責任。尤其不應在資料庫中記錄身份證信息。現所有身份證信息已經刪除,漏洞介面在揭露推送發出後半個小時內已經修復。今早已得到烏雲漏洞提要,與昨晚發現的相同。正在加緊review其餘代碼,並商討後續安全措施。

另外真誠的感謝所有在技術層面質疑我們的同學,這些質疑很寶貴,幫助非常的大。已經造成的錯誤不可挽回,但我和隊友們一定會竭盡全力在之後保障安全問題。
以我的人格保證。


匿了……
從目前的PKU Helper Android端的源碼來看,PKU Helper在第一次登錄時是否傳輸明文用戶名和密碼到http://xiongdianpku.com取決於伺服器的返回結果,如圖

其中的Constants.domain就是http://www.xiongdianpku.com。總之感覺挺奇怪的,不知道這麼設置有何用意?另外,從整個Android端的設計上來看確實欠缺安全性的考慮。所有的用戶信息都直接明文存儲於SharedPreferences之中,root之後可以一覽無餘

【至少存個加密資料庫啊……


=====技術篇發布,最後更2016年4月15日13:28:35=====
根據新推送和開發者團隊的說明,已經回答了我的全部問題,在此先做個概括。
關於明文傳敏感數據:是不足之處,以後會修復
關於身份證號的來源及用途:來自於學校,存在PH的伺服器上並且並未被做利用,也沒有被泄露出去
關於通過xiongdianpku傳密碼:經陳章學長的review得知是在校驗採取何種登錄方式,與我昨晚所做的猜測傳敏感數據到xiongdianpku確實存在偏差,在此道歉並更正我的看法。

最後
希望PH能在安全方面的繼續努力,好的產品不光是在功能上獨樹一幟,在安全與隱私保護方面更應該做出努力。

====昨晚上床才發現兩家都有話說,繼續關注,2016年4月15日07:44:34====
先放鏈接:
關於PKU Helper信息泄露的聲明
GarD0u:關於PKU Helper數據泄露的說明

下面是對解釋的疑問

Q1:我們的iaaa密碼和bbs密碼是否都泄漏了?!!!

A:當你輸入密碼的時候,helper把你的密碼原封不動地發送給了學校,學校說,這個密碼是對的,於是你就登陸成功了。我們的伺服器上沒有保存任何密碼,無論是同學們的iaaa密碼還是bbs密碼,同學們不用擔心密碼被泄露。

對於Q1:我暫時相信伺服器沒有存我們的密碼,理由見後,學校的WiFi連接校內資源是沒有認證過程的,相當於是完全開放,在這樣的環境中明文傳真的大丈夫?

Q2:為什麼收集我們的身份證信息?身份證號從哪裡來的?

A:我們沒有主動獲取大家的身份證號,在獲取大家的姓名等公開信息的同時,學校官方的介面返回的信息中包含了大家的身份證號,由於考慮不周,我們一併存儲了該項信息。現在我們已經刪除了大家的身份證號碼,因此擁有大家身份證信息的只有那位發現漏洞的同學,而我們已經在聯繫這位同學。

對於Q2:PH團隊在對此作出解釋的時候不覺得很牽強嗎???正如漏洞發現者GarD0u所說

也希望開發者和運營者能對此數據用途做出解釋(我不認為介面返回了身份證號就一定要存儲在資料庫,這不是不小心的問題,「考慮不周」的說法不能令人信服;同時如果為了連接網關和獲取用戶姓名通過its的介面即可,沒有必要通過再portal的介面獲取身份證號等信息)

我舉個方便理解的例子:你來找我借鑰匙,我一不小心把我保險柜鑰匙也給了你,你就把保險柜鑰匙配了一份然後放在了自己的鑰匙環上
不用再說什麼了吧,強烈要求PH對身份證的用途作解釋。

Q4:為什麼我們要通過xiongdianpku來傳輸密碼?

A:由於學校寒假期間封閉外網,發生了校外無法登錄的問題,影響了大家的選課、成績查詢等服務,因此我們採取臨時的解決方案,寒假結束後我們沒有及時改回來,這是我們的疏忽。現在已經改回來了,不會向我們的伺服器傳輸大家的密碼。

此處原回答不友善,現已修改,表示抱歉

對於Q4:這一條如果我現在有充分的證據,就可以證明即使是上學期也是將密碼傳到xiongdianpku或不是,允許我目前做出肯定性推測的理由非常充足。
當然代碼是什麼樣就是什麼樣,
如果真的如開發者所說,我就道歉並修改此段答案
如果真的如開發者所說,我就道歉並修改此段答案
如果真的如開發者所說,我就道歉並修改此段答案

我也只是想知道真相,拒絕人身攻擊,做出本段判斷的理由我也寫明了:沒有充足證據,只有推測

這段是我做出推測的理由:我覺得每個北大人都有這樣的體驗,第一次登陸PH的時候不能在校園網環境下登陸,必須要切到手機網路才能登陸到PH從而連接網關
按照Q4,只有學校不允許校外IP登陸elective以及dean的時候才會從xiongdian走,否則是直連。那我就想問了,為什麼上學期第一次連接網關的時候不能直接登陸上網關呢?在我看來,就是因為你沒有xiongdianpku這個校外地址的訪問許可權。當然目前沒有證據,除非逆向以前版本的apk,但是我認為這條說辭實在是難以成立。

總之,PH團隊對這次危機的應對以及其本身的做法實在是令我失望。其實你提供樹洞服務,建立資料庫驗證學號密碼無可厚非,但是如果你真正做了卻不敢承認就真的令人側目了。

=====剛剛回寢室發現這件事很interesting,持續關注,2016-4-14 22:05:35======

現在問題的關鍵不應該是樹洞的問題,不僅是密碼的問題
應該是究竟如何從PKU helper泄露的數據中得到身份證的

看來數據泄露無誤,就是好奇是怎麼找到身份證的,問題變得有意思了。

當然有可能是很簡單粗暴的方式——籍貫,我也希望是這樣的答案。

但是如果這個資料庫的建立者真的拿到的是完整的身份證號呢?

因為PKU helper並沒有收集學生的身份證。根據推送中給的查詢鏈接http://115.28.31.111/的速度來看,應該是現在資料庫里找的,所以很好奇它的來源。大家仔細想一想,在登錄PKU helper的過程中並沒有讓你輸入身份證號,而且在各項服務之中貌似也沒有需要用到身份證的場合,講道理PKU helper的xiongdianpku那裡不應該有現成的身份證資料庫。還有兩種可能:一、xiongdianpku收集了學生的數據並且維護了一個database,然後庫被拖了全漏了;二、發現漏洞並成功脫褲的GarD0u用其他方法通過獲得的密碼在學校的某些地方(比如portal)查詢了而且保存到本地維護了一個表。這兩種可能性都是極其可怕的。在真相浮出水面之前暫時不做定論。

另外回復一下評論中的關於PKU helper的歸屬問題,我是在3月2日抓包分析的,我在安卓客戶端用packet capture抓的,由於當時截圖暫時找不到,但是可以保證當時的PKU helper仍然是將明文密碼傳到http://xiongdianpku.com,而且在教務查成績的功能中也是明文,這是可以確定的。而且小帥在iOS上用surge抓的也很明顯

剛剛截的圖,3月2日票圈
當前pku helper已經無法正常使用,所以這一個月內到底有沒有伺服器與傳輸方式的變化我也不能保證,希望大家都拿證據說話。小帥的截圖在他的回答中有更加清晰的截圖,可以方便查看。

所以個人認為事態十分嚴重,但是大家能做的也只有趕緊改密碼,防止其他更加重要的賬號被脫褲。同時也要更改與校園網賬號相同的用戶名的密碼(自定義郵箱會暴露很多),會持續關注。

另外關於白帽子信息_GarD0u,

感覺像是信科的同學23333,自設的rank很高處於完全保密的狀態,所以資料庫應該暫時不會大規模傳播。

也希望大家在評論中發表自己的觀點,希望事情能有妥善解決。

======五四剛跑完步用手機在操場打的========
卸小帥腰
先說觀點:數據風險確實很大,早就應該引起注意。但是不要老想著搞個大新聞!
在前些時候的益動事件中,我就已經順帶以pku helper舉例說過,pku helper和益動一樣,初次登錄的時候學號和密碼是明文傳送,不僅沒有ssl,而且數據是傳送到http://xiongdianpku.com,對於http://xiongdianpku.com,大家都知道這是北大法學院學長自己的網站,安全性大家自己判斷,無需多言。
在第一次登錄的時候,密碼和學號會傳輸,此外在某些行為下也會明文傳,比如查教務成績,http直接就能抓出來,當然這也是學校沒開放介面的鍋,在學校信科研會的官方客戶端 掌上燕園 中就解決了這個安全問題。

北大學生都知道,網路賬號密碼的重要性之大,不光是iaaa認證的密碼,更是校園卡、網路服務、選課等等服務的統一密碼,望重視!

對於樹洞的機制,我對此並沒有了解不做評論。
這次如果真的是注入,我們能做的也只有儘快修改密碼,並且在接下來的一段時間盡量使用its和掌上燕園。pku helper是個人的行為,他給我們帶來的方便也有目共睹,我也希望大家能客觀的看待這個問題,畢竟個人的網站以及非盈利的機構能做到這樣也是很棒的,我也不希望看到這件事情能被別有用心的新聞工作者利用。希望大家冷靜對待。

最後,
趕緊改密碼吧!


反覆有人在樹洞里說出不應該說的關鍵詞,把有關部門得罪了一下。


默默發一個傳送門。。。
PKU helper的流行是否反映了當前北大學生隱私意識的缺失? - 應用(軟體)
這個題主真是有先見之明啊。
而且主動爬身份證號然後存下來這一行為我覺得怎麼都解釋不通吧
感覺沒出事前大家真的是都不在乎自己的隱私安全。。。

====更新====
以下是雙方最新出的說明。。。

GarD0u:關於PKU Helper數據泄露的說明
PKU Helper團隊:關於PKU Helper數據泄露的說明


卸腰 雖然不是很懂SQL資料庫的原理 。
但是還是知道SQL注入的危害的。
1.pkuhelper作為這次事件的主要責任方,從開發團隊來說,沒用ssl直接密碼明文傳輸,沒有考慮當使用人數多後數據泄露帶來的後果。
2 作為學生來說,我們也不能完全責怪pkuhelper,畢竟把一個非盈利的app做到這種程度也不是易事,你不能因為一次事故就全盤否定pkuhelper的努力。


現在最重要的是感覺改密碼,解決問題遠比抱怨重要。


我要來答一發這個問題!

我相信pkuhelper沒有保存學生的登錄密碼,畢竟這個軟體目前後面已經有官方的支持了,這麼干肯定是要被記過的。

不過北大的網關登錄系統是不安全的,網關是用用戶ip和用戶名做綁定的,登錄的過程是向某個伺服器發送http請求,該請求的cgi param中含有用戶名和密碼,明文存的。伺服器驗證該用戶名密碼,然後對該http請求中的ip信息做綁定。所以某些答案中抓請求抓到的是明文的密碼。

這個問題我還在念書的時候就有了,現在居然還是這樣的,看來確實沒人在意過這個問題。

利益相關:北大網關Android版第一版作者


難道沒人覺得這是貴校為了迎接某位重要人物的到來而故意為之的嗎/滑稽
話說這兩天學校正常的生產生活秩序都受到了干擾,具體表現為CBD關門,工地暫停施工,以及現在的PKUHelper 受到影響。恐怕是怕我們在樹洞里匿名發言吧。


這個注入玩的好溜
//我也去試試
////不是pkuer


貢獻了1/17K…
外行表示不知道,但是PKU Helper除了樹洞以外的功能目前全部沒關…


那位 @陳章
雖然對於人品的攻擊是我不推薦的,而且不方便給出證據,但是陳同學的人品確實不怎麼好,這是認識你的人的一致看法哦。
我看過你的資料庫的,你還儲存了照片(這也是portal的鍋,儲存了校園卡照片,另外最近course也用了這個照片)等數據,當然還有明文PW,這麼義正詞嚴,你周圍的人看了會笑出來的。
還有說沒有經驗的,你們可以試試社工他,不會成功哦,信息安全意識這麼好,說經驗不足誰信呢?


推薦閱讀:

求高手分一下趣醫網的前景怎麼樣?
你如何看一把菜刀對「360搜集隱私」的分析?
請問互聯網裝修平台公司怎麼樣?
央行為何要出台互聯網新規?感覺根本就不是替廣大人民群眾著想而出台的?
我們對自己的信息,是否有所有權?

TAG:互聯網 | 隱私 | 北京大學 | 資料庫泄漏 |