作者:知道創宇404實驗室
English version: http://www.jmbmsq.com/2058/
一.摘要
在使用Jupyter Notebook和JupyterLab 的過程中,有些用戶缺乏安全意識,未啟用身份驗證功能,導致任何用戶都可以直接訪問自己的Jupyter服務器,并查看其服務器上的代碼和文檔。
我們使用ZoomEye 網絡空間搜索引擎,通過特定搜索關鍵詞,可以找到互聯網上那些未啟用身份驗證的Jupyter服務器。這些服務器上泄露的代碼和文檔,若被不法分子利用,可能會造成數據泄露和資產損失。
我們建議全部Jupyter用戶,在啟動Jupyter服務的時候,遵循官方安全建議,設置成必須通過token或者password登錄。
二.概述
ZoomEye [1] 是一款網絡空間搜索引擎,通過全球部署的探測節點對全球互聯網暴露資產不間斷的深度探測,構建互聯網安全基礎態勢測繪地圖,為安全研究提供全面的資產基礎數據。
Jupyter Notebook [2] 是以網頁的形式打開,可以在網頁頁面中直接編寫代碼和運行代碼,代碼的運行結果也會直接在代碼塊下顯示的程序。如在編程過程中需要編寫說明文檔,可在同一個頁面中直接編寫,便于作及時的說明和解釋 [3]。 它是數據科學家們最熟悉且常用的工具之一。
JupyterLab [4] 是一個交互式的開發環境,是Jupyter Notebook的下一代產品,可以使用它編寫Notebook、操作終端、編輯MarkDown文本、打開交互模式、查看csv文件及圖片等功能。可以說,JupyterLab是開發者們下一階段更主流的開發環境 [5]。
本文,我們介紹如何使用ZoomEye找到那些未啟用身份驗證的Jupyter服務器,并通過Web瀏覽器訪問其中的代碼和文檔。
三.Jupyter產品的安裝和啟動
3.1 Jupyter Notebook
本章節,我們介紹如何安裝、正常啟動、未啟用身份驗證方式啟動Jupyter Notebook,以及對應的Web瀏覽訪問的效果。
Jupyter Notebook的安裝方式,參考其官方網站 [6]。只需要在命令行下輸入一句話命令即可,簡單方便。
pip install notebook
正常啟動Jupyter Notebook的方式,也是輸入一句話命令,默認在本機localhost的8888端口開啟一個Web服務,并且生成一個用戶身份驗證的token值。
jupyter notebook
此時,在Web瀏覽器中輸入http://localhost:8888 訪問Jupyter Notebook的時候,頁面會提示輸入password 或者 token。
我們在頁面上輸入命令行啟動時獲取的token值,便可通過身份驗證,使用Jupyter Notebook的產品功能。

