[스팀콘넥트의 위험성] 스팀페이 사용할 때 액티브 키 탈취하는 시연 영상

in #kr6 years ago (edited)

안녕하세요. 스팀시티 온라인을 담당하고 있는 @hanyeol입니다.

시작은 @asbear님과의 스팀컨넥트 보안에 관한 댓글 논쟁이었습니다. 스팀콘넥트를 처음 접했을 때 든 생각은, 이런 걸 암호화폐 시스템의 서비스로 제공해도 되는지에 대한 의아함이었습니다. 보안에 대한 저의 관점에서 봤을 때, 스팀컨넥트는 보안에 매우 취약하게 설계된 서비스였습니다. 웹페이지로 지갑 기능을 제공하는 서비스보다도 더 보안에 취약한 사용자 경험을 제공하는 서비스였거든요. 물론 개발자들은 편하죠. 하지만 편의성을 위해 보안 수준을 희생한 서비스였습니다. 이 때는 제가 소극적으로 생각했습니다. 나만 안쓰면 되지, 뭐, 제가 스팀 관계자도 아닌 마당에 이런 걸 이슈화할 필요가 있나 싶었으니까요.

하지만 @asbear님과의 댓글 논쟁을 하면서, 생각이 바뀌었습니다. 저는 스팀콘넥트를 제공하는 사람들과 이를 이용하는 개발자들이 스팀콘넥트가 왜 위험한지는 알고 쓴다고 생각했습니다. 편의를 위해 보안을 희생했으니, 좀 더 조심하게 사용하고, 사람들에게 그 위험성 정도는 고지해가며 사용하는 거죠. 하지만 @asbear님은 정말로 스팀콘넥트가 안전하다고 생각하시는 것으로 보였습니다. 게다가 스팀컨넥트가 1위 증인에 의해 만들어졌다는 사실도 알게 되었습니다. 아, 그래서 아무런 비판이 없나? 근데 큰일인데? 이렇게 스팀컨넥트가 안전하다는 믿음으로 광범위하게 사용하게 되면, 게다가 포스팅만이 아니라 스팀페이처럼 송금 기능까지 제공하는 서비스가 늘어난다면, 결국 스팀 블록체인의 근간까지 흔들 커다란 보안 사고가 터지겠구나 싶었습니다.

그래서 댓글에서 물러서지 않았습니다. @asbear님을 포함하여 그 댓글을 보는 사람들이 스팀컨넥트에 대한 경각심을 가져주기를 바랬습니다. 하지만 실패한 것 같습니다. 스팀컨넥트의 보안 취약성에 대해서 인정하고 해결 방안을 찾기를 바랬는데, 돌아온 대답은 스팀컨넥트는 안전하다는 말이었습니다. 아, 어떻게 할까요.

떠오르는 방법은 하나 밖에 없었습니다. 스팀컨넥트가 보안에 얼마나 취약한 지 직접 눈으로 보여주자. 그래서 앱을 하나 만들었습니다. QR코드 스캐너 앱입니다. 앱스토어/구글플레이에 잔뜩 깔려있는 앱 중에 하나죠. 스팀페이는 QR코드를 사용하니, 사람들은 QR코드 스캐너를 사용할 것이고, 그렇게 사용하는 QR코드 스캐너 앱 중 하나가 나쁜 마음을 먹고 스팀페이를 통해 사용자의 액티브 키를 훔치는 시나리오를 떠올렸습니다.

1시간 만에 만든 앱인데, QR코드 -> 스팀페이 -> 스팀컨넥트를 통해 액티브 키 혹은 비밀번호를 탈취하는 데는 아무런 문제가 없었습니다. 그 탈취과정을 찍은 영상을 공유하겠습니다.

가짜 스팀페이 페이지를 만든게 아닙니다. 가짜 스팀컨넥트 페이지로 피싱한 것도 아닙니다. 정상적인 경로로 스팀페이를 사용했고, 안전하다는 스팀컨넥트를 이용했습니다. 하지만 저 앱은 이미 스팀컨넥트 웹페이지의 모든 제어권을 갖고 있죠. 그렇게 액티브 키가 쉽사리 유출되었습니다.

Screen Shot 2018-06-24 at 5.04.50 AM.png

