數位安全不求人:自製防盜刷掃描器

八月 16, 2018
Facebook
Twitter

為儀錶板新添小裝置,偵測隱藏的自助加油機信用卡盜刷器

時間:3~8小時

難度:簡單

成本:0~50美元

 

材料

  • Raspberry Pi Zero W單板電腦
  • Monochrome OLED螢幕顯示器,128×64 Adafruit #326,adafruit.com
  • 連接線,28ga或更細的電線
  • 內六角螺絲,M2.5×10mm(4)
  • MicroSD 記憶卡,8GB
  • USB電源供應器,1A,車用
  • 裝置外殼,自行製作或使用我的列印檔

 

還有什麼比信用卡明細表上出現自己沒授權的支出款項更糟?慌張地用紅筆在上頭標記,然後打電話給銀行,希望他們把卡凍結後還能退還這筆錢!

這種漏洞的根源是因為信用卡本身極度欠缺安全性。卡片上的傳統磁條內含交易所需的所有數據,且因為這些資料未經加密,所以只要簡單的電子設備就能輕鬆竊取。不肖人士設置所謂的「盜刷讀卡機」(card skimmer)即扮演「中間人」的角色,在資料傳送至POS(Point of sale,銷售點管理系統)前,如加油站自助加油機等,從中攔截並記錄你的信用卡資料。

去年,SparkFun Electronics的Nathan Seidle針對當地警方從加油站取出的盜刷讀卡機進行深入的技術研究。最後發明了一款Android和iPhone通用的應用程式,它能掃描與盜刷讀卡機磁紋符合的藍牙裝置。

感覺是不錯,但我生性懶惰,很難在短時間內養成良好習慣。所以我想要有個專門偵測周遭環境的裝置,能隨時留意加油站內可疑的藍牙裝置,並在我做出有損未來財路的蠢事前大聲阻止我。不過這一切要歸功於Seidle,沒有他的努力,這個專題就不會誕生了。

  1. 硬體

這個裝置只需要兩個零件,Raspberry Pi Zero W和Adafruit SSD1306 OLED螢幕顯示器。首先,焊接OLED各個連接點。我們之後會把零件裝進機殼內,所以不要留下多餘鬆散的電線,盡可能地縮短用線,並使用耐撓的曲電線:28ga單芯電線,讓安裝配置更方便,如果扭成絞線更方便。SSD1306支援兩種不同的通訊協定:I2C和SPI。我們使用後者,雖然會用到更多電線,但速度較快。請根據以下圖表完成所有接線。

 

  1. 設定 RASPBIAN

將顯示器和鍵盤連接至Pi Zero需要很多額外的硬體,所以我總是喜歡在一開始採用無頭式(headless)設定。而最簡單的方法,就是使用親民的圖形化Raspberry Pi安裝工具Pi Bakery。這個工具可以建立用來將板子開機的Raspbian映像檔,其中Pi與家用網路連線與SSH連接方法都已設定完成。我的基本設定如下所示。

 

  1. PYTHON與函式庫

下載Raspbian後,啟動系統並用SSH連接。進入raspi-config(組態),更改預設密碼等設定,並在Interfacing Options(介面選項)下啟用SPI,接著使用以下命令安裝Python:

sudo apt-get install python python-pip

 

使用以下命令安裝必要的藍牙工具:

sudo apt-get install bluetooth libbluetooth-dev

 

我們使用的是Python程式語言,因此需要取得基於Python的藍牙工具集:

sudo pip install pybluez

 

接下來你需要取得驅動Adafruit OLED面板的軟體:

sudo pip install RPi.GPIOsudo pip install Adafruit_BBIOsudo apt-get install python-imaging python-smbus

 

以及供OLED顯示模組使用的Adafruit特定函式庫:

sudo apt-get install gitgit clone https://github.com/adafruit/Adafruit_Python_SSD1306.gitcd Adafruit_Python_SSD1306sudo python setup.py install

 

  1. 讀卡機掃描裝置程式碼

最後,請下載掃描軟體:

cd ~git clone https://github.com/photoresistor/raspi_skimscan

 

依照以下程式碼進行測試:

cd raspi_skimscanpython raspi_skimscan.py

你應該會看到裝置顯示「掃描中……」及持續滾動的刪節號,表示裝置每10秒就會重新掃描一次。如果你有辦法更改行動裝置的藍牙名稱,可以將手機名稱改為「HC-05」來測試掃描裝置,驗證其是否出現警告訊息。完成後,按Ctrl-C退出。

 

最後要做的是設定Pi,以便板子啟動時能執行我們的指令碼。使用以下命令執行Python指令碼:

sudo chmod +x raspi_skimscan.py

 

然後,設定rc.local以在啟動時執行指令碼:

sudo nano /etc/rc.local

 

接著,將以下內容加入檔案,直接加在exit 0那行上方:

sudo python /home/pi/raspi_skimscan/raspi_skimscan.py &

 

就是這樣!完成了,重新啟動你的Pi,確認一切都運作正常。

 

  1. 組裝

如果你自己沒有準備,請3D列印這兩個製作外殼的檔案。你可以前往我的GitHub 資源庫下載檔案。

將OLED螢幕顯示器安裝於上殼的支柱,如果心有餘力,你也可以用少許熱熔膠固定。接著將Pi板子放置於下殼並對齊四周孔洞,將外殼闔上。用M2.5×10mm內六角螺絲將上下殼固定。

 

把掃描裝置附掛在汽車儀表板或中控臺,只要是任何視線可及又不致分心的位置皆可。用車內USB孔為裝置供電,只要有1安培以上的電流即可。

 

偵測讀卡機

請等等!若你把我的程式碼和Nathan Seidle為手機應用程式撰寫的進行比較,你會發現我的程式碼沒那麼嚴謹。只要任何藍牙裝置的名稱與加油站讀卡機常用的名稱相同——也就是HC-03、HC-05或HC-06——我的裝置就會回報,但不會對這些裝置執行ping命令以取得回應(我沒有像Seidle採取二次驗證,因為我無法取得真正的盜刷讀卡機進行測試)。由於這些便宜的藍牙開發板也會用於合法產品及DIY專題,所以這個裝置難免會有誤報情形。

如果你的掃描裝置發出警告,請環顧四周。很可能有不肖人士已在加油機安裝盜刷讀卡機。或者,其實只是一位像你一樣的Maker在街上閒晃。駭客類型通常很容易察覺,只要在加油前確認他們的帽子顏色就知道了。

 

 

泰勒˙溫嘉納是《MAKE》雜誌影片製作人。動手做玩家、摩托車騎士、遊戲玩家。會讀留言、操作工具、講故事。應該是個人類,推特帳號@photoresistor。

 


(譯:曾筱涵)

【原文】


 

Social media & sharing icons powered by UltimatelySocial