開發者會議紀錄 DevMeeting 20181007

  • 本週合併了許多將在v0.13.0版本發布的程式碼
    • 執行檔可望在本週發布,CLI應當會率先發布,而後才是GUI。
    • TheCharlatan將會宣布/建議本次版本使用可重現編譯(reproducible build)的可行性。
      • 若不幸失敗了,程式碼/二進位版本將會以原先的方式發布,可重現編譯的版本將改於v0.13.1推出。
    • 翻譯小組在發佈前還有些檔案需要處理。
  • 未來的版本發布規劃
    • 建構小組希望於2019一月推出v0.14.x版本 - 大幅提前於下次協定升級的時間。
    • 將會預留超過一個月的時間測試並於二月正式發布。
    • 目標是讓排程不要這麼緊迫 - 在接近正式發布的時候別塞入太多的新功能。
    • 防彈協定的安排方式是個很好的例子:原先排在2018較早的月份,但因程式碼的審查而決定延後推出,整個過程運行的相當順利。
  • v0.13.x 的GUI**可能**會加入使用手冊/教學文件
    • 如何妥善的打包還在討論中。
    • 用PDF很好但可能會成為一個攻擊向量。
    • 團隊正在尋求替代方案。
  •  Mac在v0.13.x支援Ledger的測試尚未收到足夠的資料,開發Ledger整合介面的其中一名開發者,cslashm,並無Mac供測試
    • 目前已知在Mac上有個可能的bug是按下按鈕過快或過慢時會有點問題。
  • 下次開會將於10月14日 UTC 17:00(台灣時間10月15日01:00)

    繼續閱讀...

開發者會議紀錄 DevMeeting 20180909

    • 由於與表定分叉更新的時間已非常接近(約於2018年10月18),因此下次的版號將直上V0.13.0.0而非原規劃的v0.12.4.0
    • 最新的PoW已更動為CryptoNightv2,需要一些會C++的開發者幫忙審查
    • Kovri 的程式碼已正式從GitHub移至Gitlab,而主要的Monero 程式碼尚未決定是否要移動
      • 很可能以Gitlab為主而Github作為鏡像備份
      • 也可能Monero就直接用Gitlab的軟體自行架站
      • 防彈協定(BulletProofs)與CryptoNightv2程式碼的合併並於testnet上運行預期會在9月10-11號開始
      • 下次開會時間為2018年9月16號

繼續閱讀...

關於重複計數漏洞的事後檢討

這篇文章要來談重複計數(multiple counting)的漏洞,其包括了兩個變種。這篇文章的目標是對上述的漏洞提供完整的細節,解釋這是如何被用來攻擊線上服務、商家與交易所,並且 Monero (開發)社群是如何處理這個漏洞。

重複計數漏洞的兩個變種存在於子地址(subaddress)功能中,這功能用了個不同的交易金鑰程式碼架構。第一個漏洞的變種簡單來說就是沒有對重複的公鑰進行檢查,因此攻擊者可以重複將同份交易公鑰包含在交易中,這結果導致了接收者的錢包會回報收到了x倍於其真正收到的的交易數量(x是代表收到幾次交易金鑰的一個整數),所有用來回報收到交易的指令(如show_transfers (CLI), get_transfers (RPC))都被此漏洞影響。但是餘額並沒有受到影響,錢包依舊會回報正常的資金餘額。可惜的是,大多數的交易所都是利用 get_transfers 或 get_payments RPC指令在運作,因此重複的交易公鑰將會導致計算出錯誤的金額。

不幸的是,這個漏洞的變種非常容易被使用,攻擊者可以輕易的利用在 src/cryptonote_core/cryptonote_tx_utils.cpp 中的 add_tx_pub_key_to_extra(tx, txkey_pub) 來附加重複的交易公鑰。實際上的運作如下: 攻擊者在 src/cryptonote_core/cryptonote_tx_utils.cpp 中附加了譬如三次的金鑰,因此在他的交易中就會出現四筆相同的交易公鑰。這導致了當攻擊者將一筆 1 XMR 的交易發送至目標交易所的時候,交易所很有可能就會計帳給攻擊者 4 XMR 的餘額,於是攻擊者就可以領出4 XMR的資金而惡意盜取了交易所 3 XMR 的資金。若交易所沒有進行對餘額與進出交易金額的核對或檢查熱錢包的異常狀況,那麼攻擊者基本上可以重複上述攻擊直到交易所的熱錢包被領空或更慘的是到整個交易所的資金耗盡為止。

本漏洞的第二個變種,在 HackerOne 上有完整的報告,原理是程式碼沒有對假冒的交易公鑰進行檢查。因此攻擊者可以利用變造後的交易公鑰欺騙錢包使其將交易輸出計算為實際收到的兩倍,而與第一個變種類似,錢包餘額並不會受到此漏洞影響。 本漏洞的第一個變種最早是在 GitHub 上被提出並迅速地在這份 PR 中被 moneromooo 修正。 不幸的是,這個漏洞的嚴重性被低估,直到 (i) 一個交易所的 Monero 分叉幣被利用此手法攻擊 (ii) 在 HackerOne 上的一位資安研究員(jagerman)提供了完整報告關於如何利用此漏洞竊取交易所資金。而漏洞的第二變種是由 HackerOne 上的 phiren 所提出,並也被快速的在此份PR中修正。兩份修正都已由 fluffypony 合併在 v0.12.3.0 的發布版本中。