이 보안 문제가 저 앱 때문에 발생했다고 생각하시나요? 아닙니다. 웹페이지에서 송금할 때마다 직접 액티브 키를 입력받게 하는 스팀컨넥트의 취약한 보안 설계 때문에 발생한 일입니다. 제가 보여드린 방법은 스팀컨넥트의 취약한 보안 설계를 뚫을 수 있는 수많은 방법 중 그저 하나일 뿐입니다.

그래서 부탁드립니다. 다시 한번 생각해봐주세요. 스팀컨넥트를 이용한 송금 기능이 매우 큰 보안의 위험에 노출되어 있다는 건 변할 수 없는 사실이기 때문입니다.

긴 글 읽어주셔서 감사합니다.

Sort:  

시큐리티 측면에서는 Application Level과 OS Level은 구분해야하지 않을까 싶습니다. 웹이든 앱이든 응용프로그램이 악성 OS 위에서 돌아가면.. 뭐 어쩔 수 있나요.

이것은 스팀커넥트의 위험성이 아니라, Custom Browser나, Custom Application의 위험성에 가까워 보입니다.

Google Chrome은 해킹된 OS에서 돌아갈 수 있기 때문에, Chrome은 보안성이 떨어진다라고 표현하긴 어렵지 않을까요? 나노렛져같은 하드웨어 + 소프트웨어까지 통제하는 형태가 아닌 이상, 취약성은 앱과 웹은 그게 그거 아닐까 싶습니다.

@asbear님과 @hanyeol 님의 토론에 대한 관점이 흐려진 것 같아 안타깝게 생각합니다. 저도 @ludorum 님 의견에 동의하고요, 추가로, 몇 가지 내용을 덧붙입니다. 우선, 스팀커넥트는 jesta가 아니라 busy.org의 주도로 시작된 프로젝트입니다. . 관련 블로그 글에서 프로젝트를 시작한 이유에 대해서 설명하고 있으니 추가적인 정보는 덧붙이지 않겠습니다. 유토피안 해킹과 관련해서는 스팀커넥트의 offline access 기능과 유토피안 측의 복합적인 문제로 인해 발생한 사건입니다.. 또한, 스팀커넥트는 여러 개발자와 전문가가 참여해서 개발이 진행되어 왔고, 많은 분들이 리뷰에 참여했습니다. 완벽한 보안은 없기 때문에 스팀커텍트는 해킹 위협으로부터 안전하다고는 말씀 못드리겠지만 프로젝트가 진행되는 과정에서 충분한 검증은 마쳤다고 생각합니다.

아니 이건 브라우저컴포넌트내장된 qr코드 앱 직접 만들어서 시연하신거잖아요. 누가 대충보면 진짜 해킹이라도 하신줄 알겠네요.

본인이 만드시는 지갑앱이 왜 다른 지갑들보다 안전한지에대해 설명 부탁드렸는데 왜 있지도 않은 스팀커넥트의 시큐리티홀을 자꾸 역으시나요. 그거 백번 깎아 내리셔도 모이또의 보안에 도움되는건 하나도 앖는데요. 보여주시는 김에 Compromozed된 단말에 모이또 깔고 오너키 탈취되는 데모도 보여주시죠. 그건 실제로 일어날수 도 있는 일인데요?

은행앱들이 포커스 잃으면 (다른앱으로 전환하면) 로그오프 해버리는 이유 아시죠? 이에 대해서 모이또에는 어떤 비슷한 보안 로직이 구현되어 있는지라도 대답해주세요.

일단 댓글들을 보니 "토론"을 "논쟁"이라고 지칭하시는 것으로 보아 건설적인 토론은 어려울듯 하니 그동안 주고받은 댓글을 모아서 포스팅 하는 것을 끝으로 저는 관여 안하겠습니다.

제가 보여드린 시연의 의미를 정말로 모르시는거죠? 해킹은 필요도 없어요. 그냥 평범해보이는 앱을 앱스토어나 구글플레이에 올려놓으면 그만입니다. 이게 얼마나 쉽게 일어날 수 있는 일인지 이번 시연으로 보여드린 겁니다. 이게 실제적인 위협으로 느껴지지 않는다면 저 역시 더 말을 할 필요가 있나 싶긴 하지만, 이 글을 보는 다른 분들을 위해 마지막 설명을 드리겠습니다.

