지난주에 다오사태를 해결을 위해 제안된 소프트 포크 솔루션이 DoS 공격 취약점하다는 점이 발견되어 포기를 했었습니다.
제안된 소프트 포크 솔루션의 주 목적이 해커가 가진 주소가 이더를 움직이는 새로운 트랜잭션을 일으키지 못하게 막는 것이었는데,
만일 해커가 이를 역이용해, 대량의 invalid 트랜잭션을 네트워크에 쏟아부으면, 마이너들이 블럭생성을 거의 할 수 없는 상태로 만들 수 있다는 것이었습니다.
http://hackingdistributed.com/2016/06/28/ethereum-soft-fork-dos-vector/
이러한 DoS 공격이 가능해지는 근본적인 이유가 이더리움의 튜링완전성과 개스시스템 때문이라는 것이었습니다.
무슨말인가 하면,
소프트포크에 의해서 다크다오가 새로운 스플릿을 하지 못하게 막혔다고 가정합시다.
그렇게 되면 다음과 같은 코드를 해커가 마이너에게 보낼 수 있습니다.
for(uint32 i=0; i < 1000000; i++)
{ sha3('some data'); // costly computation }
DarkDAO.splitDAO(...); // render the transaction invalid
컴퓨팅 리소스를 잡아먹는 sha3 해시함수를 루프문으로 마구 돌린다음, 마지막에 소프트포크에 의해 invalid 하게 된 DarkDao.splitDAO() 펑션을 실행하면 전체 실행이 무효가 되고 이 콜은 에러처리됩니다. 그러나 이 때 보통같으면 개스가 부과되어서 공격자가 엄청난 비용을 물어야 되는데, 이 경우는 공격자에게 개스를 물릴 수가 없습니다. 왜냐하면 개스를 물리려면, 이 트랜잭션을 블럭체인에 올려야 되는데, 이렇게 되면, 소프트포크를 업데이트 하지 않는 노드는 이 트랜잭션을 valid 하다고 판단할 것이고, 이렇게 되면, 소프트포크를 업데이트한 마이너의 데이타와 충돌이 생깁니다. 결국 하드포크를 하지 않고서는 이러한 DoS 공격에 대해 개스를 물릴 수가 없습니다.
결국 소프트포크를 이용한 대부분의 시도는 이더리움의 내재적 특성때문에 DoS 공격 취약점을 노출시킬 수 있다는 것이죠.
이러한 발견이 일단은 다오 사태의 빠른 해결을 기다리고 있던 커뮤니티에게는 상황을 더욱 불확실하게 하는 요인이었습니다.
그런데 이 문제를 좀 더 일반적인 각도에서 보자면, 이더리움의 내재적 강점으로도 볼 수 있다는 것입니다. DoS 공격의 취약을 지적한 팀은 코넬대 교수인 Emin 와 주변학생들및 다른 연구자들의 모임인데, 이러한 강점의 성격을 다음의 글로 정리했습니다.
http://hackingdistributed.com/2016/07/05/eth-is-more-resilient-to-censorship/
소프트포크가 이루고자 했던 것이 결국은 일종의 해커가 일으키는 트랜잭션을 찾아서, 이것만 필터링하는 일종의 검열(censorship) 과정인데, 이것이 DoS 공격의 위험때문에 내재적으로 사실상 불가능하다는 것입니다.
예를 만일 정부가 모든 불법 도박과 관련된 트랜잭션을 주소레벨에서 필터링해서 다 막으라는 지시를 해도, 이것을 이행할 수 있는 소프트포크적인 방법은 거의 불가능하다는 것이죠. 심지어는 대다수의 마이너들이 전부 매수되어서 필터링을 하려고 시도해도 이것에 대한 DoS 역공격때문에 마이너의 공격이 실패할 것이란 겁니다. 마이너들이 DoS 공격때문에 모든 트랜잭션을 전부 처리할 수 없는 상황이 되면, 51% 이상의 해시파워를 가지고 있어도 필터링을 할 수 없다는 이야기가 됩니다.
심지어는 비탈릭과 파운데이션, 대부분의 마이너 풀, 커뮤니티의 대다수가 동의를 했어도 소프트 포크를 할 수 없었던 것처럼 앞으로도 이더리움의 이러한 소트트포크적인 솔루션들은 작동시키기 매우 어려울 것이라는 것입니다.
사실 비탈릭은 이미 오래전에 검열이 불가능하거나 매우 어렵게 하는 시스템에 대해 이미 논의한 바가 있습니다.
https://blog.ethereum.org/2015/06/06/the-problem-of-censorship/
이미 현재의 상태만으로도 이러한 아이디어가 이미 어느정도 구현되었다는, 심지어는 자신조차도 그런 검열을 할 수 없었다는 것을 증명하고 있군요.
참고로 이러한 안티검열적 특성은 이더리움에 고유한 것인데, 그 이유는 위에서도 이야기했지만, 튜링완전성과 개스시스템 때문에 생기는 것입니다. 따라서 비트코인에는 적용이 되지 않습니다.
==============
자 이제 남은 것은 하드포크 뿐인데, 이것을 가능케하는 것은 결국 커뮤니티의 consensus이고 이 과정에 대해서는 다른 글로 포스팅하겠습니다.