Android 시스템에 핑을 보내다가 신기한 사실을 알아냈다

나는 집에서 라즈베리 파이를 이용해 음악을 틀어 두는데 내 핸드폰을 향해 주기적으로 핑을 보내다가 일정 시간동안 응답이 없으면 내가 집에 없는 것으로 판단하고 음악을 멈추게 해 놓았다. 그런데 핸드폰을 가만히 두면 배터리를 아끼기 위해(충전기에 꽂혀 있는데도) 시스템이 잠든 상태에 빠지고 핑에 대한 응답을 하지 않아 음악이 멈추는 일이 자주 발생했다.

그래서 Android 시스템이 화면이 꺼진 후 얼마나 시간이 지나야 잠드는지 확인하고 싶어서 Wi-Fi monitor를 통해 와이파이 신호를 살펴보고 있었는데 놀라운 사실을 발견했다. 핑에 대한 응답은 안 하지만 내 핸드폰의 맥 어드레스가 발신지인 와이파이 패킷이 잡히고 있었다.
혹시나 내가 핑을 보내는 패킷의 목적지 주소까지 스캔해서 그렇게 잘못 뜨는 건가 싶어 핸드폰의 와이파이를 꺼 봤는데 그 상태에서는 패킷이 잡히지 않았다. 핑에 대한 응답은 없는데 패킷은 발생하는 이 상황을 좀 더 살펴봐야겠다.

결론적으로 음악을 꺼 주는 스크립트는 주기적으로 핑을 보내는 부분은 그대로 두고 Wi-Fi monitor로부터 해당 맥어드레스가 발신지인 패킷이 최근에 있었는지를 확인하도록 바꿨다. 뭔가 하찮은 일에 과한 노력을 쏟은 거 아닌가 싶지만 애초에 이 프로젝트가 그러라고 만든 프로젝트니 상관 없겠지.

임베디드 기기를 프록시로

가끔 보면 프린터 설정 페이지라든가 하는 게 외부에서 접근 가능한 경우가 있는데 사용자가 이렇게 방치하는 게 보안상 얼마나 위험한건지에 대해서는 너무 많은 글이 있으니 생략하겠다.

근데 이게 개발자가 어떻게 만졌는지 프록시로 쓰면 작동이 되는 경우가 있다. 공짜 프록시가 된다 이 말이다. 이건 개발자들이 그렇게 남겨 둔 거라서 우리가 스스로 펌웨어를 해킹하지 않는 한 그대로 존재하는 문제다. 물론 사용자가 외부에 노출하지 않으면 문제가 안 되기는 하지만 암호를 걸고 외부에 노출하는 경우에도 그냥 통한다는 게 문제다.

임베디드 기기 얘기는 아니지만 무료 프록시 목록을 뿌려주는 사이트에서 이상하게 빠른 프록시가 있어서 봤더니 eportal.kita.net의 서버가 IP로 접속하면 IBM 서버 초기화면이 뜨고 프록시로 쓰면 그냥 써지는 걸 발견했다(근데 지금은 고쳐졌다).

HSTS도 그렇게 안전하지만은 않다

제목은 자극적으로 적었지만 사실 별 거 아닌 기술이다.
학교에서 라즈베리 파이를 가지고 놀 때마다 시간이 안 맞아서 문제가 생기는 경우가 많았는데 이게 학교에서 NTP를 아예 막아둬서 생기는 문제였다.
일반적인 컴퓨터라면 자체적으로 시계가 있으니 동기화가 안 되어도 시간이 별로 틀리지 않게 되니 별 문제는 없지만(그래도 실습실 컴퓨터처럼 외부에 연결이 절대 될 리가 없는 PC들은 시간이 10분 정도 차이가 나기도 한다) 라즈베리 파이는 내장 배터리가 없으니 부팅 할 때 NTP로 시간을 못 받아 오면 1970년대로 돌아가는 것이다.

HSTS는 쿠키처럼 시간을 지정해서 그 기간동안은 HTTP 프로토콜의 주소를 입력해도 HTTPS로 브라우저가 강제로 이동하게 만드는 (패킷을 잡아보면 HTTP 요청이 아예 없다) 기술인데 DNS처럼 암호화를 하지 않는 NTP 요청을 스푸핑 해서 클라이언트측의 시각을 바꿔버리면 HSTS의 기간이 만료되고 다시 HTTP로 요청을 할 때 SSL strip 공격을 먹이는 방법이다. (참고)

HTTPS를 사용하는 주소로 즐겨찾기에 등록을 해 두면 그것마저 소용이 없고 나처럼 주소창에 직접 입력하는 사람들에게만 효과가 있겠지만 아무튼 되기는 된다는 거다. 그런데 내 경험상 시각이 안 맞으면 SSL 인증서의 유효기간마저 안 맞아서 브라우징이 되지도 않는데 저게 되는건지 모르겠다. 페이스북의 경우 인증서는 1년짜리이고 HSTS의 만료 기간은 3개월이니까 안 될 건 없지만서도.