앱 형태의 지갑이 웹페이지 형태의 지갑보다 안전하다

웹페이지 형태의 지갑 혹은 지갑 기능을 수행하는 서비스는 앱 형태의 지갑에 비해 필연적으로 더 많고 다양한 보안의 위협을 내포하게 됩니다. 제가 보여드린 시연이나 [MEW] 마이이더월렛 해킹에 주의하세요 까지 포함해서 말이죠. 그에 반해 앱 형태의 지갑은 이런 공격을 방어할 수 있는 상당한 수준의 제어권을 갖고 있습니다. 제가 시연에서 보여드리려고 했던 건, 웹페이지 형태의 지갑이 얼마나 쉽게 제어권을 잃어버리는 지에 대해서 입니다. 반면 앱이 제어권을 잃어버리게 되는 경우는 앱이 설치된 디바이스 자체가 해킹을 당했을 때 뿐입니다.

이것이 @asbear님께 제가 해 드릴 수 있는 마지막 조언입니다. 스팀페이가 스팀컨넥트의 보안 위험을 벗어나기 위해서는 스팀페이 전용 을 만들어야 합니다. 그리고 스팀페이 앱 스스로 지갑으로 기능해야 합니다. 그렇지 않고서는 제가 보여드린 방식을 포함하여 수많은 공격에 직면할 수 밖에 없습니다.

모이또의 보안 방식에 대해서는 이미 말씀드렸습니다. 모이또는 액티브 키를 사용자가 입력한 PIN 번호로 다시 한번 암호화하여 키체인에 등록합니다. 이는 가능성은 희박하지만 혹시 모를 키체인에 대한 해킹으로 액티브 키가 해커에게 유출되더라도 PIN 번호를 알지 못하는 한 액티브 키를 사용할 수 없도록 하는 장치입니다. PIN 번호는 5자리로서 4자리 숫자와 1자리의 영문자로 구성되어 있습니다. 또한 PIN 번호를 입력하는 키패드는 버튼을 랜덤하게 섞어서 혹시 모를 PIN 번호 유출의 가능성을 없애고자 했습니다. 송금 시에는 항상 PIN 번호를 입력해야 하구요.

Simulator Screen Shot - iPhone 8 Plus - 2018-06-24 at 09.39.00.png Simulator Screen Shot - iPhone 8 Plus - 2018-06-24 at 09.39.05.png Simulator Screen Shot - iPhone 8 Plus - 2018-06-24 at 09.39.11.png

그리고 정말 궁금해서 묻습니다. 논쟁이란 표현이 왜 문제가 되는거죠? 건설적인 토론은 있는데, 건설적인 논쟁은 없다고 보시는 건가요? 이건 진짜 궁금해서 묻는 건데, 답변하지 않으셔도 됩니다.

한열님~ 주제넘지만 끼어들어봅니다.

사실 저도 논쟁이라는 단어를 쓰시기에 깜짝 놀랐어요 ㅎㅎㅎ 토론에 비해 논쟁이 어감이 좋지 않을 수 있는 것 같아요. 논쟁(論争)의 쟁(争)이라는 한자에서 일본어 아라소우(争う)라는 말이 파생되는데, 논쟁을 하고자 하시면 처음부터 건설적인 대화를 나눠보자가 아닌 "시비거냐, 좋아 싸우자!" 하는 것처럼 느껴지... 읍읍


IMG_0692.PNG

①어느 목적을 노리고 상대방보다 우위에 서려고 하거나, 무엇인가를 손에 넣으려고 하다. 경쟁하다.
②자신의 주장을 밀어 붙이기 위해 물러서지 않는다.
③저항하다. 부정하다.

...와 같은 의미인데, 보시면 아시겠지만 논쟁하자, 논쟁한다, 논쟁했다라고 했을 때 그것에서 건설적인 이미지를 얻기가 힘들지 않을까요오...? 쿨럭

논쟁이란 서로 의견이 다를 때, 옳음을 놓고 서로 다투는 행위인데요, 다툰다는 것 때문에 그런 느낌이 드는가 보네요. 살아온 궤적이 다르면 뉘앙스도 다를 수 있다는 것을 배웁니다. 전 친구들과도 자주 논쟁을 하거든요. 회사 회의실에서도 사업방향을 놓고 논쟁을 하죠. 근데, 그게 보는 분들을 불편하게 했다면, 좀 더 신중하게 단어를 골라보겠습니다.

