Category Archives: 해킹보안

농협 해킹사태가 북한 탓이라고? 한마디 안할수가 없다.

우선 이글을 썼다가 무슨일이 생길지 몰라 겁도 좀 나지만 이글은 정치적인 문제를 떠나 그냥 단지 리눅스 서버를 운영해온지 10년 넘은 사람으로써 순수히 엔지니어의 입장에서 써보는 글입니다. 이런 문제는 전문적인 이유를 설명해줘도 오해를 많이 살 법한 이야기인데 말도 안되는 이야기를 들고 나오면 더더욱 오해를 살수밖에 없을것 같습니다.

이 글을 쓰기에 앞서, 저는 보안 전문가가 아닙니다. 보안에 대하여 따로 공부하거나 학위를 가지고 있지도 않습니다. 단지 중학교때부터 리눅스를 사용해 왔고 고등학교때 부모님께 돈을 빌려 웹호스팅 사업을 해오면서 수많은 해킹의 피해를 입은 경험이 있는 사람일 뿐입니다.

[“농협 해킹은 北소행”] 검찰이 北지목한 이유-동아일보

동아일보의 오늘자 기사입니다. 검찰이 북한으로 지목한 이유가 3가지가 있습니다. 물론 저 역시도 북한일 수 있다는 가정을 처음부터 버리지는 않겠습니다. 북한 전체적인 해킹 실력이 비웃음을 살 지언정 해킹이라는것은 단 한명의 실력파만 있어도 충분히 일어나는 일이기 때문입니다. 사람수가 중요한건 아니라는거죠.

1. 北 3.4 디도스 공격때와 ’45자 암호키’ 똑같아

DDOS공격이란 Distributed of Denial Service의 약자로 서비스에 사용되는 서버가 혹은 네트워크가 버틸수 없을만큼의 서비스 요청등의 방법으로 서비스를 불가능하게 하는 해킹 기법입니다. 보통 웜/바이러스등을 이용하여 전세계의 불특정 다수의 사용자를 감염시켜 자신의 명령을 따르게 합니다.
이 바이러스에 감염이 되면 일명 좀비PC라는 애칭(?)을 가지게 되며 대부분의 경우가 공격자가 접속해 있는 IRC에 접속하여 그곳에서 명령을 받게 됩니다.
사용자 삽입 이미지좋은 그림이 있는것 같아 첨부해 봅니다. 명령을 내리게 되는 Commander는 IRC서버를 통해 좀비PC들에게 명령을 내리게 되며 공격 대상이 되는 Victim은 엄청난 공격을 받게 됩니다. 제가 운영하는 서버도 몇번 DDOS공격을 받은적이 있습니다.

처음에 잘 모를 시절에는 공격 들어오는 IP를 분석하여 iptables로 단순 차단하는 식으로 하였습니다. 공격의 대부분이 중국 IP였기 때문에 중국발 DDOS구나라고 단순히 생각하였습니다. geoip-extension을 이용하여 중국 전체의 IP를 차단했음에도 서비스가 복구가 되지 않았습니다.

다시 확인을 해보니 중국뿐만 아니라, 브라질, 프랑스, 미국, 한국 아예 전세계에서 공격이 들어오더군요. IP에 특정한 패턴이란건 존재하지 않습니다. 그리고 위의 그림에서 알 수 있듯이 DDOS의 공격에서는 어떤 의미를 가지고 있는 IP라는것은 없습니다. 공격 들어오는 IP는 99.99999% 순수하게 그 스스로들도 피해자인 좀비PC 또는 좀비서버의 IP일 뿐입니다.

자, 그럼 검찰에서 좀비PC를 통채로 가져가서 소스를 분석하여 얻을 수 있는 정보를 생각해 봅시다. 저는 개인적으로 얻을수 있는게 거의 없다고 보지만 그래도 그냥 추상적으로 컴퓨터를 잘 몰라도 위의 그림만을 보고 생각했을 때 명령을 받기 위해 IRC서버에 접속하기 위해 IRC서버의 주소는 알 수 있을것 같네요. 그리고 어쩌면 공격 대상의 IP도 남아있을지도 모르겠습니다. 웜바이러스는 메모리에 상주하며 명령을 전달 받을것입니다. 이 과정에서 공격대상의 IP는 따로 하드디스크에 저장할 필요는 없어보입니다. 하지만 있다고 좋게 가정해 보겠습니다. 그리고 어쩌면 어떤식으로 공격하는지 패턴도 알 수 있겠네요.

