Skip to main content

어떻게 피싱사이트 피해를 줄일 수 있을까?

ghdwlsgur
DevOps Engineer

가끔 뉴스를 보다보면 스팸 문자에 실린 URL을 클릭하여 수천만원의 피해를 입는다던가 하는 내용을 보셨을텐데요. 최근에는 모바일 청첩장으로 위장하여 사용자가 URL을 클릭할 경우 악성 애플리케이션이 설치되어 개인정보와 금융 정보등을 빼낸 뒤 피해자에게 수천만원에 대출 피해를 입힌 사례들을 많이 접했어요.

위 사례들은 모두 스미싱 피해사례에요. 스미싱이란 문자메시지와 피싱을 합성한 말로 악성 앱 주소가 포함된 문자를 사람들에게 대량으로 유포하여 사용자가 악성 앱을 설치하도록 유도한 뒤 개인정보 및 신용정보를 갈취해 타인 명의로 불법 대출을 받게 하여 피해를 주는 수법입니다.

스미싱 문자 내용이 터무니 없는 내용이라면 스팸 문자인 것을 사용자가 알아채고 무시할 수 있겠지만 피해자를 타겟팅하여 피해자 주변인의 정보를 수집한 뒤 주변인의 정보를 활용하여 타겟팅한 사용자에게 그럴듯한 문자를 보내 누르지 않을 수 없게 만드는 등 그 수법이 더 정교해지고 있어요.

출근을 할때나 퇴근을 할때 그리고 대중교통과는 다소 거리가 먼 장소에는 따릉이나 자전거 대여 플랫폼을 사용하여 자전거를 사용하곤 하는데요. 자전거를 대여할 때 촬영하는 QR코드를 위조하여 붙여놓은 뒤 해당 QR을 촬영하게 되면 피싱앱 설치로 유도되어 개인정보 및 신용정보가 그대로 유출시키는 QR 피싱이라는 수법도 생겼어요.

이러한 큐싱, 스미싱 수법이 점점 더 정교해지는 것을 보면서 IT기기를 보다 더 잘 다루는 젊은 세대들보다 저희 부모님 세대가 스미싱, 큐싱에 더 취약하다고 생각했고 나중에 부모님 만큼은 스미싱, 큐싱에 당하지 않도록 안드로이드 앱을 만들게 되었어요.

그렇다면 어떻게 해야 스미싱, 큐싱을 막을 수 있을까요?

방어를 하려면 먼저 공격자 입장에서 한번 생각을 할 필요가 있다고 느꼈어요. 피싱 공격자는 링크와 함께 제공되는 텍스트로 일반 사용자가 피싱 웹사이트(URL)를 눌러보게 하려는 행동을 자극한다는 것이에요.

단순하게 생각한다면 URL을 눌러도 아무 문제가 없도록 만드는 것이 사용자 경험면에서도 더 우수할거라고 판단했어요. 결국 사용자가 URL을 눌러서 접속하는 행위 자체가 그럴듯한 텍스트로 사용자가 URL을 누를 수 밖에 없는 궁금한 심리를 자극한다는 것이에요.

"사용자의 궁금한 심리를 해소시켜주면서 아무 문제가 없도록 만든다" 라고 생각하니 한 가지 기능이 떠올랐어요. 사용자 대신 웹사이트(URL)에 접속하여 화면을 캡쳐한 뒤 사용자에게 전달하는 것이에요.

소프트웨어를 만들때 처음부터 무겁게 기획하면 배포까지 많은 어려움이 있다고 생각하기에 가장 가벼운 기능을 먼저 만들고 배포한 뒤 개선해 가자는 생각을 늘 가지고 있는데요. 먼저 웹사이트 캡쳐본을 사용자에게 전달하는 기능을 만들고 그 뒤에 웹사이트에 접속할 것인지 말건지는 사용자 판단에 맡기는 플로우로 만들었어요.

캡쳐는 gRPC로 분산된 마이크로서비스 중 하나의 서비스에 컨테이너를 활용하여 컨테이너 내부에 헤드리스 브라우저가 웹사이트에 접속한 뒤 캡쳐를 하게 되고 이 캡쳐본을 AWS S3에 업로드 한 뒤 Presigned URL을 생성하여 사용자에게 모바일로 FCM 메시지를 푸쉬하게 됩니다. 이러한 설계 구조 상에서 헤드리스 브라우저가 접속하는 웹사이트는 피싱사이트라고 항상 간주하여야 하기에 컨테이너 보안에 신경을 썼는데요.

사실 컨테이너는 커널을 공유하기 때문에 커널을 공유하지 않는 컨테이너 런타임을 사용하려고 했지만 runsc를 사용할 때 시스템 커널과는 독립적으로 분리되어 보안이 더욱 향상된다고 하더라도 컨테이너가 프로비저닝되는 속도에 차이가 있어 컨테이너를 그대로 사용하되 프로필을 적용하여 허용된 액션외에는 차단되도록 하였어요.

아래는 앱 시연 영상입니다.

아직은 프로덕션이 아닌 비공개 테스트 출시로 이메일 주소가 테스터로 등록되어야 다운로드가 가능해요. 안드로이드 앱 배포를 하면서 느꼈던 건 개발보다 출시에 훨씬 시간이 걸린다는 거에요.

URLike 앱 시연 영상