You are viewing a single comment's thread from:

RE: STIMCITY 셀러 필수! , 새로워진 스팀페이 파헤치기.

in #kr7 years ago

오랜만에 논쟁이 재미있네요~

(1) 스팀콘넥트에 대해서 정리해보겠습니다.

  • 스팀콘넥트는 송금/임대 등의 기능이 필요할 때, 키를 서버로 전송하지 않고 로컬에서 서명 처리하여 스팀 블록체인에 직접 브로드캐스팅한다. (보안문제 없음)
  • 포스팅키/메모키는 써드파티 앱들이 재인증없이 사용할 수 있도록 서버에 저장하고 해당 키를 사용할 수 있는 토큰을 써드파티 앱에 제공한다. (유토피안 해킹에 해당하는 내용. 중앙화된 방식으로 인한 보안 문제는 있으나, 포스팅키라서 위험도는 낮다)
  • 스팀콘넥트는 웹페이지로 제공하고 있으니, 비밀번호나 액티브 키는 사파리/크롬에 비밀번호로 저장된다. 액티브 키를 송금 때마다 매번 입력해야 하는데, 사용상의 불편함 때문에 비밀번호 저장 기능을 이용하는 경우 정도는 허용할 수 있다. (이 경우의 위험도는 사파리나 크롬에 저장되는 비밀번호의 보안 수준에 따름)

이렇게 정리하면 될까요? 여기서 언급되지 않은 보안 문제는 똑같은 모양의 웹페이지를 이용한 피싱 공격이 있을 수 있을 것 같습니다. 웹페이지 기반의 암호화폐 월렛들이 공통적으로 갖고 있는 보안 위험이죠. 이런 정도의 보안 수준에 대한 평가는 제각각일 수 있으니 이 정도에서 만족하고, 다음 이슈로 넘어가겠습니다.

(2) 탈중앙화 블록체인에서 oauth 방식은 허용되어서는 안됩니다.

페이스북/구글 등 oauth 방식을 제공하는 건, 제 3자에 대한 신뢰 문제를 해결하려는 것이지, 보안 상에 문제가 없기 때문이 아닙니다. 지난 1년 동안 주변에서 페이스북 계정으로 타임라인에 성매매 광고가 달린 경우가 10건은 넘는 것 같습니다. 페이스북에는 자기 자산이 없기 때문에 문제가 덜 했던 거지, 자산이 있었다면 그게 어찌 조용히 넘어갈 일이겠습니까.

스팀콘넥트가 oauth 방식으로 신뢰 문제가 아닌 보안 문제를 해결할 수 있을까요? 제가 모이또의 보안을 설계하면서 가정한 여러 공격들 중 하나만 언급해보겠습니다.

제 3자 웹/앱이 사용자에게 비밀번호나 액티브 키를 입력할 것을 요구하여 탈취하는 경우

스팀콘넥트가 매번 액티브 키를 입력받으니 안전한 것처럼 말씀하시지만 그거야 말로 위험합니다. 사용자들이 액티브 키를 입력하는 것을 너무 당연하게 만드니까요. 해커가 스팀콘넥트를 사용하는 웹페이지를 만들어서 정상적으로 스팀콘넥트로 연결시키다가 가끔씩 스팀콘넥트와 동일한 모양의 가짜 페이지를 보여주고 액티브 키를 넣으라고 하면 어떻게 될까요?

모이또는 이 공격을 피하기 위해, 제 3자 앱이 액티브 키를 요구할 수 없도록 했습니다. 한번 로그인된 이후에는 보안 PIN 번호를 입력하도록 하며, 비밀번호나 액티브 키를 직접 입력받지 않도록 한 것입니다. 또한 이번 버전에는 아니지만 다음 버전에서는 사용자의 개인키로 보이는 입력은 아예 거부되도록 만들 예정입니다.

이외에도 여러 공격들을 가정했지만, 지면상 생략하겠습니다.

(3) "모이또가 Compromized 된 디바이스에 설치되면 어떤 일이 발생할까요?"