여기까지 알아냈다고 치고 이제 검찰이 그리고 국민이 알고 싶어하는 정보는 누가 공격했냐는 것이죠. 공격대상 IP는 필요가 없고 공격패턴같은것도 우선 제처두고 알아낼수 있는것은 유일하게 어떤 IRC로 접속했을까 하는 것입니다. 또는 IRC가 아니라도 공격자의 명령을 받기 위해 어딘가에 접속해야 한다는 것입니다.

암살 영화를 보면 엄청난 스킬을 가진 암살자는 다양한 방법으로 명령을 전달 받습니다. 심지어 의뢰자의 얼굴이나 목소리조차 모르기도 하죠. DDOS도 똑같습니다. 결과적으로 좀비PC는 직접적으로 명령을 전달받긴 하겠지만 공격자는 IRC서버에조차 직접적으로 접속하지 않을 가능성이 높습니다.

프록시(Proxy, 대리인)라고 불리는 다른 서버를 공유하여 자신의 신분을 완전히 바꿔 접속할수도 있습니다. 그리고 IRC서버를 찾았다고 해도 대부분이 관리가 제대로 이루어지지 않는 곳일 확률이 높습니다. 결과적으로 공격자를 찾기 위해서는 최소한 다음의 과정이 필요합니다.

좀비PC수거 → 명령을 전달받기 위해 어디로 접속하는지 분석 → 접속한 서버의 접속 로그 분석 → 공격자로 판단되는 사람의 IP추적

이게 추적할수 있는 완벽한 방법이 아니고 생각해 볼수 있는 가장 단순한 과정입니다. 접속한 서버의 로그를 볼수 있는 방법은 없다고 봐야 합니다 .서버가 한국에 있을리가 없기 떄문입니다. 공격자를 찾아내는건 불가능에 가깝습니다. 찾을 수 있다면 왜 DDOS 공격자 체포관련 뉴스가 안나올까요.

만약 찾아낼 수 있다면, 돈을 목적으로 DDOS공격을 하여 메일등으로 돈을 요구해올때 그걸 추적할수는 있을지 모르겠네요.

말이 너무 많이 돌았습니다. 45자 암호키가 똑같다고 하는데 이게 무슨 말인지 모르겠습니다. DDOS공격에 암호키라니…아무래도 어려운말 써봤자 국민들이 모를꺼라 생각하고 두리뭉실하게 쓴거 같습니다만 공격 코드의 일부분이 동일하다고 말하고 싶은게 아닐까 생각됩니다.

프로그램이라는것은 소스코드를 컴파일이라는 과정을 통해 만들어집니다. 이 컴파일이라는것은 개발자가 아무렇게나 개발해도 나름의 최적화(Optimize)를 통해 자기가 소스코드를 정리하여 실행파일로 만들어내게 됩니다. 결과적으로 프로그램의 코드만 봤을때 비슷한 부분은 얼마든지 많이 생길 수 있습니다. 설마 암호키/공개키를 이야기 하려는것은 아니었겠죠. 그럼 더욱 바보인증일테니.

농협 해킹 ‘소스코드’ 7.7 디도스와 상당부분 일치-동아일보

오히려 저런 웃기는 이야기도 있습니다. 소스코드가 상당부분 일치 한다니…분명히 저런 발표를 하는 사람들은 제가 범접하기도 힘든 초고수들일텐디 미칠꺼 같습니다.소스코드는 실행되지 않습니다. 말그대로 설계도 같은거죠. 사람들이 건축 평면도에 거주하지 않습니다. 그걸로 만들어진 건축물에 거주하겠죠. 물론 인터프리터언어같은 예외가 있습니다만 지금 상황에선 예외일꺼 같고요.

차라리 위의 정황에서 봤을떄는 한국 IBM의 직원 한모씨의 노트북이 바이러스 백신조차 안깔려있었다는 이야기를 볼때 작년 DDOS대란때에 좀비PC였었다고 보는게 맞다고 봅니다. DDOS는 단순한 공격자의 명령만을 수행하지 서버작업과 같은 상호작용(Interaction)을 하는 작업은 어려움이 있을 수 있습니다. 이것을 DDOS와 자꾸 엮을려고 하는건 억지라고 생각합니다. DDOS는 DDOS였고 이건 백도어든지 키로그던지 다른 해킹 사건이라는것이죠.

