Ether

TheDAO 黑客常見問題解答:2016 年 6 月 17 日的攻擊是如何發生的?

  • April 27, 2017

誰能解釋一下 DAO 攻擊是如何發生的?Vitalik Buterin在這裡解釋說,它是通過將 DAO 從主 DAO 中分離出來但split遞歸呼叫函式來執行的。

我們知道遞歸函式是一種呼叫自身的函式,但我不確定它是否與 DAO 攻擊中發生的情況相同。

誰能解釋遞歸呼叫函式是什麼意思,以及在最近對 DAO 的攻擊中究竟是如何發生的?

任何閱讀這篇關於攻擊向量的文章和這篇論壇文章的人都可能會發現 Ursium 的自信是錯誤的,因為拆分函式呼叫了獎勵函式。那麼對於一個平庸的開發者來說,執行攻擊就很容易了web3.js

**發生了什麼?**3,641,694 ETH 從 DAO 中分離出來。攻擊者在正常 splitDAO 函式中發現了一個漏洞,以便他們可以一遍又一遍地重用相同的 DAO 令牌。

**攻擊究竟是如何進行的?**攻擊者設法結合了 2 個漏洞。第一個漏洞是遞歸呼叫 split DAO 函式。這意味著第一個正常呼叫將觸發該函式的第二個(不規則)呼叫,而第二個呼叫將觸發另一個呼叫,依此類推。以下呼叫是在攻擊者的餘額設置回 0 之前的狀態下完成的。這允許攻擊者在每筆交易中拆分 20 次(必須查找確切的數字)。他不能做得更多——否則交易會變得太大,最終會達到區塊限制。這種攻擊已經很痛苦了。然而——真正令人痛苦的是,被攻擊者設法從相同的兩個地址用相同的令牌一遍又一遍地複制這種攻擊(每個地址大約 250 次)。因此,攻擊者發現了第二個漏洞,該漏洞允許在不破壞主 DAO 中的令牌的情況下進行拆分。他們設法在將令牌發送到地址 0x0 之前將其轉移走,然後才將它們發送回)兩種攻擊的結合使效果倍增。對它的一次攻擊將是非常資本密集型的​​(您需要預先提出 1/20 的被盜金額)——第二次攻擊將花費很長時間。

**DAO 中剩餘的乙太幣安全嗎?**不——這個漏洞很可能被用來從 DAO 中耗盡所有乙太幣。當 Vitalik 寫了他的第一個部落格回复提到軟分叉和硬分叉的計劃時,攻擊者停止了消耗 ETH。我們可以假設黑客出於戰略原因停止了分叉的社區決策。然而——被攻擊者也在其他分叉提案中投票——更多細節請看 這裡

**由於攻擊者的 ETH 位於 theDAO 合約的副本中 - ETH 是否可以以同樣的方式被盜?**如果至少有一個誠實的演員投票支持這種分裂,這將是可能的。由於攻擊者很可能是該 DAO 的唯一股東和管理者,因此無法進行相同的攻擊。

**提議的軟分叉將如何工作?**軟分叉將是主要購買時間的直接行動。礦工可以修改乙太坊客戶端,使其忽略所有交易,因為交易的結果是從具有 DAO 程式碼的地址中扣除 ETH。礦工也會忽略包含此類交易的其他礦工區塊。如果大多數礦工決定這樣做,那麼每個人都無法從每個“theDAO”版本中轉移 ETH。所以它會影響主要的“theDAO”和所有的分裂——包括正常分裂和惡意分裂。

**具有此修改的 ETH 軟體版本是否已經可用?**是的 - Parity 和 GETH 已經發布了正確的版本。

**啟動軟分叉需要做什麼?**這需要大多數礦工的協調努力。協調很重要,否則礦工可能會失去他的 ETH。例如,如果您是單人挖礦,則不應切換到已修補的版本,除非您確信大多數礦工都這樣做了,否則您的軟體將忽略最長的鏈,因為它會將其視為無效。

礦工需要相互溝通,並在未來定義一個區塊,用於切換到新版本。一旦大多數人接受新版本,礦工不使用新版本就很危險。

**如果軟分叉成功 - 前進的道路是什麼?**軟分叉很可能只是一個臨時解決方案。如果這將是最終的解決方案,那將意味著基本上所有 DAO 合約上的所有 ETH 都將被永久凍結。還有兩條更可能的前進道路。首先是硬分叉——硬分叉實際上一切皆有可能——我們稍後將討論可能的路徑。freez 軟分叉的第二條路徑是只允許某些類型的交易。假設不再有 ETH 從 DAO 中流失,更具體的軟分叉 2 可以允許每個 DTH 獲得剩餘 ETH 的份額。

