1,300만명의 계정이 털렸다는 뉴스가 떴다.
http://search.naver.com/search.naver?where=nexearch&sm=tol_hty&query=%B3%D8%BD%BC+%C7%D8%C5%B7
내 생각에는 기본적으로 보안을 잘 지키지 못하는 회사는 비전이 없는 것 같다.
일본에 상장하는 것보다 더 중요한 것은 기본을 지키는 것인데, 많이 실망했다.
네슨 계정은 해킹되어서 별명, 다양한 캐릭터가 만들어져 있어서 탈퇴를 하려고 했다.
암호화된 비밀번호도 뚫렸다고 했지만, 내 해킹된 계정의 프로필은 이미 낙서가 되어 있는거 봐서는 패스워드는 완전히 떨렸다고 생각이 된다. 만약 암호화된 패스워드가 뚫렸다면, 이미 보안 암고리즘까지 알고 있다는 것 같다.
근데, 탈퇴는 왜 이렇게 힘들게 만들었니? 아무리 게임회사지만, 탈퇴처리가 어렵게 해서 탈퇴를 포기하게 하지 않아주면 좋겠다.
http://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&ie=utf8&query=%EB%84%A5%EC%8A%A8+%ED%83%88%ED%87%B4
이 사건을 통해서 좋은 회사인 넥슨이 다시 서비스를 고민하는 때가 되기를 바래.
곰곰히 생각해보니 내가 회사에서 처리했던 업무 중에 보안 공격에 대비하는 사례들을 정리해 본다.
1. 게임서버, .net, IIS 서버를 기반으로하는 윈도우 서버는 아예 쓰지 않도록 한다.
윈도우 서버는 워낙 잘 업데이트하지 않으면 자주 취약점이 자주 발생된다. 따라서 그 취약점으로 공격한다.
내 생각에는 모든 것을 리눅스 서버에서 관리하는 것이 가장 좋은 것 같다. 리눅스의 장점이 크다.
다만 윈도우 개발자가 MSSQL과 MS 제품군을 개발환경이 뛰어나 다른 대체재를 찾을 수 없다는 점. 리눅스를 너무 어려워하는 것이 가장 큰 난제..
대부분의 해킹은 윈도우 서버로 접속하는 경우에서 발생되는 경우인 것을 많이 봐왔기 때문에 윈도우 서버만 보면 리눅스로 바꾸고 싶다.
내가 담당자라면 리눅스-자바,C++로 바꾼다.
2. 윈도우 서버에 접근 하는 계정과 윈도우 서버를 잘 관리한다.
학원에서 알려준 아이디/패스워드를 admin/admin 계정을 회사에서도 사용하는 인프라 운영자가 은근히 있다. 내가 다는 회사에서도 이런 사람들 있다. ㅡ.ㅡ;;;;
admin/passwd 이렇게 쓰는 사람도 있었다.
패스워드는 무조건 3개월에 한번씩 바꾼다.
윈도우 서버를 몇대나 관리하는지, 항상 신경써야 한다.
그리고, 쓸데 없는 정보는 서버에 두지 않는다. 소스같은 것을 두는 사람들이 있었다. 약간 배포 개념이 없는 개발자들이 상당히 많은데, 빌드/배포서버는 따로 두고, 게임/웹 서버는 바이너리만 들어가게 한다.
빌드/배포 서버는 소수의 사람만 접근하도록 하고, 웹 접근만 가능하게 한다.
3, 어드민 계정 관리가 필요하다. 커보러스를 사용하도록 한다.
윈도우 어드민 계정은 정말 잘 관리해야 한다. 아무한테나 패스워드를 알려주지 않는다.
리눅스의 경우는 ssh 대신 커보로스 기반으로 계정관리를 하도록 한다.
ssh로 서버 관리를 하는데, 수천대의 root 비밀번호가 동일하게 하는 인프라 운영자가 있었다.
내가 이거 보안 문제가 심각해질 것이라 하며 바꾸는 것이 좋겟다고 하니, 불편해 함. 한번 구축된 인프라는 바꾸기 어려운 부분이 있음. 처음 설계부터 고민을 많이 하는 게 보안 요소와 개발 요소를 모두 볼 수 있는 개발자가 객관적으로 보고 구축하는게 좋음.
커보러스는 티켓 기반이라 계정 관리가 편한 부분이 있어 요즘 버전은 많이 쓸만해졌다.
4. 개발자의 어드민 계정 선호 사상이 없어야 한다.
일부 개발자는 어드민 계정만 선호하는데, 내가 봤을 때는 잘 못된 생각이다. 개발자는 개발자 계정만 이용해도 된다. 특정 서버로만 어드민 계정 사용하면 된다.
root는 외부에서 무조건 접근안되게 하며, sudo 권한도 안되게 하면 된다. 필요할 때는 그 때마다 인프라 운영자의 도움을 받아 처리하면 된다.
5. 철저히 ACL 관리를 한다. 또는 방화벽을 잘 써라
인프라 운영자 또는 보안 담당자는 ACL 목록을 잘 관리하고 있어야 한다. 이거 잘하는 인프라 운영자/보안 담당자를 본 적이 없다. 그냥 승인만 할 뿐, 어떻게 서비스가 동작하는지 전혀 관심이 없어서 관리를 하지 않아, 개발팀에서 서버에 대한 모든 ACL 관리를 하여 서비스 또는 보안에 문제가 없도록 한다.
인프라 운영자와 보안 담당자는 불편하지더라도 ACL 관리를 철저히 함으로서, tcp, udp 포트 뚫을 때마다 인증절차를 거치면서 하는게 좋다.
방화벽이 없다면, IDC에서는 서로 침투할 수 있는 취약점이 있다. 항상 고민해야 한다.
6. 게임서버는 외부에 ip를 오픈하지 않는다.
L4(L7) 장비 또는 소프트웨어 gateway 를 proxy로 써서, 클라이언트가 direct로 게임서버에 붙지 않도록 한다. 진짜 서버는 안보이게 숨긴다.
7. 쿠키는 항상 안전하게 관리한다.
쿠키 서비스를 할 경우, 쿠키 암호와 암고리즘 또는 쿠키 암호화 알고리즘의 키는 주기적(3개월에 한번)으로 바꾸어 서비스가 튼튼하게 한다. 쿠키 정보를 바탕으로 웹과 게임서버도 통신하기 때문에 쿠키 정보가 외부에서 알지 못하게 해야 한다.
그래서 쿠키를 안전하게 하기 위해서 쿠키+세션 서비스 서버를 구축하는 것도 좋다.
8. 웹/게임 서버에서 DB 접속하는 것은 알고리즘화한다.
개발자들이 많이 취약한 것 중 하나가 db 접속하는 property는 그대로 사용한다는 점이다. 따라서 db 정보, 계정, 암호가 그대로 들어나게 쓰는 개발자가 너무 많다. property를 암호화해서 잘 사용하도록 한다.
9. 회사에서는 아무거나 프로그램을 설치해서 사용하지 않는다.
회사에서 허가된 소프트웨어만 설치하고 사용할 것. 이상한 게임이나 회사에서 쓰지 말라고 하는 것은 쓰지 말아야 한다. 네이트온 해킹 사건도 보면, 회사에서 사용하지 말아야 할 소프트웨어를 쓴 것이라 할 수 있겠다..
10. db 패스워드는 자주 변경한다.
db 패스워드는 주기적(3개월에 한번)으로 변경한다. 불편함보다 보안을 더 중요히 여기자.
11. 서버 데몬 / 라이브러리 모니터링을 잘 한다.
표준화된 서버와 데몬은 정해져 있다. 쓸데 없는 데몬이 있으면 찾아내서 원인 파악을 잘하게 한다. 백도어 데몬은 항상 무섭다.
또한 보안 취약성이 있는 데몬, 라이브러리에 대해서는 빠른 대응이 있도록, 서버의 모든 파일을 검사해서 문제가 되는 데몬, 라이브러리를 파악하고 담당자에게 메일을 보내게 해서 고칠 수 있도록 한다.
오픈 소스 거버넌스와 잘 취합되는 것이 좋다.
12. 서버 로그 모니터링은 좋다.
access / error 로그를 자주 모니터링한다. 메시지 파일/에러 로그/액세스 로그를 매일 살펴보고 항상 긴장감을 놓치 않는다. 거기서 통찰력이 나온다.
13. 관리자의 마인드 변화
성과도 중요하지만, 보안도 중요하게 여기는 관리자의 마인드가 필요하다. 자기 직원이 잘못한게 있으면 따뜻하게 지적하고 수정하게 하면 된다. 그냥 넘어가지 않게 하고 계속 기본을 지키게 해야 한다.
좋은 지적을 하는 개발자, 운영자의 의견을 잘 듣도록 해야 한다. 자기 부서의 소관이 아니라고 한눈 팔고 있지 말자. 남의 문제를 내 문제로 여길 줄 아는 관리자의 마인드가 필요하다. 타산지석!
12. 시니컬하고 귀찮아하는 운영자보다 회사를 귀하게 여기는 직원을 볼 줄 알아야 한다.
소프트웨어 분야는 뛰어난 한 사람이 대충 일하는 천명보다 백배 귀하다. 항상 겸손하게 문제나 이슈에 대해서 깊이 고민하고 해결할 수 있는 사람을 볼 줄 알아야 한다. 다. 회사의 자원을 마치 자기가 가진 자원처럼 생각하는 사람이 가끔씩 있다. 그 사람이 회사를 성장시킬 수 있다. 사장 마인드로 회사를 보는 직원은 정말 귀하다.
13. 실패을 용인하고 정직한 사람을 귀하게 여기자.
실패를 두려워 해서 거짓말을 하는 사람이 있다. 그것은 아마도 조직문화가 그렇게 만들었을 가능성이 높다. 실패가 용인되지 않는다면 서로 일을 하려 하지 않는다. 실패를 용인하고 그럴 수 있겠다 하며 배울 수 있게 해야 한다. 자신이 실수한 부분에 대해서 책임지려 하는 모습은 아름답다. 누구나 실수를 할 수 있으며 누구나 정직할 수 있는 조직문화가 되어야 다시는 보안문제가 터지지 않도록 잘 마무리 짓고, 열심히 일할 수 있는 분위기가 있어야 한다. 외양간에서 소를 잃지 않도록 예방하는 것도 좋지만, 누가 그렇게 잘 할 수 있겠나..