살아온 궤적이 다르면 뉘앙스도 다를 수 있죠.

감히 주제 넘게 바라건데 @asbear님도 오해(기분) 푸시고 이런 다름을 이해를 해주시어 토론을 계속 해주신다면 정말정말 좋을 것 같습니다 ~ 😌

스팀페이를 열심히 쓰고 있는 유저로써 스팀페이가 더욱 좋아지고 안전하길 바랍니다. 그래서 감사를 담아 증인투표도 했습니다. 한열님이 말씀하시는 것처럼 스팀커넥트에 정말 취약점이 있는지 직접 확인을 해보시는 것도 스티미언 모두의 안녕을 위해 좋지 않을까요~?

모이또는 앞으로 공개가 되어질 것이고, 스팀페이는 이미 공개가 되어져있습니다. 스팀페이의 개발로 스팀잇이 굉장히 즐거워진만큼 모이또가 앞으로 어떻게 우리들을 즐겁게 해줄지 관심이 갑니다. 백문이 불여일견. 유저로써 어서 써보고 싶습니다.

보안문제가 부디 자존심문제가 되지 않기를...

논쟁은 자신의 주장을 관철시키는 행위이고 논의는 문제를 수용하고 해결방안을 찾는것이죠. discussion과 argument의 차이죠. 엔지니어링에서 discussion은 추진력을 주지만 argument는 브레이크를 걸죠. 세상에 알려지지않은 새로운 학설이나 모호한 어떤 이론에 대해서 이야기나누는게 아니라 이미 보안계에 다 알려진 이슈들에 대해서 우리 프로젝트가 어떻게 대응하는지를 파악하는 과정에서 argument 는 시간낭비입니다. 분명 제가보기에는 문제가 되는 부분이 있고, 잘못 알고계신 부분이 있었기에 질의를통해 의문점을 해소하는 과정을 거치고 제가 기여할수있는 부분이있거나 도움을 요청하시면 도와드리고 싶었는데, 본인 주장을 관철시키는데만 집중하시니 제가 한열님의 프로젝트에 더이상 인풋을 할 이유가 없다고 결론 내렸고 앞으로는 더이상 관여하지 않겠다는 뜻입니다.

은행 앱을 예로 들면서 compromised 된 단말이나 외부의 exploit 시도에 어떤 대책이 있는지 물었는데 기본적인 답만 하시는걸보니, 제가 제기하는 시스템 시큐리티 이슈 자체를 이해 못하시는것이거나 아니면 무조건 방어만 하시려는것이라고 밖에는 받아들일수가 없습니다. 저한테서 얻을것이나 배울것이 없다고 생각하시는듯 하니 저도 더 푸시하지 않겠습니다. 프로젝트 행운을 빕니다. 그리고 스팀페이에 대한 조언은 감사히 수용하고 보완하겠습니다.

@asbear님께서 도움을 주시려고 하셨다면 감사드립니다.

도움을 주시려고 하셨다면

discussion은 도움을 주려고 하는 말이므로 조건을 달 필요가 없습니다.

비슷한 말로, '마음에 상처가 되었다면 사과드립니다'가 있습니다. 진정성 없는 사과의 표본입니다.

실제 논의가 아닌 논쟁으로 받아들이신 듯 하여 마음이 아픕니다.

넵, 말씀해주신 부분, 잘 새겨보겠습니다.

갤럭시 폰에 내장된 Samsung Pass 나, 애플 iCloud 키체인을 이용하면, 자동 로그인이 되는데,

이 경우에도 탈취 위험이 있을까요?
Copy 절차가 없으니 괜찮을 것 같기도 하고요.

이런 분야는 동작원리를 잘 몰라서 경우에 따라 어떤지 궁금하네요.

크롬이나 사파리 등의 공식 브라우저를 사용하시면 크게 걱정하지 않으셔도 됩니다.

진짜면 대박인데..아래 asbear 님글 반박도 있으니..확실한건가 싶기도합니다.

말씀 중에 죄송합니다만.. 철자가 absbear가 아니고 asbear 인듯한데요....

