以太幣被盜問題解答

2021-08-16 18:51:42 字數 1552 閱讀 8866

最近在技術討論群(qq群: 659809063)和網上遇到很多以太坊被盜的問題,這種盜竊場景往往發生在初次接觸以太坊的同學身上。今天就簡單總結一下這種被盜的原因和場景。

下面是一段網上論壇尋求解答的乙個提問,也正是我們今天要講的典型的以太幣被盜場景。

1、前一天晚上,我們用本地**去連線阿里雲以太坊節點(公鏈)伺服器做交易,私鑰檔案(a位址)儲存在伺服器上,交易時,失敗了,到etherscan查交易時發現以太幣被轉到乙個不認識的位址(h位址),這時尚未意識到被盜,懷疑**存在問題。

2、第二天,往a位址轉了點以太幣,然後在伺服器上的命令列做交易,命令列查詢帳戶以太幣正常,解鎖帳戶後,交易失敗,到etherscan查交易時發現以太幣被轉到昨天的位址(h位址),pending。

3、我們分析可能是私鑰洩漏、密碼簡單,於是在伺服器上新建立了乙個位址(b位址),密碼變複雜了,又轉了點以太幣,更新的了以太坊客戶端(從1.7.3更新到1.8.1),同樣在伺服器上的命令列做交易,命令列查詢帳戶以太幣正常,解鎖帳戶後,交易又失敗了,查得以太幣被轉走(h位址),pending。

4、這次分析可能是伺服器感染病毒,於是格式化伺服器,重新搭建環境,建立帳戶,轉以太幣,還是在命令列做交易,又發生了同樣的問題,以太幣被轉走(k位址),pending

這到底是什麼問題,哪位大神遇到過,幫忙解答下,小弟不勝感激!!!

看到這裡很多掉進此坑的朋友可能已經知道了被盜的原因,現在我們就分析一下,讓後來者避免再重蹈覆轍。

其實,這個問題的原因很簡單,問題就出在以太坊的轉賬時的解鎖機制。很明顯,這位同學的以太坊節點是可以公網訪問,沒有限制入網ip。我們都知道,當發起轉賬交易時是需要進行解鎖,看一下解鎖的**:

func (s *privateaccountapi) unlockaccount(addr common.address, password string, duration *uint64) (bool, error)  else

if *duration > max else

err := fetchkeystore(s.am).timedunlock(accounts.account, password, d)

return err == nil, err

}

通過源**我們可以看到,如果沒有傳遞解鎖時間引數,系統會預設將發起交易的賬號解鎖300秒。而以太幣被盜就發生在這恐怖的300秒,在沒有一點安全防護的節點伺服器,這意味著在5分鐘內,任何人都可以呼叫轉賬方法將此賬戶的以太幣轉到其他賬戶。黑客通過工具監聽到某個位址被解鎖,馬上就呼叫該服務的該位址出**手續費將餘額全部轉走。

以上就是新手常見的被盜場景之一,或許你還正在疑惑為什麼我發出交易的時候**報轉賬手續費不足,而在這之前你的以太幣已經不翼而飛。針對這個問題最簡單的防護措施就是確保伺服器的訪問限制。至於更高階的安全防護新手很難做的,也是乙個很大的課題,後面的文章中會陸續講解。

獲得一對一技術諮詢請掃碼加入知識星球(小密圈)

gridview問題解答

這樣寫 printisopen convert.toboolean datebinder.eval container.dataitem,isopen cs 是這樣的 public string printisopen bool bisopen else return strhhtml 或者說是這樣...

gridview問題解答

這樣寫 printisopen convert.toboolean datebinder.eval container.dataitem,isopen cs 是這樣的 public string printisopen bool bisopen else return strhhtml 或者說是這樣...

jquery 問題解答

1 var v summer input input val 根據class獲取input 2 var v input name user name val 轉義帶.的name 轉義 3 var v input eq 2 val 獲取div內倒數第二個input元素 倒數可以寫負數 4 物件 div...