有些用戶需要通過互聯網訪問自己的Jupyter Notebook服務,并且為了避免輸入password 或者 token的麻煩,會通過如下命令,將Jupyter Notebook服務暴露在互聯網IP上,并且未啟用身份驗證。
jupyter notebook --ip="*" --NotebookApp.token="" --NotebookApp.password=""
此時,任何用戶在知曉Jupyter Notebook服務所在互聯網IP的前提下,在Web瀏覽器中輸入“http://...:8888”訪問Jupyter Notebook服務,無需身份驗證,便可以直接查看服務器上的代碼和文件。注意,這種情況下,網頁標題內容是:“Home Page - Select or create a notebook”。
3.2 JupyterLab
本章節,我們介紹如何安裝、正常啟動、未啟用身份驗證方式啟動JupyterLab,以及對應的Web瀏覽訪問的效果。
JupyterLab的安裝方式,參考其官方網站 [7]。只需要在命令行下輸入一句話命令即可,簡單方便。
pip install jupyterlab
正常啟動JupyterLab的方式,也是輸入一句話命令,默認在本機localhost的8888端口開啟一個Web服務,并且生成一個用戶身份驗證的token值。
jupyter-lab
此時,在Web瀏覽器中輸入http://localhost:8888訪問Jupyter Lab的時候,頁面會提示輸入password 或者 token。
我們在頁面上輸入命令行啟動時獲取的token值,便可通過身份驗證,使用JupyterLab的產品功能。
有些用戶需要通過互聯網訪問自己的JupyterLab服務,并且為了避免輸入password 或者 token的麻煩,會通過如下命令,將JupyterLab服務暴露在互聯網IP上,并且未啟用身份驗證。
jupyter-lab --ip="*" --NotebookApp.token="" --NotebookApp.password=""
此時,任何用戶在知曉JupyterLab服務所在互聯網IP的前提下,在Web瀏覽器中輸入“http://*.*.*.*:8888”訪問JupyterLab服務,無需身份驗證,便可以直接查看服務器上的代碼和文件。注意,這種情況的網頁標題內容是:“JupyterLab”。
四.查找未啟用身份驗證的Jupyter服務器
如上一章節所述,未啟用身份驗證Jupyter Notebook服務的標題內容是“Home Page - Select or create a notebook”,未啟用身份驗證JupyterLab服務的標題內容是“JupyterLab”。
我們在ZoomEye上使用如下關鍵詞進行搜索,查找到無需身份驗證即可直接查看和使用的Jupyter Notebook服務器IP地址和端口,總計1180條結果。
title:"Home Page - Select or create a notebook"
② 總計1180條結果
我們在ZoomEye上使用如下關鍵詞進行搜索,查找到無需身份驗證即可直接查看和使用的JupyterLab服務器IP地址和端口,總計1597條結果。
title:"JupyterLab"
② 總計1597 條結果
五.Jupyter服務未啟用身份驗證的危害
用戶在搭建Jupyter服務的時候,未啟用身份驗證,雖然方便了日常使用,無需輸入密碼;但同時也相當于將自己的代碼和文檔公開在互聯網上,供其他用戶任意訪問查看,其中的登錄用戶名/口令、API key/secret等敏感信息若被不法分子利用,可能會造成數據泄露和資產損失。
示例一:
如下圖所示,該Jupyter服務器中的代碼泄露了:bitFlyer加密貨幣交易所的用戶API的key和secret,Gmail郵箱的用戶名和口令。
不法分子利用bitFlyer加密貨幣交易所API的key和secret,可以在交易所中創建交易、取消交易等操作,可能會造成資產損失;利用Gmail郵箱的用戶名和口令,可以登錄Gmail郵箱,可能會造成隱私數據泄露。
② 泄露了Gmail郵箱的用戶名和口令
示例二:
如下圖所示,該Jupyter服務器中的代碼泄露了:亞馬遜AWS賬號的ACCESS KEY ID和SECRET ACCESS KEY。
不法分子利用亞馬遜AWS賬號的ACCESS KEY ID和SECRET ACCESS KEY,可以獲取亞馬遜AWS的該賬號權限,上傳文件至亞馬遜S3云存儲空間,甚至在亞馬遜AWS上創建新的云服務器。
② 泄露了亞馬遜AWS賬號的SECRET ACCESS KEY
六.結語
在使用Jupyter的時候,盡量不要將其Web服務公開在互聯網上,而是開放在局域網中使用,避免被無關人員訪問到。
若卻有使用需求將Jupyter的Web服務公開在互聯網上,則必須設置通過token或者Password登錄,而不是為了貪圖方便而禁用身份驗證。具體操作可以參見Jupyter官方的這篇安全建議博客:Please don’t disable authentication in Jupyter servers [8]。
七.參考鏈接
[1] ZoomEye 網絡空間搜索引擎
https://www.zoomeye.org
[2] Jupyter Notebook
https://jupyter.org
[3] Jupyter Notebook介紹、安裝及使用教程
https://zhuanlan.zhihu.com/p/33105153
[4] JupyterLab
https://jupyter.org
[5] JupyterLab簡介及常用操作
https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0209.html
[6] Jupyter Notebook的安裝方式
https://jupyter.org/install
[7] JupyterLab的安裝方式
https://jupyter.org/install
[8] Please don’t disable authentication in Jupyter servers
https://blog.jupyter.org/please-dont-disable-authentication-in-jupyter-servers-dd197206e7f6
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.jmbmsq.com/2057/
暫無評論