Figure 1 악성코드 유포의 Paradigm
먼저 공격자들은 취약한 웹 서비스를 검색하여 악성링크를 삽입합니다. 두 번째로 방문자들이 웹 서비스를 받기 위해 사이트에 접속을 합니다. 세 번째로 웹에 접속하면 첫번째에 공격자들이 삽입한 악성링크로 인해 악성코드 경유지로 자동 연결합니다.
마지막 네 번째로 악성코드 경유지에서 사용자가 인지할 수 없게 악성코드를 다운 받아 실행합니다. 그렇게 되면 방문자 PC는 좀비 PC가 되고 공격자가 방문자 PC의 모든 권한을 획득할 수 있습니다.
연예기획사나 국내 유력 언론사, 파일공유, 꽃배달, 부동산, 메타블로그, 호스팅 사이트 등은 어떻게 해서 악성코드를 유포하게 된 것일까요? 아니, 그전에 악성코드가 유포 됐다는 것은 어떤 뜻인지 알아봅시다.
악성코드를 유포한다는 것은 단수한 코드의 삽입이 아니라 소스 코드의 직접적인 수정을 의미합니다. 코드를 수정하기 위해서는 모든 권한을 다 가지고 있어야만 하는데, 지금 공격하는 유형들은 모두 Database의 권한을 직접 공격하는 유형이라서 Database에 저장된 많은 자료들은 이미 유출 되었다고 보는 것이 맞을 것입니다.
현재 한국 인터넷의 상황은 매우 위험한 상황입니다. 연예기획사 뿐만 아니라 주요 언론 매체, 파일공유 사이트, 꽃배달, 부동산 사이트 등 다양한 분야에 걸쳐서 매우 위험한 악성코드가 유포되고 있어 장기적으로 영향을 주고 있습니다.
해당 웹 사이트가 해킹 당해서 악성코드를 유포하고 있는 상황인데 사용자들에게 해가 되는 악성코드를 유포한 책임이 없을까요?
여기 눈 여겨 보려하지 않고 외면 하고자 하는 불편한 진실이 있습니다. 이미 오래전 이야기지만 지금까지도 진행형이고 앞으로도 심각성이 더 높아질 수 밖에 없는 불편한 진실입니다. 아직도 많은 이들의 관심 밖에서 이뤄지는 현실이 여기있습니다.
안전한 웹 서비스로 가는 길은 멀고도 험합니다. 그러나 대부분이 쉽게 생각합니다. 공격자들은 항상 그 빈틈을 노리고 끊임없이 공격합니다. 일반 인터넷 사용자들은 자신의 아이디와 패스워드가 노출되어 금전적인 손실이 발생하거나 피해를 입었을 경우에만 민감하게 반응합니다.
개인 PC에 설치된 악성코드의 문제를 개인 사용자의 부주의로 돌리는 것은 잘못된 것입니다. 이제는 기본적인 보안 대책을 철저하게 실천한다해도 악성코드로부터 안전하지 않습니다. 제로데이 공격은 벤더사(MS, 오라클, 어도비 등)에서 패치를 해주기 전까지 개인 사용자들은 속수무책으로 당할 수 밖에 없습니다.
악성코드 감염 원인으로는 웹으로 유포, Active X 설치, 성인 동영상에 악성코드 은닉, 불법 소프트웨어 설치 등이 있지만 가장 위험한 것은 웹을 통해 대규모로 유포하고 있는 것입니다. 웹으로 인한 유포는 드라이브바이다운로드(Drive by download)로 홈페이지에 접속하기만 해도 악성코드에 감염이 되기 때문이죠.
어떤 접속 도구를 이용하던 웹 서핑을 하면서 자료를 확인하고 정보를 공유하는 지금의 시대에 안전한 상태로 개인 PC를 유지 하려면 인터넷을 하지 말아야 하는 수준입니다. 사용자 PC의 안전한 설정은 가능성을 조금 줄이는 옵션일 뿐입니다.
왜 이런 심각한 상황까지 전개가 된 것일까요? 이런 심각한 상황이 오게 된 근본 문제를 해결해야 되지 않을까요? 혹시 우리는 근본적인 문제에는 관심이 없고 다른 부가적인 것들에 관심을 가지고 있지 않았는지 고민해 봐야 할 시점입니다.
비용대비 효과
인간은 누구든지 적게 노력하고 큰 보상을 기대합니다. 마치 우리가 학교 시험을 보면서 비록 공부는 많이 못했지만 시험 점수는 높이 받고 싶은 것과 마찬가지 입니다. 공격자들도 공격하는 노력에 비해 많은 이익을 취하려 합니다. 그러한 이유로 다른 여러가지 악성코드 감염 방법중에서 좀비 PC를 가장 많이 확보할 수 있는 공격인 웹을 통한 악성코드 유포 방법을 사용하는 것입니다.
Figure 5 웹메일 거래금액(1계정/US)
Gmail이 다른 메일보다 가격이 높은 것은, 메일만이 아니라 Google 서비스의 공통 패스워드로도 사용되고 있기 때문입니다. 스마트폰, 안드로이드, SNS인 Google+, 쇼핑이나 YouTube의 계정에도 이용될 수 있기 때문에 가격이 높을 수 있다고 추정할 수 있습니다.
암시장에서 거래되는 가격이 이렇게 싼 이유는 공격자들끼리의 거래에서 신뢰성이 없기 때문입니다. 이 정보들은 직접 금전 거래보다도 범죄 툴로써 사용되는 경우가 많습니다. 수요와 공급의 법칙으로 불법 프로그램이나 피싱 사이트에 의해 개인정보탈취, 사이트로부터 유출 등에 의해 암시장에 돌아다니는 개인정보의 절대량이 증가하고 있기 때문에 가격이 싸지는 것입니다.
Figure 10 인자값의 종류(짜장면, 짬뽕)
인자값이란 음식이란 종류에 들어갈 수 있는 값입니다. 여기에는 짜장면, 짬뽕, 닭도리탕, 청국장 등이 들어갈 수 있겠지요. 여기에 음식이란 종류인지 최종적으로 확인을 해야 되는데 확인을 하지 않아서 문제가 생기는 것입니다. 예를 들어 인자값에 ‘나 너 해킹할 거야’, ‘바보ㅋㅋ 너 해킹 당했다’ 등이 들어온다면 음식의 종류가 아니므로 걸러내야 하는데 그러지 못하기 때문에 해킹을 당하는 것입니다.
Figure 12 변수의 의미
웹소스 상에 SQL 구문에 사용자에게 받은 변수가 그대로 사용이 됩니다. 변수라는 것은 마법사가 주문을 다르게 말할 때마다 모자 속에서 토끼, 비둘기 등이 무작위로 나오는 모자처럼 계속 변하는 것이 들어있는 공간입니다.
SELECT id, url, page FROM page_table
where notice=page and second=injection
notice변수의 값에page가 아닌 다른 위험한 것이(DB 유출할 수 있는 명령, ‘넌 해킹 당했어 ㅋ’등) 오게 된다면 어떻게 될까요?
간단한 명령으로 웹서버는 권한을 장악당해 해킹당할 수 있습니다. 그러므로 notice변수의 값을 SQL 구문에 넣기 전에 한 번쯤 갈때기에 넣고 정확한 값만 들어갈 수 있도록 걸러줘야 됩니다. 사용자에게 오는 정보는 변조됐을 수도 있기 때문에 신뢰할 수 없습니다. 꼭 믿을만한 도구로 확인을 해야 합니다.
Figure 14 Google 검색을 이용한 공격 방법
asp로(inurl) 되어있는 페이지를 찾습니다. 수 많은 검색 결과가 나올 것을 대비해 해당 공격하기 위한 타겟 사이트로 검색 결과를 한정합니다. 이 중에서 MSSQL DB 에러를 검색 합니다. 그렇게 된다면 최종적으로 asp를 사용하는 타겟 사이트 중에서 MSSQL DB 에러가 난 항목들만 검색할 수 있습니다.
• inurl: .asp site:target.com -> asp 사용하는 DB 확인
• site: target.com 80040e14 -> MSSQL DB 에러 검색 등
• 이외에 다양한 방법으로 공격 대상을 찾습니다.
• www.target.com/vuln.asp?idx=1&cd=1234 등과 같은 링크 찾는 용도로도 사용됨
이제 이런 취약한 링크들을 찾았다면 공격 조건에 합당한지 확인을 할 수 있습니다.
• Ex) www.target.com/vuln.asp?idx=1&cd=1234 여기에서 인자는 두 개를 지니고 있다. idx, cd 두 개의 인자를 가지고 있으며 이 인자 각각에 대한 입력값 검증(Input validation) 검사 수행
• www.target.com/vuln.asp?idx=1’ or www.target.com/vuln.asp?idx=1 and 등의 문자(SQL 조작 명령어, DB의 정보를 유출 위험)를 입력하였을 경우 HTTP 500 에러(서버측에서 오류가 난 것으로 판단)가 발생하면 공격 대상 선정
Figure 16 자동화된 도구의 테스트 버전
Figure 17 Web Shell
Figure 18 SQL Injection 공격 코드 Example - 1
Figure 19 SQL Injection 공격 코드 Example - 2
Figure 21 공격 툴을 이용한 공격 Example - 2
Figure 23 국내 보안 현실
현재 국내 보안의 현실을 이 만화보다 더욱 잘 표현한 것은 없다고 생각합니다. 공격자들의 목적은 금전적 이득입니다. 이들은 중앙일보 메인 홈페이지를 변조한 해커들과는 다른 양상을 띄고 있습니다. 소리 소문없이 금전적인 이득을 취하는 이들이야말로 우리들이 막아야 할 얼굴없는 침입자들이 아닐까요?
본 기획기사는 3부, Know your Enemy - Use(악성코드를 유포하고 어떻게 정보들을 악용하는지)에 대한 주제로 이어집니다