作者:知道創宇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

啟動Jupyter Notebook服務時,生成的token值

此時,在Web瀏覽器中輸入http://localhost:8888 訪問Jupyter Notebook的時候,頁面會提示輸入password 或者 token。

① 訪問服務時,頁面提示輸入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”。

① 網頁標題內容是:Home Page - Select or create a notebook

3.2 JupyterLab

本章節,我們介紹如何安裝、正常啟動、未啟用身份驗證方式啟動JupyterLab,以及對應的Web瀏覽訪問的效果。

JupyterLab的安裝方式,參考其官方網站 [7]。只需要在命令行下輸入一句話命令即可,簡單方便。

pip install jupyterlab

正常啟動JupyterLab的方式,也是輸入一句話命令,默認在本機localhost的8888端口開啟一個Web服務,并且生成一個用戶身份驗證的token值。

jupyter-lab

① 啟動JupyterLab服務時,生成的token值

此時,在Web瀏覽器中輸入http://localhost:8888訪問Jupyter Lab的時候,頁面會提示輸入password 或者 token。

① 訪問服務時,頁面提示輸入password或token

我們在頁面上輸入命令行啟動時獲取的token值,便可通過身份驗證,使用JupyterLab的產品功能。

網頁標題內容是:JupyterLab

有些用戶需要通過互聯網訪問自己的JupyterLab服務,并且為了避免輸入password 或者 token的麻煩,會通過如下命令,將JupyterLab服務暴露在互聯網IP上,并且未啟用身份驗證。

jupyter-lab --ip="*" --NotebookApp.token="" --NotebookApp.password=""

此時,任何用戶在知曉JupyterLab服務所在互聯網IP的前提下,在Web瀏覽器中輸入“http://*.*.*.*:8888”訪問JupyterLab服務,無需身份驗證,便可以直接查看服務器上的代碼和文件。注意,這種情況的網頁標題內容是:“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"

① ZoomEye搜索關鍵詞為:title:"Home Page - Select or create a notebook"
② 總計1180條結果

我們在ZoomEye上使用如下關鍵詞進行搜索,查找到無需身份驗證即可直接查看和使用的JupyterLab服務器IP地址和端口,總計1597條結果。

title:"JupyterLab"

① ZoomEye搜索關鍵詞為:title:"JupyterLab"
② 總計1597 條結果

五.Jupyter服務未啟用身份驗證的危害

用戶在搭建Jupyter服務的時候,未啟用身份驗證,雖然方便了日常使用,無需輸入密碼;但同時也相當于將自己的代碼和文檔公開在互聯網上,供其他用戶任意訪問查看,其中的登錄用戶名/口令、API key/secret等敏感信息若被不法分子利用,可能會造成數據泄露和資產損失。

示例一:

如下圖所示,該Jupyter服務器中的代碼泄露了:bitFlyer加密貨幣交易所的用戶API的key和secret,Gmail郵箱的用戶名和口令。

不法分子利用bitFlyer加密貨幣交易所API的key和secret,可以在交易所中創建交易、取消交易等操作,可能會造成資產損失;利用Gmail郵箱的用戶名和口令,可以登錄Gmail郵箱,可能會造成隱私數據泄露。

① 泄露了bitFlyer加密貨幣交易所API的key和secret
② 泄露了Gmail郵箱的用戶名和口令

示例二:

如下圖所示,該Jupyter服務器中的代碼泄露了:亞馬遜AWS賬號的ACCESS KEY ID和SECRET ACCESS KEY。

不法分子利用亞馬遜AWS賬號的ACCESS KEY ID和SECRET ACCESS KEY,可以獲取亞馬遜AWS的該賬號權限,上傳文件至亞馬遜S3云存儲空間,甚至在亞馬遜AWS上創建新的云服務器。

① 泄露了亞馬遜AWS賬號的ACCESS KEY ID
② 泄露了亞馬遜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


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.jmbmsq.com/2057/