컴프로마이즈 되었다는 게 뭔지 잘 모르겠지만, 디바이스 전체의 권한이 해커에게 넘어간 정도라고 추측하겠습니다. 그렇다면 왜 이게 모이또가 받아야 할 비판인지 잘 모르겠습니다. 이 상황에서 스팀콘넥트는 안전한가요? 콜드 월렛(하드웨어 월렛) 이외에 저 상황에서 안전한 지갑이란 있을 수 없습니다.

해킹당해봐야 한계정이라고 하신것은 놀라운 발상입니다. 그 한계정이 개인에게는 전부입니다.

이 말은 사과를 받아야겠습니다. 제 말의 의도를 악의적으로 왜곡하셨습니다. 피해의 범위가 전체적이냐 국지적이냐는 논의라는 것을 아셨을 텐데, 이렇게 표현하는 이유를 짐작하기 어렵네요. 이건 스팀콘넥트가 액티브 키를 서버에 저장하지 않고 디바이스에만 저장하는 이유와도 같은 겁니다.

@absbear님 덕에 오랜만에 논쟁다운 논쟁을 해봅니다. 다른 분들도 함께 논쟁해봐도 좋을 것 같은데, 왠지 @ukk 님의 글에서 논쟁을 하는 게 많이 죄송하니, 다른 글타래를 만들어 봐야겠습니다.

Sort:  

주장하시는 바를 잘 모르겠습니다. Dapp들이 키를 소유하는 것이 더 안전하다는 것으로 해석하면 될까요? 처음에 스팀커넥트가 키를 네트워크로 전송해서 서버에 전송하기때문에 위험하다고 하시기에, 이해 부족으로 하시는 말씀이라 생각하고 아키텍쳐를 설명 드렸는데 다시 다른 이야기를 하시니 혼란스럽네요. 그리고 여전히 스팀커넥트에 대해 명확하시지 않은 듯 합니다.

  1. 스팀커넥트는 어디에도 키를 저장하지 않습니다. 심지어 스팀커넥트를 사용하는 디앱들은 키를 전혀 억세스하지못합니다. 이게 이용자들이 거부감없이 디앱을 사용할 수 있도록 하는 핵심이죠.

  2. 아시겠지만 스팀커넥트는 지갑과는 전혀 관계가 없고 지갑 없이도 블록체인의 인증이 필요한 서비스를 제공 할 수 있도록 해주는 서비스이죠. 스팀커넥트의 Oauth 과정은 키를 인증하는것이 아니라 위임을 인증하는것이며, 이 oauth 없이 서비스를 만들 방법 자체가 없습니다. 최악의상황에 유출될 수 있는 권한은 포스팅키 권한이며, 포스팅키는 steemit.com 사이트가 localstorage에 암호화 없이 저장하므로 최악의상황치고는 매우 안전하다고 할수 있습니다. 이걸 해서는 안되는거라고 말씀하시는 것은 제 관점에서는 잘못된 정보를 퍼뜨리시는것과 다름 없습니다. 스팀커넥트가 없으면 모든 디앱들이 지갑이 되어야 하고 직접 키를 관리해야 하며 이는 더 큰 위험을 초래합니다. 절대로 권장해서는 안되는 방식입니다. 개발하는 입장에서는 키를 가지고있는게 쉽습니다. 하지만 더 안전하다는것은 동의할수가 없습니다.

  3. Compromized 단말은 모든 권한이든 일부 권한이든 말웨어에게 노출된 상태의 os를 말합니다. 이 상태는 어느 단말에서나 발생할 수 있습니다. 이부분은 부정할 수 없는 사실입니다. 그럼 답은 단순합니다. 당연히 앱 내부적으로 방어할 수 있어야 하죠. 방어 할 수 없다면 사용해서는 안됩니다. 모히또에서는 어떤 방식으로 방어하는지 알고싶습니다. 키 암호화는 얼마나 안전하며 로컬 스토리지 보안과 사용자 핀코드입력 후킹 관한 보안은 구현 되어 있는지를 설명하실 필요가 있습니다. 깃헙을 잠깐 봐서는 못찾겠더라구요.