헛. 수정했습니다. 감사합니다~

보안에 대한 좋은 지적입니다. 요사이 거래소해킹으로 뒤숭숭 한데 이럴때 점검하고 또 점검 하는 자세가 필요합니다

보안은 언제나 최고로 중요하죠~

한 명의 유저로써 바라건데 @hanyeol님도 @asbear님도 심호흡 한 번 하시고 침착함과 냉정을 유지하시어 스팀잇의 보다 안전하고 즐거운 환경조성을 위한 토론을 포기하지 마시고 서로의 개선점을 찾고 보완하실 수 있으셨으면 좋겠습니다.

넵~! 노력해보겠습니다.

글을 보고나서 약간은 위험성이 있는 글이다 싶어서 댓글을 답니다.~ 어떠한 형태로든 악의적인 앱을 제작해서 마켓에 올린다면 사용자가 피해가 가지 않을 방법이 없습니다.(사용자가 신뢰할 수 있는 앱을 다운받아 사용하는 방법밖에 없겠죠) 전화번호부를 빼갈 수 도있고, 사용자의 폰을 사용에 DDOS공격도 가능합니다. 지금 제작해서 올려주신 영상은 개발분야를 아무것도 모르시는 분들이 보신다면 스팀페이앱 자체가 보안이 뚫려있는 형태로 비춰질수 있을 것으로 걱정이 됩니다. ~

그렇지 않습니다. 악의적인 앱의 공격을 막기위해서 여러가지 장치를 마련하죠. 페이팔 같은 경우 2-factor authentication 등으로 비밀번호가 탈취되더라도 송금이 가능하지 않도록 만들거든요. OTP 같은 것을 생각하시면 됩니다. 이런 장치를 둬야 제가 보여드렸던 시연에서도 안전합니다. 그러므로 현재 수준의 스팀컨넥트는 보안 위험이 높다고 보는 게 정확합니다.

그렇다면 스팀컨넥트에 2-factor authetication을 도입하면 문제가 해결되느냐? 이 문제에서부터는 중앙화/탈중앙화 문제와 맞닥뜨리게 됩니다. 이 부분은 얘기가 길어질 듯 하니, 하지 않도록 하겠습니다.

위에서 보여주신 QR코드 리더 앱의 사례는 충분히 발생할 수 있다고 봅니다.

  • 판매자가 상품 판매 링크를 구매자의 카톡으로 전달
  • 구매자는 PC카톡으로 링크 오픈
  • QR코드네? 하면서 늘 쓰던 본인 안드로이드 폰의 QR 코드 리더 앱 실행
  • 악의적인 목적으로 제작된 앱이라면, 크롬 등 브라우저로 링크를 열지 않고, 내장 브라우저로 링크를 오픈.
  • 시연처럼 사용자 입력값 탈취

아아아아주 작위적인 상황이긴 합니다만...

하지만 이것이 스팀커넥트의 보안 이슈라고는 생각하지 않아요. 악성코드가 삽입된 앱은 늘 존재할 수 있기 때문에 사용자가 주의해서 사용할 수밖에요.

스팀페이의 보안 이슈라고도 보기 힘들죠. 이미 스팀페이를 사용할 정도로 암호화폐 경험에 익숙한 사용자라면 사파리나 크롬을 열고 해당 브라우저에 카메라 권한을 부여해서 QR코드를 읽을테니까요. 단지 걱정은 QR코드를 보고 자동적으로 리더앱을 실행해버리는 분들이 있다면 탈취 가능성이 있다 정도?

스팀페이에선 믿을만한 브라우저로 QR코드를 읽으라고 사용자 경고를 주는 게 좋을 것 같네요. 스팀커넥트에선 이미 웹페이지 주소를 확인하라는 경고를 띄워주니까요.

만일

  • QR 코드에 스팀페이 피싱 사이트를 연결하고
  • Pay via SteemConnect 버튼에는 스팀커넥트 피싱 사이트를 연결

하면 마스터키 탈취가 쉽지 않을까요? 모든 사용자가 웹페이지 주소를 확인하면서 사용하지는 않으니까요. 특히 스팀페이나 스팀커넥트에 익숙해진 사용자라면... 으으 저부터 조심해야겠습니다.