在 v0.12.3.0 定版之後,筆者(dEBRUYNE)與其他開發者們私下地盡可能通知了所有的交易所、線上服務、與商家。但顯然這不是個最好的方法: (i)這不可避免地排除了與我們沒有聯絡管道但又是 Monero 生態中重要的對象。(ii) 這可能導致差別待遇的觀感。此外,這個漏洞消息應該要於公開地郵件列表中發布,但可惜的是並沒有,我們應要能從這樣的疏忽中記取教訓。我們是一個 Monero 的社群,應該要找出一個更順暢的資安弱點處理流程(譬如回報重要漏洞給交易所、線上服務與商家的的流程),一個只提供給交易所、線上服務與商家的”祕密”郵件列表或許符合這個概念。加上需要一些繁瑣的認證程序或許會比公開的郵件列表安全,因為聰明的攻擊者會毫不猶豫地訂閱這份郵件列表。

總而言之,在錢包中的一個重要漏洞,在初期被低估其嚴重性,導致在攻擊者得以在 Monero 生態中的竊取交易所的資金。幸好,這個漏洞僅限於影響錢包軟體中的計帳功能,而在交易協定和貨幣發行量上沒有受到影響。我們必須在此次事件中記取教訓去改進使我們在未來遇到類似漏洞時能夠阻緩其帶來的影響。此外,這個事件也是一個重要的提醒,加密貨幣與其軟體都還是在發展中階段,容易出現(重大)漏洞。因此對於提供服務的單位,盡可能納入完整性檢查是比較好的(替如檢查交易總和是否吻合真實帳戶餘額),此外,Monero 開發社群也正在研究加入這類核對功能至 RPC 錢包中的可行性。

註記: 1. 一份包含著50份相同交易公鑰的交易範例: (01ede13f013833f8aef14a9397b83fd5171833ab55bc480104dd6ba86ca8f13558) 可以在此查看這份交易內容。

本篇消息譯自核心開發團隊網站: https://getmonero.org/2018/09/05/a-post-mortum-of-the-multiple-counting-bug-2018-09-05.html

開發者會議紀錄 DevMeeting 20180826

  • 下次分叉的日期暫訂為2018年的10月18日
  • SChernykh已貼出了CrptoNight-v2最後的更動
    • 即將要合併入程式碼
    • 這將會是分叉後的新Proof of Work協定
  • 最終版的防彈協定即將要合併
    • 不確定是否會納入數個可以加速程式速度的程式碼修正
  • Endogenic 的LightWallet pull request需要幫忙審閱
  • ph4r05 提交了一些初步的程式碼來支援Trezor的硬體錢包
  • 一旦新防彈協定和CryptoNight-v2的合併入主程式碼後,testnet的區塊鏈將會重組並會需要一些測試者
    • 預計下禮拜開始,最早禮拜二。
  • GUI在分叉前可能還是會有個v0.12.4.0的更新發布
  • 讓Monero可進行重現編譯(reproducible builds)的工作持續進行中,正在徵求額外的協助
  • 下次開會時間是2018年9月9日

    繼續閱讀...

開發者會議紀錄 DevMeeting 20180729

  • 已收到所有防彈協定的審查結果了
    • 未發現明顯的問題
    • 並得到一些最佳化上的建議
    • 所有跡象都顯示防彈協定將可以被排入下一次的協定升級中
  • vtnerd 研究msgpack應用在monero上的編碼已有一段時間,預計將可與json做為並行方案
    • msgpack是編碼/解碼速度普遍較純JSON快的二進位通訊編碼
  • vtnerd 將會繼續處理ZeroMQ(0MQ)的實作
  • MoneroMooo 開發出了一個區塊鏈的分析工具來計算交易輸出來源的基數(the cardinal of an output’s ancestry)
  • 還有一大堆GUI的工作仍舊持續在進行中
  • hyc正在測試新的PoW運作方案-randomJS已經用C++改寫,且正在Wownero中測試
  • 下次會議將於8月12日舉行

    繼續閱讀...

開發者會議紀錄 DevMeeting 20180715

  • Monero v0.12.3 CLI命令列介面版本錢包已發布
  • Monero v0.12.3 GUI錢包
    • 已標記發布版本號並由Fluffy編譯發布
    • 此版本將開始原生支援Ledger硬體錢包
    • 0.12.3版發布之後,後續的重要目標將是改善使用者體驗
    • 亦將開始開發安卓和iOS系統原生支援的版本
    • 若任何人對套件打包有興趣,請與dEBRUYNE聯繫
  • rbrunner 持續開發Monero訊息系統中
    • endogenic 表示他們打算做出類似OpenMonero的東西
  • Oneiric 正在處理 Kovri的SSU(加密的UDP封包)
  • endogenic 成功的把Monero原始碼轉譯(transpiling)成Javascript了(透過wasm)
  • vtnerd 預估Lightwallet的起始/測試用伺服器的實作PR將會在今日(7/15)上傳
    • 隨著進度的推展將會有許多次較小的程式碼上傳
  • 可能將會有個小版釋出(0.12.3.1 或 0.12.4)來修正會隨機閃退的問題
  • 若你對學習嵌入式硬體的開發有興趣,請聯繫msvb-lab。該硬體團隊開發出了一款徽章,將會在今年的世界駭客大賽上亮相,這是個很好的入門學習機會。

    繼續閱讀...

開發者會議紀錄 DevMeeting 20180617

開發者會議紀錄 DevMeeting 20180520

繼續閱讀...