단말이 Compromized 되면 웹은 뭐가 다르냐 하실텐데, 일단 메이저급 브라우저의 보안수준과 샌드박싱수준은 상상을 초월합니다. 크로미움의 보안수준은 거의 완벽에 가까운데도 불구하고 계속 생겨나는 시큐리티 홀때문에 최고수준의 엔지니어들이 추가적인 보안패치를 끊임없이 합니다. 이러한 수준의 앱 자체 보안을 일반 소규모 앱들이 자체적으로 구현 한다는것은 현실적으로 불가능 하다고 봅니다. 모이또는 실제로 키를 로컬에 저장하는 지갑 앱이므로 상당한 부분의 자체 보안이 요구 됩니다. 은행 앱처럼 말이지요. 혹시 구현되어 있다면 그부분의 깃헙 링크를 주시면 제가 한번 보도록 하겠습니다. 그리고 처음에 여쭤본 키암호화 로직 관련코드도 부탁드리구요.

지갑이 필요하면 지갑을 만들면 되는 것이며 그에 상응하는 수준의 보안 수준을 갖추면 됩니다. 이를 스팀커넥트의 보안이 좋지 않으니 키를 저장하는 지갑 방식이 더 안전하다고 하시는것은 문제의 소지가 있습니다. 액티브키를 넣는것이 불편한것때문에 오너키를 넣는다는것도 논란의 여지가 있습니다.

스팀잇에 계시는 수많은 다른 개발자분들과 아키텍트 분들의견도 들어보면 모두에게 도움이될듯 합니다. 모이또 프로젝트에도 장기적으로 자양분이 될것입니다. 관련 글을 곧 올리도록 하겠습니다. 감사합니다.

논점을 명확히 해야 할 것 같습니다.

스팀콘넥트 관련하여 제가 제기한 문제는 다음 두가지 입니다.

  1. 유토피안 해킹으로 드러난 키의 중앙화 문제
  2. 웹페이지 형태로 제공하기 때문에 발생하는 구조적 보안의 위험

1번은 포스팅 키만 그런 위험이 있는 걸로 이해했습니다. 액티브 키의 위험까지 제기한 것은 제가 잘못 파악한 것으로 정리하겠습니다.

2번은 마이이더월렛 등의 웹페이지 기반 지갑에서 공통적으로 발생하는 문제입니다. [MEW] 마이이더월렛 해킹에 주의하세요 글을 참조하는 게 좋겠네요. 이 부분은 향후 웹페이지 기반의 지갑들에서 크게 골치를 썩을 주제입니다. 스팀컨넥트도 마찬가지구요.

사람들이 스팀컨넥트와 동일한 모양의 가짜 웹페이지를 진짜 스팀컨넥트 페이지와 잘 구별할 거라고 생각하는 건 나이브합니다. 그래서 웹페이지 기반의 지갑은 구조적 보안의 위험을 안고 있다고 제가 말씀드리는 겁니다. 스팀컨넥트가 지갑과는 관계없다고 하셨지만, 송금 등의 트랜잭션을 처리할 수 있는 능력을 가진 건 모두 지갑의 범주로 넣어도 됩니다.

모이또가 보안에서 완벽할 수는 없겠지만, 기존 지갑에서 발생하는 보안의 위협을 매우 신경쓰면서 개발하고 있습니다. 이 부분은 곧 공개될 모이또 백서에서도 주요하게 언급하고 있는 내용입니다. 저희는 적어도 웹페이지 기반의 지갑보다는 앱 기반의 지갑이 구조적으로 안전하다고 주장하고 있습니다.

깃헙에서 __load_key 부분을 왜 못찾으셨는지 모르겠지만, 모이또는 액티브 키를 사용자가 직접 입력한 PIN 번호 (토스에서 사용하는 방식)로 암호화한 뒤, 애플/구글에서 제공하는 키체인에 보관합니다. 지금 푸쉬되어 있는 코드에서는 PIN 번호로 암호화하는 부분에는 주석처리가 되어 있으니, 코드 리뷰시 참고해주시면 감사하겠습니다. 보안 관련 작업이 완료된 버전은 오늘/내일 중에 푸시될 예정입니다.

