페이스북 해킹, 5천만명 개인정보 위험

토큰(세션 쿠키) 탈취

28일 Facebook이 해킹 당해 5천만 명의 access token(로그인 자격증명 정보를 담은 작은 파일)이 탈취됐다. 페이스북은 이 사실을 25일 발견하여 시스템을 패치하고 탈취된 토큰을 무효화했다. 또한 예방 조치로 지난 1년간 위험에 노출됐을 가능성이 있는 4천만 명의 토큰도 무효화했다.

페이스북의 token은 자격증명을 사용자의 기기에 저장하여 매번 로그인하지 않아도 로그인 상태가 유지되는 편리함을 제공한다. 물론 다른 사이트들도 대부분 로그인 유지 기능을 제공한다. 그리고 이런 토큰은 Session Cookie(세션 쿠키)라고도 한다.

토큰은 편리함도 있지만 해커에게 탈취당하면 계정에 완전한 접근 권한을 주게 되는 위험도 따른다. 토큰을 노리는 악성코드도 많다. 만약 토큰을 탈취당했다고 생각되면 암호를 변경하여 기존 토큰을 무효화하면 된다.

연결된 계정도 위험

Access Token을 가진 사람은 계정에 대한 완전한 통제권을 갖는다. 따라서 '페이스북 계정으로 로그인' 기능으로 연동된 앱이나 사이트에도 로그인할 수 있다. 연동된 계정도 위험에 고스란히 노출돼 있는 것이다.

페이스북은 현재 위험에 노출된 사람들의 토큰을 무효화하고 개별 통보하고 있지만, 사용자가 직접 해킹 여부를 알아볼 수도 있다. <계정 설정/보안 및 로그인/로그인한 기기 및 장소>를 확인하여 내가 하지 않은 로그인이 있었는지 살펴보면 된다.

계정이 침해당한 것으로 의심되는 경우, 암호를 변경하여 토큰을 초기화한 후에, 연결된 계정의 연결을 끊었다가 다시 연결하여 연결 상태를 초기화한다. <설정/앱/페이스북 계정으로 로그인>에서 연동된 계정을 관리할 수 있다.

주의할 점은, 일단 계정의 연결을 끊으면 이용하던 앱이나 사이트의 정보가 삭제된다는 것이다. 마일리지나 게임의 업적, 아이템 등이 사라지는 것이다.

계정 연동은 대형 포털, SNS에서 대부분 제공하고 있다. 계정을 새로 만들 필요가 없다는 잠깐의 편리함은 있지만, 많은 문제점과 위험을 갖고 있다는 것을 기억하자.

View As 기능의 버그에서 비롯

이번 해킹은 페이스북의 'View As' 기능의 버그에서 비롯됐다. 페이스북의 프로필에는 여러 요소들이 표시되는데, 프라이버시 설정에 따라 각 요소들의 공개 범위가 다르다. 보는 사람에 따라 달리 보이는 것이다. 그래서 특정인에게 내 프로필이 어떻게 보일지 미리 보기를 해 볼 수 있는 기능이 View As인 것이다.

대부분의 뉴스에 페이스북 '해킹' , 토큰 '탈취'라고 표현되지만 정확한 것은 아니다. 토큰은 사용자의 기기에 저장되는 것이기 때문에 페이스북 서버를 해킹해서 탈취할 수가 없다. 또한 이번 사건은 페이스북 서버에 침투한 것이 아니라, 버그를 이용해 해커의 기기에서 작업을 한 것이다. 이 작업은 3개의 버그를 복합적으로 이용해 수행됐다.

버그1은 View As에 있었다. 원래 이 기능은 보기 전용의 권한을 가질 뿐이므로 여기에 뭔가를 작성할 수는 없다. 그런데 친구 생일 축하 모듈(composer)에 버그가 있어서 동영상을 업로드할 수가 있다.

버그2는 동영상 업로더에 있었다. 2017년 7월의 업데이트 시에 생겼는데, 토큰을 부정확하게 생성하는 오류가 있다.

버그3은 버그 1,2가 함께 작동할 때 나타난다. View As의 일부로 동영상 업로더가 표시될 때, 사용자가 아닌 As에 해당하는 계정의 토큰이 생성된다.

예를 들어 보자. 내 프로필 페이지가 페친인 혜린이에게 어떻게 보일지 알아보려고 View As 혜린을 실행한다. 그러면 내 컴에 혜린의 토큰이 생성된다. 나는 이것을 이용해 혜린의 계정에 맘대로 접속할 수 있다. 암호고 2단계 인증이고 다 필요 없다.

하니는 혜린의 친구이지만 내 친구는 아니다. 그러나 하니의 계정에도 접근할 수 있다. 혜린의 계정을 접수했기 때문에, 혜린으로 로그인하여 View As 하니를 실행하면 내 컴엔 하니의 토큰도 생성되기 때문이다. 이런 식으로 해커는 무수한 계정을 점령해 나갈 수 있다.

10.2 업데이트

10.2일 페이스북의 발표에 따르면, 아직까지 페이스북 계정으로 로그인한 연결된 계정이 침해당한 경우는 발견되지 않았다(참고 자료 4).

페이스북의 공식 SDK를 사용한 앱이나 사이트는 access token을 초기화한 조치로 안전하다. 매일 토큰의 유효성을 검증하기 때문이다. 그러나 현실적으로 부주의한 개발자들이 있어서, 공식 SDK를 사용하거나 주기적으로 토큰의 유효성을 검증하지 않는 경우가 있다. 이런 개발자들에게 주의를 환기시켰다.

결론적으로 공식 SDK를 사용한 앱이나 사이트에 연결된 계정은 토큰을 초기화하는 것으로 충분하다. 그러나 부실한 앱이나 사이트의 경우에는 연결 해제 후 재연결이 필요할 것으로 생각된다.

세션 로그아웃

나는 이제껏 페이스북 토큰을 초기화하는 방법으로 암호를 변경하는 것 밖에 알지 못했다. 그런데 페이스북에 다른 기기에서 로그인한 세션을 종료하는 방법이 있다는 것을 이번에 알게 됐다(참고 자료 5). 마이크로소프트나 구글에서 기기 별로 접근 권한을 제거할 수 있는 것과 같은 역할을 한다.

[설정/보안 및 로그인/로그인한 위치]로 들어가면 로그인한 기기와 위치, 시간을 모두 볼 수 있다. 여기에서 내가 하지 않은 세션을 선택해서 로그아웃하면 된다.


관련 자료
  1. 페이스북 계정 탈취하는 Time2Do 악성코드
  2. 페이스북 정보유출 사태의 교훈, 계정 연동 주의

참고 자료
  1. Hackers Stole 50 Million Facebook Users' Access Tokens Using Zero-Day Flaw
  2. Security Update
  3. Facebook Hacked — 10 Important Updates You Need To Know About
  4. Facebook Login Update
  5. 페이스북, 국내 해킹 피해 규모 확인 중…"모든 세션 로그아웃 권장" 

댓글

이 블로그의 인기 게시물

마이크로소프트 4K 무선 디스플레이 어댑터(MS WDA 3) 리뷰

와이파이(Wi-Fi) 보안 설정

엑셀 필터 상태에서 복사와 잘라내기