2. 삭제파일 목록, 중복기재 실수까지 판박이

이건 또 무슨 깜짝 놀랄 이야기인가요. 농협의 서버는 잘 알려져 있듯이 유닉스들로 구성되어있다고 합니다. hwp파일을 삭제하던 말던 전혀 다른 이야기를 들고 나왔다고 밖에 생각하기 힘듭니다. 차라리 위에서 언급했던 작년 DDOS대란 당시에 좀비PC였을것이라는 것이죠.

악성코드가 81개나 발견되었다니 IBM직원이 어떻게 저럴수 있을까 싶네요. IT업계 사람의 PC가 악성코드가 저렇게 많이 발견되었다는것은 말그대로 아예 관리를 안했다고 보는게 맞을것 같습니다. DDOS 좀비PC여도 전혀 이상하지 않습니다.

3. 北사용 ‘좀비PC 통신용 고유번호’가 노트북에

이것은 정말 저를 화나게 하는 이야기입니다. 여기서 통신용 고유번호라는 마치 그럴싸한 이야기를 했지만 기사의 내용을 보면 맥주소(Mac Address)를 말하는 것입니다. PC의 IP주소라는 것은 유동적인 주소입니다. 언제든지 바뀔 수 있는 주소이지만 맥주소는 변경되지 않는 자신의 주민등록번호와도 같은 주소값 입니다.

하지만 문제가 이 맥주소는 통신과정에서 변경됩니다. 이게 무슨말이냐면 다음의 그림을 보여드리겠습니다.
사용자 삽입 이미지네트워크는 매우 복잡하게 얽혀있습니다. 여기서 통신을 제대로 하기 위해서는 통신 패킷이 어디로 흘러갈지를 중간중간에 있는 Router(동그란 케잌모양)라는 것이 방향을 알려주어 통신하게 됩니다.

그런데 이 과정에서 발송자의 맥주소는 라우터의 맥주소로 변경이 됩니다. 같은 회사 같은 사무실 같은 부서의 옆사람을 내 PC로 공격하는게 아닌이상 내 맥주소를 상대방이 알 수 있다는것은 불가능에 가깝습니다. 이건 네트워크에서도 어려운 이야기가 아닙니다. 시스코 자격증중에 가장 낮은 CCNA에서도 나오는 이야기입니다.

그냥 저런 말을 한 의도가 궁금합니다. DDOS공격에서 IP는 의미있는 데이터가 될수 없고(좀비PC census라면 모를까) 맥주소 이야기는 꺼내는것 자체가 웃기는 이야기입니다.

농협 해킹이 북한 소행이라는 검찰 발표에 전문가들은 갸웃-조선일보

차라리 이 기사가 좀 더 사실을 언급하고 있습니다. IP가 의미가 없다는 이야기와 맥주소가 변경된다는 것에 대한 언급이 있네요.

“농협 해킹 북한 소행이라면 디도스 때 지목된 IP 또 썼겠나”-경향신문

경향신문은 해당 IP를 또 썼겠냐는 이야기를 들고 있습니다. 물론 DDOS라는것은 감염할 좀비PC를 공격자가 컨트롤할수 있는게 아닙니다. 얼마든지 그PC가 그 PC이고 백신으로 치료했지만 또 감염될 수 있습니다. 자꾸 체신성 IP가 언급되는데 제 생각엔 체신성 IP가 나왔다면 더더욱 북한의 짓이 아니라는 결론이 나와버립니다.

처음에 보여드린 그림에서 알 수 있듯이 좀비PC들은 감염당한 피해자입니다. 공격을 당하는 입장에서는 죽어도 공격자의 IP를 알 방법이 없습니다. 마치 암살자집단에 암살 의뢰를 한후에 암살현장에 자신도 참여하여 같이 칼부림을 하는 꼴입니다.

물론 PC관리를 너무 못해서…공격하는 팀에서조차 자신의 PC가 감염되었을수도 있습니다. DDOS에 공격해 오는 IP들도 피해자입니다.