애플/구글은 일반 앱들에게 키체인이란 이름의 강력한 보안 기능을 제공합니다. 앱 개발을 해보신 적이 있으신지는 모르겠지만, 키체인을 사용하는 일반 앱은 보안에 취약하고 웹브라우저의 보안은 강력하다는 주장은 받아들이지 않겠습니다. 스팀컨넥트를 사용하여 웹브라우저에 저장된 액티브 키는 암호화 되어 있지 않은데 반해, 모이또는 사용자가 입력한 PIN 번호로 한번 더 암호화하여 저장한다는 점도 고려해주시기 바랍니다.

OAuth 프로토콜에 대해서는 저와 이해가 다른 부분이 있는 듯 하나, 곁가지일 뿐이니 논쟁하지는 않겠습니다. 제 일관된 주장은 웹페이지 형태로 지갑기능을 제공하는 서비스의 보안 위험성에 관한 것이니까요.

제가 모이또를 처음 언급한 글에 @absbear 님이 달았던 댓글에서 보안 문제가 언급되어 있어서, 모이또의 보안 수준에 대한 논의를 해봐야겠다고 생각했는데, 이번 논쟁으로 제 주장을 충분히 풀어낼 수 있어서 만족하고 있습니다.

원래 이 논쟁이 시작된 계기인 모이또의 결제 관련 기능에 대해서는 따로 글을 올리도록 하겠습니다.

답변 감사드립니다. 발전적인 논의는 늘 환영합니다.

여러 암호화폐를 보면 지갑 해킹 사건은 한두번 있는 일도 아니니 언제든 다시 발생할수있다고 생각합니다. 해킹당한 지갑들도 당시에는 보안적으로 월등하다고 "알려진" 지갑들이구요. 이경우에 있어서 모이또가 다른 지갑과 다르다고 생각하지 않습니다.

지갑을 사용하는 것은 전적으로 개개인의 자유이므로 피해도 개인들이 감수해야 하는것입니다. 그런데 모이또의경우 스팀시티 커뮤니티에서 밀고있는 지갑이기때문에 개개인의 자세한 조사없이, 대외적인 시큐리티 리뷰 없이 사람들이 많은 사람들이 단말에 설치하게 될것이라는점이 우려되는것입니다. 이것이 과도한 우려라고 생각하시지는 않으시리라 믿습니다.

1번은 포스팅 키만 그런 위험이 있는 걸로 이해했습니다. 액티브 키의 위험까지 제기한 것은 제가 잘못 파악한 것으로 정리하겠습니다.

스팀컨넥트를 사용하여 웹브라우저에 저장된 액티브 키는 암호화 되어 있지 않은데 반해

우선 이부분은 정확히 해야할듯 합니다. 스팀커넥트 사용 과정에서 키는 서버, 클라이언트 그 어디에도 저장되지 않습니다. 포스팅키도 저장되지 않습니다.

제 일관된 주장은 웹페이지 형태로 지갑기능을 제공하는 서비스의 보안 위험성에 관한 것이니까요.

스팀커넥트는 지갑이 아닙니다. 지갑 없이 DAPP을 구축할 수 있는 인증서비스죠. 그게 제가 혁신적이라고 생각하는 점이구요. 스팀커넥트가 없었으면 지금까지 믿고 사용할 Steem DAPP이 하나도 없었을겁니다.

애플/구글은 일반 앱들에게 키체인이란 이름의 강력한 보안 기능을 제공합니다. 앱 개발을 해보신 적이 있으신지는 모르겠지만, 키체인을 사용하는 일반 앱은 보안에 취약하고 웹브라우저의 보안은 강력하다는 주장은 받아들이지 않겠습니다.

그부분 코드를 찾지못했는데 키체인을 사용하신다면 키 스토리지 보안은 문제없을듯합니다. 나머지 보안 관련 코드 푸시되면 kr 개발자분들이 리뷰에 참여하시면 좋겠습니다. 그리고 유토피안등을 통해서 리뷰를 부탁해보는게 어떻까 싶습니다. 앱의 기본적인 샌드박싱에 대해서는 잘 모르는데 설명해주시면 제가 비교하는데 수월할듯 합니다. 어디까지 외부 후킹을 막아주고 어디까지 샌드박싱을 해주는지요?

스팀컨넥트가 지갑이 아니라서 믿을 수 있다는 건 사실이 아닙니다. 그 내용은 스팀페이 사용할 때 액티브 키 탈취하는 시연 영상으로 대신하겠습니다.