**如果軟分叉沒有成功——會發生什麼?**非常混亂的攻擊和反擊。黑白熱黑客將開始利用此漏洞。但是,由於每個拆分都是公開的,因此每個人都可以加入每個拆分。正確的策略是將您的代幣拆分為在每個拆分中擁有非常少量的代幣。因此,如果有人正在執行攻擊,其他人也將在分裂的 DAO 中擁有份額 - 這將允許他們稍後在創建期結束後在 newDAO 中再次執行此攻擊。這可能導致無休止的分裂。它將激勵向網路發送垃圾郵件或賄賂礦工以審查交易。此外,很可能會發現和利用其他錯誤。如果我們最終在這個階段結束,那麼所有非技術 DTH 很可能會失去一切。

**支持和反對軟分叉的論據是什麼?**軟分叉的最大論據是防止沒有一個會發生的巨大混亂。有反對它的哲學論據 - 本質上,軟分叉將是一種審查形式。然而——受這種審查影響的大多數人會非常歡迎它(所有 DAO 代幣持有者)期待攻擊者。但是 - 有一小部分人也受此影響,他們可能不想要它 - 每個人都定期吐口水,並且相信這個分裂的 DAO 中沒有其他股東會攻擊他們(例如,因為他們是唯一的一)。

**何時以及如何進行硬分叉?**硬分叉需要更長時間的討論和達成共識。執行硬分叉礦工不太重要。更重要的是生態系統中的交易所和關鍵參與者。(乙太坊基金會、核心開發者、生態系統領先企業)。如果所有這些玩家都同意硬分叉,那麼即使是少數礦工也足夠了,但更重要的是——礦工幾乎肯定會在這些條件下加入。通過原則上的硬分叉,所有規則更改都是可能的。可以創建新的 ETH,可以銷毀合法的 ETH 等等。但是 - 社區同意這樣的分叉的可能性為 0。所以我們可以縮小預期範圍。在高端(按每個 DAO 代幣的 ETH 價值規模)將是所有非法分裂的完全恢復。這意味著 DAO 代幣可以再次以每個 0.01 ETH 的價格贖回。下限將是 DAO 合約中剩餘的 ETH 比率——目前為 0.006857 ETH(沒有額外餘額)。但是 - 對於這樣的解決方案,不需要硬分叉,可以使用軟分叉來完成。因此,共識解決方案也可能是僅恢復部分。其他的可能會被銷毀或用於某種形式的共同利益(例如乙太坊基金會,將資助未來安全審計的去中心化基金,)

附加資訊:

**硬分叉和軟分叉有什麼區別。**軟分叉意味著曾經有效的狀態/塊在新版本中不再有效。在這種情況下,將導致使用 DAO 程式碼從任何合約中花費 ETH 的狀態將被視為無效。硬分叉使之前無效的狀態有效。軟分叉的一大優勢是只有礦工需要更新他們的軟體。儘管最終每個人都應該 - 如果每個人都等待足夠的確認,他們將只接受在新規則下有效的狀態。然而,在硬分叉中,每個人(消費者、交易所……)都需要更新他們的軟體。否則他們就有失去乙太坊上的 ETH 和其他資產的危險。出於這個原因,分叉協議和分叉執行之間的時間應該比軟分叉中的時間長得多。

**我們能否追踪攻擊者的身份。**這是一個懸而未決的問題。攻擊很可能沒有提前很長時間計劃,因此黑客可能會犯錯誤,因為使用可連結到其身份的地址。這是所涉及帳戶的出色概述。黑客很小心,只使用了來自 shapeshift 的交易中的 ETH。

When did the hacker started to plan this attack? The two key contracts that held the tokens and had the logic in that allowed the recursive split where created 2 days before the attack. So at least two days. However - a split was initiated 7 days before the attack. However - it is not yet 100% clear if the attacker and the initiator of that split are the same. It likely but not necessary. The attacker could have used any split proposal. But even if the attacker was the initiator of the split it does not mean that they were preparing the attack already back then. Under the assumption that theDAO was bug free there has been an arbitrage opportunity of buying DAO tokens for less than 0.01ETH and converting them to 0.01ETH with a split.

**如果實施了軟分叉——我還能轉移 DAO 代幣嗎?**是的 - 任何不影響帶有 theDAO 程式碼的合約的 ETH 餘額的交易仍然是可能的。可以在此處找到有關不同分叉解決方案的更多詳細資訊

該 wiki由 koeppelmann從https://www.reddit.com/r/ethereum/comments/4os7l5/the_big_thedao_heist_faq開始。社區進行了進一步的更新。

引用自:https://ethereum.stackexchange.com/questions/6183