공격 명령 서버중 1개 북한서 사용…노트북에 악성코드 심어 좀비피시화-한겨레

여기 또 답답한 기사가 있습니다. 정확히는 답답한 검찰의 발표겠지만요. 7개월동안 집중적으로 정보를 캐내로 81개나 되는 공격용 프로그램을 설치했다…제대로 관리안하는 PC들에서는 몇천개의 바이러스에 감염되는것이 일도 아닙니다. IP이야기 역시도 북한의 IP가 나오는것이 북한이 공격자라는 근거가 될수가 없습니다.

서버 관리자로써 결론을 지어보자면.

리눅스를 사랑하는 사람으로써 복잡한 마무리를 지어보겠습니다. 보통의 서비스는 적어도 WEB – WAS – DB와 같이 복잡한 구조로 서비스가 구성됩니다. 더군다나 IT(Information Technology)에서는 말 그대로 정보를 가장 중요시 합니다. DB와 같은 정보를 보관하는 서버들을 동시다발적으로 날릴수 있는것은 한번 해보라고 해도 어려운 일입니다. 정말 내부 구조를 잘 이해하고 있는 사람의 소행이라는 추정이 맞다고 생각합니다.

도대체 어떤 명령(rm.dd?)이 시스템을 복구도 못할정도로 한방에 날리는지 정말 궁금합니다만, 더군다나 동시다발적으로 다수의 서버를 날리는걸 어떻게 한건지 저도 궁금하지만 검찰의 발표는 마치 우리나라에는 보안 전문가는 없는게 아닌게 생각하게 만드는 발표입니다.

검찰분들은 굉장히 똑똑하신 분들입니다. 저랑은 비교도 할 수 없죠. 그래서 굉장히 무섭습니다. 일부러 몇치 앞을 내다보고 저런 발표를 한것일테니깐요…의중을 읽을수조차 없네요.

ProxyAJP를 이용한 Apache2 + Tomcat 연동시 중대한 보안 문제

– 2010.08.03 추가
아래에 쓴글은 정상적으로 작동하지 않으며 다음의 방법이 보안을 위한 정상적인 방법입니다.


ProxtRequests 설정을 Off로 변경 :
외부 요청이 차단됨, 이후에도 ProxyPass, ProxtPassMatch등 정상 사용 가능


– 기존의 글

기존에 다음과 같은 ProxyAJP를 이용한 Apache2와 Tomcat의 연동법에 대한 글을 썼었습니다.

Proxy AJP + mod_rewrite를 이용하여 Apache 2.2 + Tomcat 완벽 연동하기
Apache 2 Proxy AJP를 이용한 호스팅 환경에서의 완벽 연동

하지만 위의 방법들에 중대한 보안 문제가 있다는 것을 알게 되었습니다. 어느 순간부터인가 서버에 엄청난 트래픽이 유입되더군요.

저는 단순히 DDOS공격인줄 알았습니다. IP는 정체를 알수 없이 전세계에서 들어오더군요. 사실상 끝나기를 기다리며 내 서버에는 사실상 영리목적의 사이트가 없는데 무엇이 목적일까 고민하게 되었습니다.

우선 쌓이는 로그가 매우 특이한것을 알수 있었습니다. 로그는 대충 다음과 같은 형식이었습니다.

[code]202.109.175.224 – – [17/Apr/2009:21:17:39 +0900] “GET http://www.dfwater.com/Index.asp HTTP/1.1” 503 28 “http://www.dfwater.com/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)”
84.16.227.121 – – [17/Apr/2009:21:17:35 +0900] “GET http://www.google.com/ie?q=puts+inurl:?p%3D&hl=en&num=100&start=200&sa=N HTTP/1.0” 302 335 “http://www.google.com/ie?q=puts+inurl:?p%3D&hl=en&num=100&start=200&sa=N” “Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)”
64.91.72.166 – – [17/Apr/2009:21:17:39 +0900] “CONNECT 205.188.251.26:443 HTTP/1.0” 200 – “-” “-“
61.160.211.12 – – [17/Apr/2009:21:17:36 +0900] “GET http://www.kiss888mu.cn HTTP/1.1” 500 3847 “http://www.baidu.com” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 5.1)”
118.69.166.3 – – [17/Apr/2009:21:17:39 +0900] “GET http://69.147.112.211/config/isp_verify_user?l=mmg&p=0011 HTTP/1.0” 200 26 “-” “-“
208.70.78.177 – – [17/Apr/2009:21:17:36 +0900] “GET http://www.google.com/ie?as_q=inurl:/guestbook.html+tampa+fl+gay+life+and+dating&num=100&hl=en HTTP/1.0” 302 355 “http://www.google.com/ie?as_q=inurl:/guestbook.html+tampa+fl+gay+life+and+dating&num=100&hl=en” “Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b2) Gecko/20050224 Firefox/1.0+”
78.30.203.105 – – [17/Apr/2009:21:17:39 +0900] “GET http://inmarket73.ru/forum/index.php?s=fb2bade970f814c6d66c67f414a2328b&act=Reg&CODE=image&rc=35f728107e6ae6292a22c4e6f16634ac&p=3 HTTP/1.0” 200 68 “http://inmarket73.ru/forum/index.php?act=Reg&CODE=image&rc=7f430230e31d334872d1b5136a57b9ce&p=1” “Mozilla/4.0 (compatible; MSIE 6.0; AOL 9.0; Windows NT 5.1)”
94.76.199.2 – – [17/Apr/2009:21:17:36 +0900] “GET http://superschurke.de/comments/feed/ HTTP/1.1” 404 809 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)”[/code]

로그가 좀 지저분 합니다만 형식이 다음과 같다는것만 보시면 됩니다. 요청이 GET 메서드 이후에 http로 시작하는 것을 알수 있습니다. 그것도 전혀 쌩뚱 맞은 도메인과 호스트에 요청을 합니다.

이것이 왜 이상하냐면 보통의 브라우저는 요청을 할때 다음과 같이 합니다. theeye.pe.kr/index.html의 요청이 있다면 DNS에 질의 하여 theeye.pe.kr 도메인의 호스트 IP를 알아낸 이후에 그곳에 접속하여 GET /index.html 과 같은 방법으로 요청을 하게 됩니다.

위와 같은 방법은 마치 여의도에 가서 “롯데월드가 어딧나요?” 라고 물어보는 꼴이 되는 것입니다.

왜 저런 요청이 자꾸 들어오는 것인지 궁금하여 서버에 다음과 같이 테스트를 해보았습니다.

[code]telnet theeye.pe.kr 80
GET http://www.naver.com[/code]
자, 상식적으로 잘못된 요청이라고 나와야 하지만 정상적으로 페이지가 출력됩니다. 아니 왜 내 서버에서 엉뚱한 사이트의 요청을 처리해 주는 것이지!?

이제 여의도에 가서 “롯데월드가 어딧나요?” 라고 물었더니 상대방이 자기 차에 태워 롯데월드에 데려다 주었습니다.

친절한 사람이군요;;; 근데 문제가, 이걸 악용해서 소문이 나서 세상의 모든 사람이 이 친절한 사람에게 와서 자신이 가고싶은 곳이 어딧는지를 물어본다는 것이 문제가 됩니다.

서버가 엉뚱한 요청을 받아 대리 요청후에 결과를 되돌려 주는 문제는 일전의 Proxy설정의 잘못이었습니다.

ProxyAJP설정을 별다른 보안 절차 없이 설정하게 되면 이 세상 모든 http 요청의 IP세탁 시스템으로 둔갑되어질 수 있습니다.

이문제를 해결하기 위해서는 간단하게 Proxy 요청은 로컬호스트에서만 가능하게 설정하시면 됩니다.

[code]<Proxy *>
Order Deny,Allow
Deny from all
Allow from localhost
</Proxy>[/code]
간단하게 해결되었죠? Proxy 설정을 하시고 서버를 운영하시는 분들은 다른 호스트로의 요청을 해보시기 바랍니다.

에러없이 요청이 정상처리 된다면, 이제 표적이 되기전에 설정을 조금 손보시기 바랍니다.

첨언 : 추가로 로그들을 쭉 분석해 봤는데, 위와 같은 방법을 사용하는 이유는 특정 사이트의 검색요청을 계속하여 검색랭킹을 올린다거나, 추천사이트의 어뷰징 혹은 사이트 페이지뷰를 높이는데 사용되어지는 듯 싶습니다.