IT
posted by 구름너머 2006. 12. 18. 09:29
  • 조립PC 가벼워졌네
  • 겨울방학 가격 인하… 20만원대에 구입 가능
    AS는 불편…부품 정품인지 꼭 확인해야
  • 김기홍 darma90@chosun.com
    입력 : 2006.12.17 22:40 / 수정 : 2006.12.18 01:51
    • 초·중·고등학교의 겨울방학이 곧 시작된다. 방학이 되면 청소년들이 집안에 머무르는 시간이 늘어난다. 개인용 컴퓨터(PC) 역시 한창 바빠지는 때이기도 하다. 이번 기회에 구형 PC를 최신형 PC로 바꾸는 것은 어떨까.

      경제적 부담이 걱정된다면, 브랜드PC에 비해 가격이 저렴한 조립PC를 사는 것도 한 방법이다. PC 업계가 연말연시 최대 성수기를 맞으면서, CPU(중앙처리장치)·메인보드(주기판) 등 핵심 부품 가격도 많이 내려가는 추세이다.

      ◆조립PC, 낮은 비용으로 원하는 사양 가능

      조립PC는 서울 용산전자상가 등에서 소비자가 직접 부품을 선택해 조립한 PC를 말한다. 소비자의 부품 선택권이 거의 없는 브랜드PC와 달리, 조립PC는 소비자의 기호에 따라 부품을 고를 수 있다.

      조립PC는 비슷한 사양일 경우, 가격이 브랜드PC보다 최대 절반 가까이 싸다. 하지만 브랜드PC에 비해서 AS(애프터 서비스)가 불편하다는 것이 가장 큰 취약점이다. 고장이 난 PC를 소비자가 구입한 곳으로 들고 가거나, 고장이 난 부품을 제조업체나 구입처에서 1대1로 교환받아야 하기 때문이다.

      ◆인터넷·문서 작업은 20만~30만원대도 무리 없어

      모든 사람이 고성능 PC를 살 이유는 없다. 집에서 인터넷이나 문서 작업 등을 주로 한다면, 20만~30만원대(이하 모두 모니터를 제외한 가격)로도 충분하다. MP3플레이어나 동영상을 보는 데도 무리가 없고, 간단한 온라인 게임을 즐기는 데도 큰 문제가 없다.

      저가 조립PC는 보통 비용 절감을 위해 별도의 그래픽 카드 없이 메인보드에 내장된 그래픽 칩으로 화면을 출력한다. CPU는 저가 제품인 인텔의 셀러론이나 AMD의 샘프론을 사용하고, 메인 메모리는 윈도XP 구동을 위한 최소 사양인 512MB(메가바이트) 정도는 확보해야 한다. 주의할 점은 나중에 발생할지 모르는 AS에 대비해 모든 부품을 정품으로 구성해야 한다는 점이다.

    • ◆3D 게임 즐기려면 50만~60만원대가 적당

      3차원(3D) 게임을 많이 즐긴다면 50만~60만원대 정도는 생각해야 한다. 현재 가장 많은 소비자가 찾는 가격대이기도 하다. 20만~30만원대는 아무래도 최신 3차원 게임을 돌리기에는 성능이 조금 떨어지는 감이 없지 않다.

      60만원대라면 가격 대비 성능이 우수한 AMD의 듀얼 코어 CPU인 ‘애슬론 64 X2’를 장착할 수도 있다. 듀얼 코어란 CPU 하나에 사람의 머리 역할을 하는 ‘코어’를 두 개 집적해 넣은 것을 말한다.

      요즘 중요성이 커지는 그래픽 카드는 엔비디어·ATI 등 비교적 인지도 있는 회사의 제품을 사용할 수 있다. 하드디스크도 100GB(기가바이트) 이상을 장착할 수 있기 때문에 용량에 대한 걱정을 할 필요가 없다.

      ◆100만원 이상이면 고성능 구현 가능

      경제적 비용에 크게 구애받지 않는 마니아들은 최고급 부품만을 선택해 조립하는 경우가 있다. 이 경우에도 100만원 조금 넘는 수준이면 구입이 가능하다. CPU는 인텔의 최신 ‘코어2듀오’, 메인 메모리는 내년 출시될 MS의 새로운 운영체제 ‘윈도 비스타’에 적당한 2GB, 그래픽 카드는 ATI 라데온 등 초호화 부품을 고를 수 있다. 고가 제품을 선택할 경우 특히 발열이나 소음 문제를 고려, 케이스나 쿨링 시스템에 신경을 많이 쓰는 게 좋다.

      자료 제공=가격비교 사이트 다나와 (www.danawa.com)

  • 'IT' 카테고리의 다른 글

    통신망 식별번호  (0) 2007.01.09
    EzURL 삭제 안내  (0) 2007.01.06
    내년(2007)부터 포털 등 보안서버 구축 의무화  (0) 2006.09.28
    개정된 주민등록법 안내  (0) 2006.09.19
    KT `CRM` 컨설팅ㆍ시스템 구축  (0) 2006.09.18
    IT
    posted by 구름너머 2006. 9. 28. 09:08
    내년부터 포털 등 보안서버 구축 의무화

    정통부, 내년까지 보안서버 3만여대 도입

    (서울=연합뉴스) 국기헌 기자 = 내년부터 인터넷쇼핑몰, 포털사이트, 중소 인터넷사업자 등은 개인정보 보호 강화를 위해 보안서버 구축이 의무화된다.

    이를 소홀히하면 최대 1천만원 이하 과태료 등과 같은 행정조치를 받게 된다.


    '보안서버'는 인터넷에서 개인정보를 의무화해 전송하는 기능을 제공하는 서버로 현재 우리나라 보안서버 보급률은 공공기관의 경우 5.7%, 민간업체는 6%에 불과, 세계 115개국 가운데 43위 수준에 불과하다.

    정보통신부는 27일 열린 국무회의에서 행정자치부 등 관계부처와 함께 개인정보 보호 강화 대책의 일환으로 보안서버 보급 확대 방안을 마련, 이를 적극 추진해 나갈 계획이라고 밝혔다.

    보안 서버 보급 확대 방안에 따르면 연말까지는 보안서버를 1만여대 도입, 세계 20위권으로 진입한 뒤 내년까지 보안서버 보급대수를 3만여대로 늘려 세계 5위권으로 도약할 계획이다.

    중점 보급대상은 올해의 경우 공공기관, 인터넷 쇼핑몰, 포털 등이며 내년에는 중.소규모 인터넷 사업자다.

    이를 위해 정통부는 연말까지 정보통신망법상의 '개인정보의 기술적ㆍ관리적 보호조치 기준'에 보안서버의 개념, 구축 대상자 및 의무화 등을 명기할 계획이다.

    특히 정통부는 보안서버 공급기관으로 한국전자인증 등 6개 공인인증기관을 이미 지정했으며 앞으로도 요건을 갖춘 민간업체도 보안서버 공급기관으로 추가 지정해 공급기반을 확대해 나갈 예정이다.

    또 현재 30만~50만원 수준인 보안서버 구축비용도 연내 10만원 수준으로 인하하고 보안서버가 구축된 웹사이트는 '보안서버 인증마크'를 부착해서 사용자가 쉽게 식별하고 안심하고 이용할 수 있도록 할 방침이다.

    penpia21@yna.co.kr
    (끝) <저작권자(c)연합뉴스. 무단전재-재배포금지.>
    2006/09/27 14:22 송고

    'IT' 카테고리의 다른 글

    EzURL 삭제 안내  (0) 2007.01.06
    조립PC  (0) 2006.12.18
    개정된 주민등록법 안내  (0) 2006.09.19
    KT `CRM` 컨설팅ㆍ시스템 구축  (0) 2006.09.18
    통신업계 하반기 공채 ''스타트''  (0) 2006.09.06
    IT
    posted by 구름너머 2006. 9. 19. 13:31
    2006년9월24일부터개정된주민등록법에의해타인의주민번호를도용하여온라인회원가입을하는등다른사람의주민등록번호를부정사용하는자는3년이하의징역또는1천만원이하의벌금이부과될수있습니다.
    *관련법률:주민등록법제21조(벌칙)제2항9호(시행일2006.9.24)

    만약,타인의주민번호를도용하여온라인회원가입을하신회원께서는지금즉시명의도용을중단하시길바랍니다.

    <부정사용>
    -다른사람의주민등록번호를도용하여인터넷회원으로가입하는행위
    -다른사람의주민등록번호를재산상의이익을위하여부정사용하는행위
    -다른사람의주민등록번호를게임등의목적으로사고파는행위
    -다른사람의주민등록번호를수집하여유출시키는행위
    -수집목적달성후에도주민등록번호를파기하지않고보관하는행위


    <개인정보보호를위한이용자수칙>
    -개인정보제공은필요한경우에만제공한다.
    -개인정보제공시개인정보보호방침을반드시확인한다.
    -개인정보의공개비공개를선택할수있는경우반드시비공개를선택한다.
    -블로그,게시판등에자신및타인의개인정보를함부로게재하지않는다.
    -주기적으로검색포털을통해자신의이름,주민번호,핸드폰번호등을검색하여개인정보노출여부를점검한다.
    -자신의개인정보가노출된사실을발견했을경우해당웹사이트또는검색포털사이트등에삭제요청등적극적으로조치를취한다.


    개정된주민등록법과관련된문의사항이있으실경우,
    한국정보보호진흥원(http://www.kisa.or.kr)으로문의해주시기바랍니다.

    'IT' 카테고리의 다른 글

    조립PC  (0) 2006.12.18
    내년(2007)부터 포털 등 보안서버 구축 의무화  (0) 2006.09.28
    KT `CRM` 컨설팅ㆍ시스템 구축  (0) 2006.09.18
    통신업계 하반기 공채 ''스타트''  (0) 2006.09.06
    2단계 .kr 도메인 18일부터 등록  (0) 2006.09.05
    IT
    posted by 구름너머 2006. 9. 18. 09:06
    KT `CRM` 컨설팅ㆍ시스템 구축

    올 11개 프로젝트… 한국IBM BCSㆍ액센츄어 등 수주경쟁
    고객군관리ㆍMPMO 제외 `선PI 후구축' 방식
    과제별 사업자 연내 선정 내년 상반기 완료

    게재일자 : 2006/02/02

    지난해 전사 통합 고객관계관리(CRM) 프로젝트를 시작한 KT가 올들어 주요 혁신과제별 후속 전략 수립 컨설팅 및 시스템 구축 작업에 본격적으로 착수한다.

    7대 CRM 혁신과제로 구성된 KT의 CRM 구축 프로젝트는 8개 프로세스혁신(PI) 및 전략수립 컨설팅 프로젝트, 8개 시스템 구축 프로젝트, 복수프로젝트관리조직(MPMO) 컨설팅 등 총 17개 세부 프로젝트로 나눠 추진되고 있다. 이중 지난해에 고객군관리 전략, 영업기회 및 활동관리 전략, 고객정보자산화 등 3개 PI 및 전략수립 컨설팅 프로젝트와 MPMO 프로젝트가 시작됐으며, 4개 프로젝트 모두 한국IBM BCS가 수주했다.

    1일 KT 마케팅부문에 따르면 KT는 상반기 중에 캠페인관리혁신, 고객서비스역량강화, 고객니즈관리혁신 등 5건의 PI 사업자 추가 선정과 함께 지난해 시작한 PI 프로젝트의 후속과제로 2건의 시스템 구축 사업자 선정에 착수할 예정이다.

    올해 가장 먼저 시작되는 프로젝트는 최근 제안요청서(RFP)가 공개된 캠페인관리혁신 PI컨설팅 프로젝트. KT는 2일 본사에서 RFP 설명회를 열고, 오는 13일까지 제안서를 마감한 후 이달 하순경 사업자를 선정할 예정이다. 또 1�4분기에 고객서비스역량강화, 고객니즈관리 혁신 PI 컨설팅 프로젝트의 사업자와 2�4분기에 채널최적화, 지식기반 업무혁신 PI컨설팅 사업자를 추가로 선정할 계획이다.

    전체 CRM 프로젝트의 전략방향을 도출하기 위해 지난해 수행한 고객군관리전략 컨설팅 프로젝트와 총괄 프로젝트관리 기능을 수행하는 MPMO 프로젝트를 제외한 나머지 과제들은 모두 `선 PI 후 시스템구축` 방식으로 진행된다. 이에 따라 지난해 수행한 PI 과제에 대한 후속 시스템구축 작업의 일환으로 1/4분기에 영업기회 및 활동관리 과제와 고객정보 자산화 과제의 시스템구축 사업자 선정이 이뤄질 예정이다.

    하반기에는 고객정보자산화 과제의 고객정보 정비 및 마케팅마트 개편 등 2가지 후속 시스템구축 프로젝트, 캠페인관리혁신 및 고객니즈관리 혁신 과제의 2가지 시스템 구축 프로젝트의 사업자 선정 작업이 예정돼 있다.

    KT는 채널최적화, 지식기반 업무혁신 과제의 시스템 구축 프로젝트를 제외한 나머지 과제의 사업자 선정을 올해까지 마무리하고, 이 두 과제에 대해서도 내년초까지 사업자 선정을 끝낸다는 방침이다. 각 과제의 사업자 선정작업이 예정대로 진행될 경우 KT는 오는 2007년 상반기말까지 전사 통합CRM 프로젝트를 완료하게 된다.

    총 17개 세부 CRM 프로젝트 중 올해 발주될 프로젝트만 11개에 달하는 만큼 주요 컨설팅 및 시스템통합(SI) 업체들의 경쟁도 본격화될 전망이다. 특히 지난해 발주된 4개 프로젝트를 싹쓸이 한 한국IBM BCS의 돌풍이 그대로 이어질 것인지, 아니면 액센츄어 등 경쟁사들의 시장진입이 이뤄질 것인지가 올해 KT CRM 프로젝트의 주요 관전포인트가 될 것으로 보인다.

    박서기기자@디지털타임스
    [저작권자(c) 디지털타임스 무단 전재-재배포 금지]

    IT
    posted by 구름너머 2006. 9. 6. 10:14
    통신업계 하반기 공채 '스타트'

    신입 및 경력사원 500여명 채용할 듯
    KT 140명, SKT 최소 100명 이상

    (서울=연합뉴스) 국기헌 기자 = 통신업계가 올 하반기 인재 모집을 시작한다.

    6일 관련업계에 따르면 KT와 SK텔레콤 등 국내 주요 통신업체들은 하반기에 약 500명을 채용할 전망이다.

    KT는 하반기에 작년과 비슷한 140명의 신입 및 경력사원을 모집한다. 부문별 채용 규모는 경력직 20명, 대졸 신입 100명, 해외 공채 20명 등이다. 대졸 신입과 해외 공채는 10월부터 실시된다. 채용절차는 서류전형, 인성평가, 실무진 면접, 임원면접 순이다.

    이 회사 채용의 가장 큰 특징은 수시채용과 경력사원 채용이 많다는 점이다. 올해의 경우 상반기에만 경력직 100명과 연구개발 및 해외공채 신입 직원을 50명 선발했다.

    KT의 신입사원 채용 전형은 창의적 '끼'를 보유한 인재(공모전 수상자, 전문자격증 소지자,제 2 외국어 능통자)를 모집하는 특별전형과 지역 IT 사회를 이끌어 갈 인재로 지역기반의 우수인력을 선발하는 지역전형, 지역구분 없이 실시하는 일반전형으로 구별해 실시된다.

    따라서 지원자의 미래 비전과 꿈에 따라 적합분야를 선정하여 지원하는 것이 바람직하며 서류 전형에서 출신대학에 따른 불이익이 전혀없는 만큼 자기소개서를 성실히 작성할 필요가 있다고 KT는 조언했다.

    작년에 130명의 신입사원을 모집했던 SK텔레콤은 4일 지원서 접수를 시작으로 11월 말까지 신입사원을 모집 전형을 실시한다. 이 회사는 채용 규모를 최종 확정하지 않았지만 최소 100명 이상을 채용하되 인재가 몰릴 경우 채용 규모를 더 늘릴 방침인 것으로 알려졌다. 전형 절차는 인성.적성 검사와 영어 시험, 2차례의 면접 등의 순서로 진행된다.

    SKT는 내부적으로 사회공헌 활동이나 이색 경험 등을 많이 한 입체적인 지원자를 우대한다는 방침에 따라 해당 지원자에게 소정의 가산점을 부여할 계획이다.

    LG텔레콤은 작년과 마찬가지로 80명에 달하는 대졸 신입 인턴 및 경력사원을 모집한다. 부문별로 대졸 신입 인턴 40명, 경력 30명, 이공계 석박사 10명 등이다.

    수시 채용하는 경력직 외에 대졸 신입 인턴과 이공계 석박사는 11월까지 입사전형을 마칠 예정이다. 대졸 신입 인턴들은 내년 1, 2월께 일선 영업현장에서 인턴십 과정을 수행하는 점이 눈에 띈다. 인재상은 강하고 지혜로운 사람이다.

    KTF는 아직 하반기 신입사원 채용 규모와 구체적 시기를 정하지 않은 상태다. 그러나 이 회사는 지난해 10월 초께 60명을 채용한 바 있어 이와 크게 달라지지 않을 전망이다.

    채용 절차는 서류전형, 인ㆍ적성검사, 면접, 토론 등의 순서로 진행되며 표명하는 인재상은 고객지향정신과 혁신 의지, 신뢰의 태도로 무장한 전문가다.

    LG파워콤은 9월과 10월 사이에 네트워크와 영업 분야에서 근무할 20~30명의 신입사원을 뽑을 방침이다. LG파워콤은 작년 하반기에 20명의 신입사원을 채용한 바 있다.

    이 회사의 인재상은 기본에 충실하고, 창의와 도전정신을 가지고 있고, 가치관이 바른 인재다.

    지난해 30명의 신입사원을 채용했던 데이콤은 30~50명의 대졸 신입사원을 채용할 계획이다.

    9월 중순 서류전형을 시작으로 인성검사와 1차 실무면접, 2차 임원면접을 통해 최종 합격자를 발표할 예정이다. 인재상은 3C(Challenger, Cooperator, Creator)를 갖춘 인물이다.

    지난해 구조조정을 단행했던 하나로텔레콤은 작년에 이어 올해도 신입사원을 채용하지 않을 예정이다. 대신 필요 인력에 대해서는 경력직 형태로 연중 수시 채용하고 있다.

    penpia21@yna.co.kr
    (끝) <저작권자(c)연합뉴스. 무단전재-재배포금지.>
    2006/09/06 05:00 송고
    IT
    posted by 구름너머 2006. 9. 5. 17:07
    2단계 .kr 도메인 18일부터 등록
    내년 4월18일까지 3단계로 나눠 등록

    2단계 .kr 도메인 등록이 18일부터 시작된다.

    2단계 .kr 도메인은 .kr 앞에 도메인의 성격을 나타내는 co, or 등이 없는 도메인을 말한다. 예를 들면 연합뉴스의 3단계 영문 kr도메인이 yna.co.kr이라면, 2단계 영문 kr도메인은 yna.kr이다.

    한국인터넷진흥원(NIDA)은 18일부터 3차례로 나눠 2단계 영문 kr도메인 등록을 시작한다고 5일 밝혔다.

    인터넷진흥원의 등록정책에 따르면 제 1기(2006. 9.18~11.20)에는 중앙행정기관 및 헌법기관이, 제 2기(2006. 11.21~2007. 3.27)에는 기존 kr도메인 등록자가 2단계 도메인을 등록할 수 있다. 제 2기에 신청한 도메인 중 신청자가 복수인 경우 상표권자, 도메인 등록일자가 빠른 자 순으로 등록인이 결정된다.

    제 3기(2007. 3.28~4.18)는 동시등록 접수기간으로 약 2주간 도메인 등록 신청을 받은 후 추첨을 통해 등록자를 결정할 계획이다.

    내년 4월18일 이후부터 누구든 먼저 신청한 사람이 2단계 영문 kr도메인을 등록할 수 있게 된다.

    이와 함께 NIDA는 미래 주소자원 고갈에 대비하고 이용자의 혼란을 예방하기 위해 2단계 영문 kr도메인으로 등록할 수 없는 ’등록 유보어’를 정했다.

    등록 유보어는 2글자 이하 문자열, 숫자 또는 숫자와 하이픈(-)만으로 이루어진 문자열, 시ㆍ도ㆍ군급 행정구역명 등이다.

    한편 인터넷진흥원은 지난 5월 공모를 통해 선정한 2단계 영문 kr도메인의 브랜드명을 ’퀵돔(QuickDom)’으로 정하고 홈페이지(quickdom.kr)를 운영 중이다.

    서울=연합뉴스
    입력 : 2006.09.05 11:22 26'

    'IT' 카테고리의 다른 글

    KT `CRM` 컨설팅ㆍ시스템 구축  (0) 2006.09.18
    통신업계 하반기 공채 ''스타트''  (0) 2006.09.06
    유지보수 비용예측  (0) 2006.09.04
    해킹기법 (서비스거부,버퍼오버플로우,스니핑)  (0) 2006.08.11
    cobit  (0) 2006.07.23
    IT
    posted by 구름너머 2006. 9. 4. 22:48
    유지보수 비용예측

    (가) Belady와 Lehman

    1) M = p + Ke^(c-d)

    *M : 유지보수를 위한 노력,

    * P : 분석, 평가, 설계변경, 코딩 등 실제 생산성 있는 노력,

    * K : 통계에 의한 상수

    * c : 설계의 비구조성이나 문서의 미흡함을 나타내는 복잡도

    * d : 소프트웨어와의 친숙성

    (나) COCOMO 방법

    1) M=ACT *DE * EAT

    *M : 유지보수를 위한 노력

    * ACT : 개발조직이 수행하는 전체 프로젝트 규모에서 유지보수

    작업이 차지하는 연평균 비율(annual change traffic)

    * DE : 개발때 필요했던 노력

    * EAT : COCOMO의 유지보수 작업을 위한 노력 조정수치

    IT
    posted by 구름너머 2006. 8. 11. 09:37
    [본문스크랩] [CISSP] 해킹기법 (서비스거부,버퍼오버플로우,스니핑) | 나의 관심정보 메모 삭제 2006/08/11 09:34
    damool2 http://memolog.blog.naver.com/damool2/47
    출처 블로그 > 슈마의 네트워크 이야기
    원본 http://blog.naver.com/airbag1/80014251003

    [해킹 기법] ① 서비스 거부 공격

    생활의 모든 부분에서 인터넷을 이용하고 있으며, 모든 것이 빠른 속도로 변해 가고 있다. 이런 점을 이용하여 인터넷을 통한 공격도 다양해져서 사용자들이 곤란에 빠지기도 한다. 그런데 이 기법이 나날이 고도로 지능화 되고, 순식간에 전 세계로 퍼질 수 있으므로, 각 기업 보안담당자들은 이런 현상에 대해 정확히 대비할 수 있는 지식을 갖추는데 좀 더 많은 노력을 기울여야 할 필요가 있다.

    앞으로 약 6회에 걸쳐, 가장 일반적이며 이슈가 되고 있는 해킹 기법과 대응방법에 대해 알아보도록 하자.

    1. 서비스 거부 공격(Denial of Service Attack)

    차를 몰아본 경험이 없는 사람이라 하여도, 출퇴근길 뿐만 아니라 시도 때도 없이 막히는 서울의 교통체증은 누구나 다 아는 이야기이다. 이러한 체증의 원인 중에 하나가 "병목현상"이란 단어로 설명될 수 있는데, 이 현상은 쉴새 없이 수많은 정보들을 전세계로 이어 주고 있는 인터넷이란 교통구간에서도 동일하게 적용되고 있다.

    최근 1.25 대란 사태에도 인터넷의 주소지 역할을 하는 DNS(Domain Name Server)가 처리할 수 있는 용량을 크게 넘는 요청이 쇄도하여 서비스가 중지됨으로써 하루동안 인터넷을 사용하지 못하는 대형사고가 발생하였던 경험을 가지고 있다. 다행이 업무시간을 피해 주말에 일어난 사고라 개개인들이 직접 피부로 느끼지는 못하였지만 일부 중요 서비스의 중단만으로도 사회 곳곳에서 많은 불편을 겪어야만 했다.

    서비스 거부 공격이라 함은, 시스템의 정상적인 서비스를 방해할 목적으로 대량의 데이터를 보내 대상 네트워크나 시스템의 성능을 급격히 저하시켜 대상 시스템에서 제공하는 서비스들을 사용하지 못하게 하는 공격으로 해킹 수법중의 가장 일반적인 방법이다.

    인터넷 사용자가 많지 않았던 초기의 서비스 거부 공격은 단일 시스템이나 서비스를 목표로 하는 공격자에 대한 피해자의 1:1 유형이 주류를 이루고 있었다. 그러나 최근에는 분산 서비스 거부공격이란 이름으로 N개의 불특정 시스템이 단일 네트워크를 대상으로 공격을 시도하는 N:1 유형이 주류를 이루고 있다.

    이러한 공격은 사전에 공격을 받아 감염된 불특정 다수의 시스템으로부터 동시에 공격이 시도됨으로써 그 피해는 단일 시스템 뿐만 아니라 전체 네트워크까지 마비시킬 수 있는 파괴력을 가지고 있다. N:1 유형의 공격방법은 수작업으로는 많은 시간이 소요되기 때문에 주로 웜(Worm)과 같은 자동화된 공격도구가 사용되는 경우가 많다. 따라서 공격도구의 특성을 제대로 파악하면 이에 대한 대응방법도 마련될 수 있기 때문에 이러한 연구활동도 전세계적으로 활발하게 진행되고 있다.

    기술적인 대응방법뿐만 아니라 가장 중요한 것은 사전에 증후 발견이다. 이러한 공격은 대규모 네트워크를 이용하기 때문에 비정상적인 네트워크 흐름을 유발하여 초기에 이상징후를 탐지한다면 이에 대한 빠른 대응이 가능하게 된다.

    이를 위하여 기본적인 보안솔루션을 구축하는 것은 물론, 적절한 관리와 운영이 병행해야 할 것이다. 또는 전세계적인 망을 가지고 있는 침해 사고 대응팀, 혹은 보안서비스 전문업체와 긴밀한 관계를 유지하여 기업보안 대책을 지속적으로 업데이트 시켜 주는 것이 무엇 보다 중요하다 하겠다.


    [해킹 기법] ② 버퍼 오버플로우(Buffer overflow)

    보안에 관심 있는 사람이라면 "버퍼 오버플로우"란 용어가 낯설지 않을 것이며, 그 중 적극적인 관리자라면 인터넷에 널려있는 다양한 버퍼 오버플로우 exploit(공격코드)을 다운로드 받아서 테스트도 해 봤을 것이다. 그 결과는 어떠했나? Exploit 코드가 지시하는 컴파일 옵션과 대상 서버가 적절했다면 손쉽게 root 권한을 획득했을 것이다. 물론 공격에 성공했다고 '버퍼 오버플로우"에 대해서 모든 것을 안다고 자신 있게 말할 수 있는 사람은 그리 많지 않을 것이다.

    본 문서에서 "버퍼 오버플로우"의 A~Z까지를 설명할 필요는 없을 것이며(이미 뛰어난 문서들이 발표되어 있기 때문에) "버퍼 오버플로우"의 개념 이해를 목적으로 설명하겠다.

    "버퍼 오버플로우"란?

    말 그대로 버퍼를 넘치게(overflow) 하는 것을 의미하며, 풀어서 설명하면 메모리에 할당된 버퍼의 양을 초과하는 데이터를 입력하여 프로그램의 복귀 주소(return address)를 조작, 궁극적으로 해커가 원하는 코드를 실행하는 것이다. 여기에서 "버퍼(buffer)"란 프로그램 처리 과정에 필요한 데이터가 일시적으로 저장되는 공간으로 메모리의 스택(stack) 영역과 힙(heap) 영역이 여기에 속하며, "버퍼 오버플로우"가 이 두 가지 영역 중 어떤 것을 이용하느냐에 따라서 두 가지로 분류할 수 있다. 본 문서에서는 그 개념이 잘 알려져 있고 스택 기반의 버퍼 오버플로우에 초점을 맞춰서 설명하겠다. 이처럼 버퍼 오버플로우의 개념을 이해하기 위해서는 프로그래밍에 대한 기초 지식이 필요하며 이로 인하여 고급 해킹 기법으로 분류되고 있다.

    "버퍼 오버플로우"의 역사

    버퍼 오버플로우는 해킹 기법이 아닌 단순한 프로그램상의 문제로 처음 소개되었는데 1973년경 C언어의 데이터 무결성 문제로 그 개념이 처음 알려졌다.
    이후 1988년 모리스웜(Morris Worm)이 fingerd 버퍼 오버플로우를 이용했다는 것이 알려지면서 이 문제의 심각성이 인식되기 시작했으며, 1997년에는 온라인 보안잡지로 유명한 Phrack(7권 49호)에 Aleph One이 "Smashing The Stack For Fun And Profit"란 문서를 게재하면서 보다 널리 알려지게 됐다. 이 문서는 다양한 "버퍼 오버플로우" 공격을 유행시키는 계기가 됐으며 현재까지 해커 지망생들의 필독 문서로 자리잡아 오고 있다. 이후 "버퍼 오버플로우"는 SANS(www.sans.org)에서 매년 발표하는 TOP20 공격기법 가운데 상당수를 차지하면서 해커들의 꾸준한 사랑을 받아오고 있다.


    "버퍼 오버플로우"는 어떻게 이루어지는가?

    버퍼 오버플로우의 정확한 동작원리를 이해하기 위해서는 프로그램에 의해 데이터가 어떻게 저장되는가를 우선 이해해야 한다. 하나의 프로그램은 수많은 서브 루틴들로 구성되는데 이런 서브 루틴이 프로그램에 의해 호출될 때, 함수 변수와 서브 루틴의 복귀 주소(return address) 포인터를 스택(stack)이라는 논리적 데이터 구조에 저장하게 된다. 스택은 실행중인 프로그램이 필요로 하는 정보를 저장하는 메모리 영역이다. 서브 루틴이 종료될 때 운영체제는 그것을 호출한 프로그램에 제어권을 반환해야 하기 때문에, 복귀 포인터를 통해서 프로그램이 서브 루틴의 실행을 마치고 나서 되돌아갈 주소를 가리키게 된다.

    버퍼는 할당된 메모리 공간의 높은 주소에서 낮은 주소로 채워지며, 스택 영역에 마지막으로 들어가 데이터가 제일 먼저 빠져 나오는 LIFO(Last in, First out) 특정을 가지고 있다. 이런 LIFO 특성에 의해 가장 먼저 들어가 것(복귀 포인터)이 스택에서 가장 나중에 제거된다는 것을 기억해야 한다. 서브 루틴이 실행을 마치면 가장 나중에 행해지는 것은 복귀 포인터를 스택에서 제거하여 서브 루틴을 호출한 함수로 반환하는 것인데, 만약 이 포인터가 사용되지 않는다면 서브 루틴이 실행을 마쳤을 때 프로그램은 더 이상 어디로 진행해야 할지를 알 수 없을 것이다.

    포인터(pointer)는 메모리의 위치를 저장하는 변수이다. 프로그램 실행을 위한 목적으로 다른 코드로 이동할 때 어디에서 떠났는지를 기억하기 위해 포인터를 사용해야 하며, 만약 포인터를 사용하지 않는다면 서브 루틴의 실행이 끝나고 어디로 돌아와야 할지를 알 수 없을 것이다.

    이제 스택을 조작하게 되면 어떤 일이 일어나는지를 살펴 보겠다. 프로그램이 변수의 할당된 공간에 저장될 데이터의 크기를 검사하지 않고 크기에 제한을 두지 않는다면, 변수 공간은 넘치게 될 것이다. 즉, 버퍼에 오버플로우가 발생하면 저장된 데이터는 인접한 변수 영역도 침범할 것이며 결국에는 포인터 영역까지 침범하게 될 것이다. 해커는 이러한 데이터의 길이와 내용을 적절히 조정함으로써 버퍼 오버플로우를 일으키고 운영체제의 스택을 붕괴시켜 특정 코드가 실행되도록 한다. 해커가 보낸 데이터는 대개의 경우 특정 시스템에서 실행될 수 있는 기계어 코드와 복귀 포인터에 저장될 새로운 주소로 구성되어 있으며, 복귀 포인터에 저장될 새로운 주소는 다시 메모리의 스택 영역을 가리켜서 프로그램이 서브 루틴에서 반환될 때 해커가 작성한 명령어를 실행하게 되는 것이다.

    이때 고려해야 할 것은 공격 대상이 되는 프로그램이 무엇이든 간에 해커가 공격 코드는 프로그램이 실행되고 있는 권한으로 실행될 것이라는 점이다. 따라서 해커는 공격을 성공시켰을 경우에 시스템에 대한 최상위 권한을 얻기 위해, root 또는 administrator 권한으로 실행 중인 프로그램을 공격 대상으로 삼을 것이다.

    이론상으로는 매우 직관적인 것 같지만 실제로 이 공격을 실행하는 것은 간단한 작업이 아니다. 하지만 이런 과정이 어떻게 이뤄지는지 제대로 이해하지 못 하는 스크립트 키디(script kiddie)도 쉽게 공개된 공격 코드를 이용하여 버퍼 오버플로우 공격을 시도할 수 있으니 보안 관리자들에게 보다 많은 업무를 주는 상황이라고 할 수 있다.


    "버퍼 오버플로우" 취약성이 많은 이유는?

    많은 프로그램이 취약성을 갖는 중요한 이유는 오류 검사를 제대로 수행하지 않기 때문이다. 오류 검사를 수행하지 않는 큰 이유 중의 하나는 개발자가 근거 없는 특수한 가정을 하기 때문이며, 정상적인 환경에서 변수에 할당된 메모리의 크기가 충분하다고 과신하는 것도 문제가 된다. 취약한 프로그램일지라도 사용자들이 올바르게 사용하여 발표된 지 수 년이 지나도 아무런 문제 없이 동작해온 경우도 있다. 그러던 중 누군가가 갑자기 "만일 프로그램에 원래와 다른 종류의 정보를 넣으면 어떤 일이 생길까?", "프로그램에 기대되는 크기보다 더 많은 데이터를 넣으면 어떤 일이 일어날까?"하는 식의 궁금증을 갖게 되었고 오류 검사를 수행하지 않는 프로그램들은 그런 궁금증의 실험대상이 되어 해킹의 목표가 되고 있다.

    이 글을 마무리하며

    "버퍼 오버플로우" 공격은 취약한 프로그램을 대상으로 공격자가 원하는 코드를 실행시킬 수 있다는 측면에서 매우 위험하며, 그 결과로 얻는 피해 범위는 시스템을 중지시키는 것에서부터 관리자 권한을 얻는 것까지 다양하다.
    보안 관리자는 "버퍼 오버플로우"가 어떻게 동작하는지 이해하고, 평상시에 벤더에서 제공하는 소프트웨어 관련 패치 적용, 최소 권한으로의 프로그램 실행, 불필요한 서비스 제거, 침입차단시스템을 통한 유해 트래픽 차단을 통해 공격 피해 가능성을 최소화해야 한다.
    오늘 아무런 문제가 없었다 하더라고 내일 역시 안전할 것이라는 맹신을 버려야 한다. 지금 이 시간에도 지구 저편에서는 열심히 공격코드를 테스트하는 누군가가 있을 테니까….


    [해킹기법] ③ 웹 애플리케이션 해킹 (Web Application Hacking) 1

    최근까지 주류를 이루던 해킹은 운영체제나 프로토콜 설계상의 버그, 또는 개발자들의 본래 의도와는 다르게 보안상 심각한 결과가 초래될 있는 취약성들을 이용한 기법들이 대부분이었다. 전문 해커들에 의해 익스플로잇(해킹 코드)이 발표될 때 까지는 해킹 지식이 적은 사람(Script Kiddy)들에 의해 무분별하게 악용될 가능성은 적었지만 일단 발표가 되고 나면 쉽게 악용되어 취약한 시스템을 운영하는 기업이나 기관에 많은 악영향을 미쳐왔다. 그러나 이러한 취약성들은 패치를 적용하고 구성 설정을 변경하거나 외부로부터의 접근을 적절히 통제할 수 있는 보안 솔루션(라우터, 방화벽 등)에 의해 비교적 쉽게 해결이 가능했다.

    최근 해킹의 화두는 웹 애플리케이션의 취약성을 이용하는 것이다. 그러한 이유를 위에서 언급된 내용을 토대로 말하자면 요즘 대부분의 기업이나 기관들은 시스템의 패치나 구성설정 변경을 제대로 하고 있지 못하더라도 접근 통제 솔루션을 하나 이상은 갖추고 있어서 외부로부터 유입되는 부적절한 접근으로부터 내부의 시스템을 보호할 수 있는 장치를 마련하고 있다. 그러나 이러한 솔루션이 갖추어져 있더라도 필수 불가결하게 서비스해야 하는 것이 바로 웹 서비스이다. 접근 통제 솔루션은 웹 서비스로 접근하는 패킷을 통제하지 않고 내부로 유입시키기 때문에 만약 통과되는 패킷에 악의적으로 패킷을 조작해서 보낸다면 정상 패킷으로 간주하여 적절한 통제를 하지 못하게 된다.


    [그림 1] 최근 해킹 경향(발췌: SPI Dynamics)



    이러한 배경을 토대로 이제까지 발표되어 악용되었던 웹 애플리케이션 취약성 유형을 크게 10가지로 나눌 수 있는데 이번 호에는 그 중 3 가지 취약성에 대해 설명하고 간략하게나마 취약성을 예방할 수 있는 방법을 소개하겠다. 좀더 자세한 내용을 원한다면 코코넛 시큐리티 레터 8월호의 참고 자료를 참조하면 된다.

  • 검증되지 않은 파라미터의 허용(Unvalidated Parameters)
  • 부적절한 접근 통제(Broken Access Control)
  • 부적절한 계정과 세션 관리(Broken Account and Session Management)
  • 크로스 사이트 스크립팅 허점(Cross-Site Scripting(XSS) Flaws)
  • 버퍼 오버플로우(Buffer Overflows)
  • 시스템 명령어 삽입 허용(Command Injection Flaws)
  • 잘못된 오류 처리(Error Handling Problems)
  • 안전하지 않은 암호화 메커니즘 사용(Insecure Use of Cryptography)
  • 원격 관리 허점(Remote Administration Flaws)
  • 웹과 애플리케이션 서버의 구성 설정상의 오류(Web and Application Server Misconfiguration)



  • 1. 검증되지 않은 파라미터의 허용(Unvalidated Parameters)

    클라이언트로부터 웹 애플리케이션이 요청을 받았을 때 그 요청이 적절한 값인지 여부를 검증하지 않음으로 인해 백엔드에 존재하는 허가되지 않은 자원에 접근할 수 있는 취약성이다. url, 쿼리 문, HTTP 헤더, 폼 필드, 쿠키, 그리고 숨겨진 필드 등의 웹 요청(HTTP request) 들을 강제로 브라우징 한다거나 명령어 삽입, SQL 문 삽입, 쿠키 위/변조등을 통해서 보안 메커니즘을 우회할 수 있게 된다.

    [예방 방법]

    웹 요청에 대한 잘못된 예외 규칙을 다음과 같이 정하여 소스 코드에서 철저하게 검증을 하는 것이다.

    - 데이터 형식(문자, 정수, 실수 등)
    - 허용되는 문자셋
    - 최소, 최대 허용 길이
    - NULL 값의 허용 여부
    - 파라미터의 허용 여부
    - 허용되는 숫자 범위
    - 정규 표현식 등


    2. 부적절한 접근 통제(Broken Access Control)

    인증되지 않은 사용자가 시스템에 접근하여 중요한 파일 읽거나 권한 없는 기능들을 수행할 수 있는 취약성이다. 예를 들자면 허가되지 않은 사용자가 웹 요청을 통해서 유닉스 시스템의 /etc/passwd 파일을 읽거나 윈도우 시스템의 웹 루트 디렉터리를 읽을 수 있는 등의 경로 유출(Path Traversal)을 허용하는 것이다. 이러한 취약성은 웹 컨텐츠와 기능에 적절한 접근 통제를 하지 못하는 것이 원인이다.

    [예방 방법]

    다음과 같은 접근 통제를 점검한다.

    - 안전하지 않은 ID 점검
    - 절대 경로를 통한 인증 회피 가능 점검
    - Path Traversal 가능 점검
    - 웹 컨텐츠의 퍼미션 점검
    - 클라이언트 측의 케싱 점검


    3. 부적절한 계정과 세션 관리(Broken Account and Session Management)

    계정에 대한 증명(Account Credential)과 세션 토큰이 적절히 보호되지 못함으로 인해 패스워드나 키, 세션 쿠키, 그리고 다른 토큰 등을 악용하여 인증 메커니즘을 무력화 시키거나 다른 사용자의 아이디를 추측할 수 있는 취약성이다. 예를 들자면 사용자의 패스워드 변경, 패스워드 분실, 사용자 정보 수정 등을 포함하는 증명서와 동적 세션 관리가 적절히 개발되지 않아서 다른 사용자에 의해 추측되거나 가로채기를 당하는 것이다.

    [예방방법]

    다음과 같은 항목들에 대해 보안 정책을 강화한다.

    - 패스워드 변경 통제
    - 패스워드 복잡성
    - 패스워드 저장
    - 전송 중인 증명서 보호
    - 세션 아이디 보호
    - 계정 목록
    - 신뢰 관계
    - 백엔드 인증

    웹 애플리케이션 해킹 순서

  • 검증되지 않은 파라미터의 허용(Unvalidated Parameters)
  • 부적절한 접근 통제(Broken Access Control)
  • 부적절한 계정과 세션 관리(Broken Account and
    Session Management)

  • 크로스 사이트 스크립팅 허점(Cross-Site Scripting(XSS) Flaws)
  • 버퍼 오버플로우(Buffer Overflows)
  • 시스템 명령어 삽입 허용(Command Injection Flaws)
  • 잘못된 오류 처리(Error Handling Problems)
  • 안전하지 않은 암호화 메커니즘 사용(Insecure Use of Cryptography)
  • 원격 관리 허점(Remote Administration Flaws)
  • 웹과 애플리케이션 서버의 구성 설정상의 오류(Web and Application
    Server Misconfiguration)


  • 4. 크로스 사이트 스크립팅 허점(Cross-Site Scripting(XSS) Flaws)

    Cross-site Scripting 취약점은 공격자가 웹 애플리케이션을 사용해서 다른 최종 사용자에게 자바스크립트와 같은 악성 데이터를 보낼 때 발생한다. 그 데이터는 클라이언트에서 실행되는 Java스크립트, VB스크립트, ActiveX, Flash등을 실행하는 코드들이 존재하게 된다. 최종 사용자들은 이렇게 악성 코드들이 포함된 웹 사이트의 링크를 클릭하거나 이메일에 포함된 내용을 읽거나 BBS에 게시된 게시물을 클릭하는 것만으로도 사용자의 환경 설정사항을 변경하거나, 쿠키(cookie)를 가로채고 잘못된 광고들 게시하는 등의 일들을 할 수 있다.


    [예방 방법]

    해당 취약점을 예방할 수 있는 최선의 방안은 모든 코드들을 상세히 검증하는 것이다. 즉, 헤더, 쿠키, 질의문, 폼 필드와 숨겨진 필드등과 같은 모든 파라미터들을 엄격한 규칙에 의해서 검증한다. 또한 다음과 같이 왼쪽의 필드의 입력 데이터를 오른쪽의 필드로 변환해서 필터링한다.

    FromTo
    < & l t;
    > & g t;
    (& # 4 0;
    )& # 4 1;
    # & # 3 5;
    & & # 3 8;


    5. 버퍼 오버플로우(Buffer Overflows)

    버퍼오버플로우의 자세한 내용은 코코넛 시큐레터 6월호의 "해킹기법 제2회 버퍼오버플로우"를 참조하기 바란다.

    [예방 방법]

    운영하고 있는 웹 서버 버전을 가장 최신버전으로 업그레이드 하거나 알려진 취약점을 제거할 수 있는 패치를 적용한다. 정기적으로 취약점 스케너를 통해서 취약점 여부를 점검하여 발견된 취약점에 대해서는 구성 설정을 변경하거나 패치를 적용하여 취약점을 제거한다.


    6. 시스템 명령어 삽입 허용(Command Injection Flaws)

    웹 애플리케이션에서 HTML 형식이나 쿠키, URL 파라미터 형식으로 시스템 명령어를 삽입 허용함으로써 웹 상에서도 시스템 명령을 실행할 수 있는 취약점이다. SQL 쿼리문을 삽입 허용하게 되면 DB인증 메커니즘을 무력화시켜서 중요한 데이터베이스 정보를 외부로 유출할 수 있다. 또한 데이터베이스의 DML(Data Manipulation Language), DDL(Data Definition Language) 언어가 모두 사용 가능하므로 데이터베이스의 유출뿐만이 아니라 무결성을 파괴할 수도 있다.

    다음은 시스템 명령 삽입 허용 취약점을 악용할 수 있는 스크립트, 프로그래밍 언어의 함수들이다.

    PHP
    - require()
    - include()
    - eval()
    - preg_replace() (/e 옵션과 함께 사용)
    - exec()
    - passthru()
    - `` (backticks)
    - system()
    - popen()

    Shell Scripts
    - 모두 실행 가능

    Perl
    - open()
    - sysopen()
    - glob()
    - system()
    - ' (backticks)
    - eval()


    Java(Servlets, JSP s)
    - System.* (특별히 System.Runtime)

    C,C++
    - system()
    - exec**()
    (strcpy strcat sprintf vsprintf gets strlen (특별히 null 바이트와 함께 사용될 경우) scanf() fscanf sscanf vscanf vsscanf vfscanf realpath getopt getpass streadd strecpy strtrns)

    Python
    - exec()
    - eval()
    - execfile()
    - compile()
    - input()

    [예방 방법]

    - 반드시 필요하다면 모든 시스템 명령을 사용하는 모든 사용자의 입력값을 점검한다.
    - 점검되지 않은 사용자 입력을 시스템 명령으로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 파이프(|)로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 perl의 open() 명령으로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 C 언어와 PHP의 popen() 명령으로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 ``(backticks)과 함께 사용하지 않는다.
    - 운영체제의 시스템 명령이 사용자 입력에 존재하는지 점검한다.
    - 모든 웹 애플리케이션엔 쉘 스크립트를 허용하지 않는다.


    7. 잘못된 오류 처리(Error Handling Problems)

    적절하지 못한 오류 처리는 웹 사이트에서 다양한 보안 문제를 야기한다. 가장 보편적인 문제는 데이터베이스 덤프, 에러 코드등과 같은 상세한 내부 메시지들이 사용자에게 노출된다는 것이다. 이러한 정보들은 바로 악용 가능하지는 않지만 향후 발생할 수 있는 공격에 정보를 제공하게 된다. 이러한 문제를 야기하는 원인은 다음과 같다.

    - 스크립팅 엔진의 설정 오류
    - Servlet/JSP Runner의 설정 오류
    - 웹 서버의 설정 오류
    - 데이터베이스의 설정 오류

    이러한 문제를 통해 유출될 수 있는 정보들은 다음과 같다.

    - 애플리케이션의 흐름
    - 추가적인 웹 서버 정보
    - 데이터베이스 형식 및 버전
    - 운영체제 형식 및 버전
    - Scripting/Programming 언어의 형식 및 버전
    - 물리적인 경로
    - 변수 이름과 값
    - 변수 형식
    - 변수의 사용 목적
    - 스크립트 소스 코드의 세그먼트
    - SQL 쿼리의 세그먼트
    - 데이터베이스와 테이블의 구조


    [예방 방법]

    웹 애플리케이션이 잘못된 요청을 받았을 때 자체 제작한 오류 페이지로 이동하도록 설정한다.

    8. 안전하지 않은 암호화 메커니즘 사용(Insecure Use of Cryptography)

    대부분의 웹 애플리케이션은 패스워드, 신용카드 번호, 계정 기록과 같은 중요한 정보나 데이터베이스를 저정하고 있기 때문에 암호화 기술을 이용하여 보호하고 있다. 이러한 암호화 기술이 웹 애플리케이션에 적용될 때 다음과 같은 구현상의 오류로 인하여 보안 허점들을 내포하게 된다.

    - 안전하지 않은 키, 인증서와 패스워드 저장
    - 적절하지 못한 메모리상의 기밀 저장
    - 잘못된 난수 소스
    - 중요 데이터 암호화 실패
    - 새로운 암호화 알고리즘 개발 시도
    - 암호화 키 변경과 같은 추가적인 지원 부재

    [예방 방법]

    이러한 취약점을 예방하기 위해서는 암호화 사용을 최소화 해야한다. 즉, 신용카드 번호와 그와 관련된 정보와 같이 중요하다고 판단되는 정보만을 암호화한다. 또한 저장된 암호화된 패스워드를 사용하는 대신 단방향 함수인 SHA-1과 같은 해쉬함수를 사용한다.



    9. 원격 관리 허점(Remote Administration Flaws)

    웹 애플리케이션을 관리하기 위해 강력한 기능을 갖는 원격 관리 도구들이 많이 존재한다. 그러한 기능들은 사용자들, 데이터, 그리고 웹 사이트의 컨텐츠들을 관리 가능하게 한다. 이러한 강력한 기능 때문에 원격 관리 도구들은 내/외부에서 공격자들의 주요 목표가 된다. 가장 일반적인 문제점은 원격 관리에 접근할 수 있는 강력한 인증 메커니즘이 갖춰져 있지 못한 이유로 인해 허가되지 않는 사용자에 의해서 웹 애플리케이션의 기밀성과 무결성, 그리고 가용성이 파괴될 수 있다.

    [예방 방법]

    ACL(Access Control List)을 이용하여 원격 관리 도구에 접근할 수 있는 대상을 엄격히 제한한다. 또한 VPN를 사용하여 관리자와 원격 관리 도구간에 암호화 통신을 한다.

    아래 그림은 단계별 방어가 적용되기 전(그림 1)과 단계별 방어가 수립된 후(그림 2)의 네트워크 구성을 나타낸 것이다. 그림 2처럼 단계적으로 방어 대책이 수립된다면 관리자와 일반 사용자의 네트워크가 분리되며 시스템 용도별로 네트워크가 분리되어 단계별로 보안 대책이 수립되기 때문에 안전한 네트워크 운영이 가능하게 된다.


    [그림1] 방화벽의 단계별 보안(Layered Security)이 적용 안 된 상태




    [그림2] 방화벽의 단계별 보안(Layered Security)가 적용 된 상태


    [그림 출처] Information Security 2002년 6월호



    10. 웹과 애플리케이션 서버의 구성 설정상의 오류(Web and Application Server Misconfiguration)

    웹 서버와 애플리케이션의 구성 설정은 보안 측면에서 중요한 의미를 가진다. 그러한 구성 설정들이 다음과 같은 여러 가지 요인들로 인해 보안 문제를 야기할 수 있다. 이러한 보안 문제들은 자동화된 스케닝 도구에 의해 공격자들에 의해 공격 당할 가능성이 매우 높다.

    - 서버 소프트웨어에 있는 패치되지 않은 보안 취약점들
    - 디렉터리 리스팅과 디렉터리 경로 유출을 허용하는 잘못된 서버 구성 설정
    - 스크립트, 애플리케이션 환경 설정 파일과 웹 페이지가 포함된 불필요한 기본 파일, 백업 파일, 샘플 파일들
    - 부적절한 파일, 디렉터리 권한 설정
    - 컨턴츠 관리와 원격 관리가 가능한 불필요한 서비스 활성화
    - 기본 패스워드로 설정된 기본 계정
    - 관리와 디버깅 목적의 기능들
    - 정보가 유출될 수 있는 잘못된 에러 처리
    - 잘못 설정된 SSL 인증서와 암호화 설정
    - 기본 인증서 사용 등

    [예방 방법]

    ① 여러 보안 관련 사이트(SANS institute, OWASP, CERT)나 자료 등에 언급되어 있는 보안 가이드라인을 참고하여 다음과 같은 조치들을 취한다.
    - 고려할 수 있는 모든 보안 메커니즘들 구성
    - 모든 불필요한 서비스 중지
    - 역할(roles), 퍼미션(permissions), 계정(accounts) 설정
    - 로깅과 경고

    ② 1번과 같이 보안 가이드라인이 만들어졌다면 다음과 같은 작업들을 주기적으로 실시한다.
    - 가장 최근에 발표된 보안 취약점 모니터링
    - 가장 최신의 보안 패치 적용
    - 보안 가이드라인의 업데이트
    - 정기적인 내/외부 취약점 스캐닝


    이 글을 마무리 하며

    서두에도 언급했듯이 최근의 해킹 동향은 웹 애플리케이션을 이용한 해킹이 전체 피해 건수의 약 3/4를 상회하고 있다. 이러한 배경으로 인해 기업에서는 추가적인 보안 솔루션(웹 애플리케이션 취약점 스캐너, 웹 애플리케이션 방화벽 등)을 도입하고 있거나 도입 계획을 세우고 있다. 그러나 모든 보안이 그렇듯이 솔루션을 도입한다고 해결되는 것도 아니고 사람이 뛰어나다고 해결되는 것도 아니다.

    도입된 솔루션이 제대로 운영되기 위해 끊임없이 관리자들은 노력해야 할 것이며 웹을 개발하는 개발자들은 만들어진 보안 가이드라인을 준수하여 개발해야 하며 일반 사용자들 또한 보안 가이드라인에 준하는 행동으로 발생할 수 있는 인지된 사고를 미연에 방지해야 한다. 이처럼 기업의 모든 구성요소들이 적절하게 조화를 이뤄 야지만이 투자된 비용만큼의 보안 수준을 유지할 수 있게 된다.

    [참고 자료]

    The Ten Most Critical Web Application Security Vulnerabilities (http://www.owasp.org/asac)
    A Guide to Building Secure Web Applications (http://www.owasp.org)
    Security at the Next Level (http://www.spidynamics.com/whitepapers.html)
    Information Security (http://infosecuritymag.techtarget.com/2002/jun/insecurity.shtml)
    CERT (http://www.cert.org)
    SANS Institute (http://www.sans.org)
    Hacking Exposed - Web Applications

    [해킹기법] ④ 스프핑 공격(spoofing attack)

    우리는 스파이 첩보 영화에서 주인공이 자신을 노출시키지 않기 위해 남의 신분으로 위장하는 경우를 자주 볼 수 있다. 이때 주로 사용하는 방법이 주민등록증, 운전면허증 등의 신분증을 위조하거나 신체적인 특징인 얼굴, 지문, 목소리 등을 변조하는 것이다. 이 모든 것들이 특정 사람을 인식하는 방법을 우회 통과하기 위한 방법이다.

    마찬가지로 네트워크 상에서도 악의적인 혹은 비밀스러운 활동을 시도하려는 사람들은 먼저 자기 자신을 감추는 방법을 생각하게 된다. 다만 네트워크 상에서 해당 사용자(혹은 해당 호스트)를 식별하는 정보는 IP 주소, DNS 이름, Mac 주소, 이메일 주소 등을 사용한다.

    스프핑 공격(Spoofing Attack)은 바로 자기 자신의 식별 정보를 속여 다른 대상 시스템을 공격하는 기법이다. 네트워크 상의 공격자는 TCP/IP 프로토콜 상의 취약성을 기반으로 해킹 시도시 자신의 시스템 정보(IP 주소, DNS 이름, Mac 주소 등)를 위장하여 감춤으로써 역추적이 어렵게 만든다. 이러한 스프핑 공격은 패킷 스니퍼링이나 서비스 거부 공격, 세션 하이재킹(Session Hijacking) 등의 다른 여러가지 공격을 수행 가능하게 한다.

    이번 회에서는 스프핑 공격의 종류를 알아보고, 해당 공격이 어떤 것인지 간략하게 알아보도록 하겠다. 스프핑 공격의 종류를 알아보면 다음과 같다. 어떤 정보를 속이느냐에 따라 세분화될 수 있다.

    스프핑 공격의 종류
    ① IP 스프핑
    ② APR 스프핑
    ③ 이메일 스프핑
    ④ DNS 스프핑


    ① IP 스프핑

    IP 스프핑은 말 그대로 IP 정보를 속여서 다른 시스템을 공격하는 것이다. IP 스프핑을 통해 서비스 거부 공격(TCP Syn flooding, UDP flooding, ICMP flooding)을 수행할 수도 있으며, 공격대상 컴퓨터와 서버 사이의 연결된 세션에 대해서 세션 끊기도 가능하다. TCP/IP 상의 프로토콜 취약성은 1985년 Robert T. Morris의 논문 “A Weakness in the 4.2 BSD Unix TCP/IP Software”에 업급이 되었으며, 특히 희대의 해커 케빈미트닉은 실제 해킹에서 IP 스프핑 공격을 통해 모토롤러, 선마이크로시스템즈, NEC, 노벨 등의 컴퓨터 전산망에 침투, 소프트웨어 및 각종 자료 등을 훔친 혐의로 1995년 체포되었다.

    케빈 미트닉은 정확하게는 TCP Syn flooding + TCP 순서 번호 예측(TCP Sequence Nubmer Guessing) + IP 스프핑을 사용하였다. 이는 클라이언트와 서버와의 통신 사이에 해커 컴퓨터가 끼어들어 클라이언트를 TCP Syn flooding 서비스 거부 공격으로 전혀 반응하지 못하게 한 후, 해커가 이 클라이언트인 것으로 가장하여 서버와 통신하는 기법이다. 이러한 공격은 TCP/IP 프로토콜의 문제점인 TCP 순서 번호 생성이 매초당 일정하게 증가한다는 것과 호스트에 대한 인증시 IP의 소스 주소만을 사용한다는 것으로 인하여 가능하였다.

    순서 번호는 연결 지향형 프로토콜인 TCP 프로토콜에서 두 호스트 간의 패킷 전달이 손실 없이 이루어졌는지 체크하기 위한 일종의 패킷 번호표이다. 해커는 일단 클라이언트를 TCP Syn flooding 공격으로 봉쇄한다. 이후 서버의 순서번호를 예측하여 IP 스프핑된 위조 패킷을 발송함으로써 서버를 속여 침투하는 것이다. IP 기반의 인증만을 제공하는 Unix의 rlogin, rsh 등의 r 계열 서비스들은 이러한 IP 스프핑 공격에 취약할 수 밖에 없다.


    ② APR 스프핑

    ARP 프로토콜은 32bit IP 주소를 48bit의 네트워크 카드 주소(Mac Address)로 대응시켜 주는 프로토콜이다. 우리가 실제로 IP 주소를 통해 네트워크 연결을 시도하면 TCP/IP에서는 해당 IP에 해당하는 네트워크 카드 주소를 찾아 연결하게 된다. 이러한 IP 주소와 네트워크 카드 주소의 대응 테이블은 스위치나 기타 네트워크 장비 및 사용자 컴퓨터에서 arp cache 테이블이라는 곳에 위치하게 된다.

    해커가 이 테이블 상의 정보를 위조하게 되면 공격 대상 컴퓨터와 서버 사이의 트래픽을 해커 자신의 컴퓨터로 우회시킬 수 있다. 우회된 트래픽으로부터 해커는 패스워드 정보 등 유용한 정보를 마음껏 획득할 수 있다.

    ③ 이메일 스프핑

    이메일 발송시 송신자의 주소를 위조하는 것이다. 간단한 방법으로는 이메일 송신자 From 필드에 별칭(alias) 필드를 사용할 수 있다. 이메일 발송시 별칭을 설정한 경우에는 별칭 주소로 이메일이 발송된다. 이러한 경우 메일을 받아보는 사람은 실제 이메일 송신자가 아닌 별칭 필드만을 확인하는 경우에는 이메일의 송신자가 별칭 필드에서 온 것으로 알게 된다.

    요즘 들어서 극성인 대량의 스팸 메일과 바이러스 감염 메일은 송신자의 주소가 아예 존재하지 않는 이메일 주소를 사용한다. 또한 이메일을 발송한 메일 서버 또한 직접적인 메일 발송 서버가 아닌 중계 서버이므로 메일을 발송한 자를 추적하기란 쉽지 않다.


    ④ DNS 스프핑

    DNS 프로토콜은 인터넷 연결시 도메인 주소를 실제 IP 주소로 대응시켜 주는 프로토콜이다. 인터넷 연결시 사용하는 DNS 서버가 IP 주소를 찾아달라는 요청을 받았을 때, 자기 자신의 도메인이 아닌 주소에 대해서는 보다 상위 단의 DNS 서버로부터 재귀적(recursive)인 방식으로 IP 주소를 찾아 알려준다.

    만약 해커가 어떤 도메인의 DNS 컴퓨터를 장악하여 통제하고 있다면 최종적으로 얻어진 IP 주소는 원래 사용자가 찾아가고자 하였던 홈페이지가 아닌 다른 홈페이지로 연결되게 된다. 이는 요청을 발송했던 DNS와 응답을 주는 DNS 사이의 트래픽을 해커가 스니퍼링함으로써 Query ID라는 값을 통해 해커의 사이트 IP를 최종 응답으로 넘겨주도록 하는 것이다.

    사용자가 쇼핑몰을 이용하고자 하였다면 해커에 의해 조작된 홈페이지 내에서 자신의 아이디와 필드, 신용 카드 정보를 기입함으로써 개인 정보를 탈취당할 수 있다. 위와 같은 스프핑 공격들은 실제로 인터넷 상의 툴로써 공개가 되어 있으며 여러가지 다른 복합적인 공격과 같이 사용될 수 있다.

    그러나 각각의 공격 방법에 있어서 제약 및 전제 사항이 있으므로 모두 완벽하게 성공되지는 않는다. 스프핑 공격은 패킷 필터링 접근 제어와 IP 인증 기반 접근제어, 취약점 서비스 사용의 제거, 암호화 프로토콜의 사용을 통해서 방어가 가능하다. 인터넷 상에 떠돌아다니는 정보는 항상 안전한 것이 아니므로 스프핑 공격과 같은 것을 통해 언제라도 위조되었을 가능성도 있을 수 있음을 간과해서는 안되겠다.

    [해킹기법] ⑤ 스니핑 (sniffing) (1)

    스니핑이란?

    사전적인 의미로 스니핑(Sniffing)이란 ‘코를 킁킁거리다’, ‘냄새를 맡다’ 등의 뜻이 있다. 사전적인 의미와 같이 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방들의 패킷 교환을 엿듣는 것을 의미한다. 간단히 말하여 네트워크 트래픽을 도청(eavesdropping)하는 과정을 스니핑이라고 할 수 있다. 이런 스니핑을 할 수 있도록 하는 도구를 스니퍼(Sniffer)라고 하며 스니퍼를 설치하는 과정은 전화기 도청 장치를 설치하는 과정에 비유될 수 있다.

    TCP/IP 프로토콜은 학술적인 용도로 인터넷이 시작되기 이전부터 설계된 프로토콜이기 때문에 보안은 크게 고려하지 않고 시작되었다. 대표적으로 패킷에 대한 암호화, 인증 등을 고려하지 않았기 때문에 데이터 통신의 보안의 기본 요소 중 기밀성, 무결성 등을 보장할 수 없었다. 특히 스니핑은 보안의 기본 요소 중 기밀성을 해치는 공격 방법이다.

    인터넷은 말 그대로 광범위한 네트워크이며 공개된 네트워크이다. 패킷이 송수신될 때, 패킷은 여러 개의 라우터를 거쳐서 지나가게 되며 중간 ISP 라우터에 접근 권한을 가지는 사람이라면 해당 패킷을 쉽게 잡아낼 수 있다. 그런데 문제는 이렇게 쉽게 얻어낼 수 있는 많은 패킷의 내용은 암호화 되지 않는다는 것이다.

    물론 xDSL, 케이블 모뎀 등을 사용하는 일반 가정 사용자가 이러한 패킷을 아주 쉽게 볼 수 있는 것만은 아니다. 그러기 위해서는 패킷이 흘러가는 네트워크의 중간 경로를 얻어내야 한다. 전화에 도청기를 설치하는 과정을 연상하면 이해하기 쉬울 것이다. 직접 도청하고자 하는 전화기에 도청기를 설치하는 방법, 그리고 중계 회선에 도청기를 설치하는 방법이 있을 것이다.


    두 가지의 차이는 직접 도청하고자 하는 전화기에 설치한다면 그 전화기의 내용만 도청할 수 있다는 것, 중계 회선에 설치한다면 그 중계 회선을 통해 연결된 모든 전화기의 내용을 도청할 수 있다는 것이 될텐데 스니핑 역시 마찬가지이다.

    대표적인 시나리오는 다음과 같다.

    (1) 다양한 공격 기법을 통해 실제 공격 대상 시스템에 관리자 권한을 얻어낸 후 스니핑 도구를 설치하여 스니핑
    (2) 공격 대상 기업의 다른 호스트에 대한 접근 권한을 얻어내서 그 호스트를 이용하여 스니핑
    (3) ISP 장비에 대한 시스템 권한을 얻어내어 스니핑 도구를 설치하여 스니핑

    다음은 이러한 스니핑 기법을 통하여 FTP 접속을 스니핑함으로 사용자 ID와 패스워드를 얻어낸 화면이다. 이 경우, Ethereal이라는 툴을 이용한 것으로 쉽게 해당 서버에 hackme라는 peace! 패스워드를 사용하는 사용자가 존재한다는 사실을 알았다.


    물론 스니핑은 이와 같은 공격만을 위해 사용되는 것은 아니다. 네트워크 트래픽 분석이나 트러블슈팅 등에 사용되며 그 외에도 네트워크 상에 이루어지는 공격을 탐지하는 침입탐지시스템에 쓰일 수 있다. 이 문서에서는 공격 기법으로서의 스니핑을 이야기하고자 한다.


    실질적인 스니핑 공격의 예

    (1) 허브 환경에서의 스니핑

    허브(Hub)는 기본적으로 들어온 패킷에 대해 패킷이 들어온 포트를 제외한 모든 포트에 대해 패킷을 보내는 리피터(Repeater) 장비이다. 사실 여러분의 기업에서 허브를 사용하고 있고 여러분의 시스템이 그 허브에 연결되어 있다면 여러분은 원하던 원치 않던 간에 계속하여 다른 사람의 패킷들을 받아보고 있었던 것이다.

    물론 네트워크 드라이버, OS 커널 등의 수준에서 MAC 주소를 보아 자신이 아닌 다른 이들의 패킷은 버려지기 때문에 그것을 쉽게 느낄 수는 없었을 것이다. 하지만 여러분 시스템의 NIC를 promiscuous 모드로 동작하게 한다면 다른 이들의 패킷 또한 버리지 않고 받아볼 수 있다. 이제 스니핑 도구를 통해 해당 패킷을 저장하고 분석하기만 하면 된다.

    다음 그림은 이 내용을 설명한 것이다. 모든 패킷은 실제 수신 대상이 아닌 호스트에게도 전달되며 Promiscuous 모드로 동작하는 호스트는 다른 수신 대상의 패킷 또한 볼 수 있다.


    [그림 1] 허브 환경에서의 패킷 송신


    (2) 스위치 환경에서의 스니핑

    스위치는 기본적으로 Layer 2 헤더 정보인 MAC 주소 정보를 이용하여 패킷이 어떤 목적지로 보내질지를 결정한다. 따라서 허브 환경에서와 달리 패킷은 실제 수신 대상에게만 보내지게 되며 공격 대상이 아무리 인터페이스를 Promiscuous 모드로 셋팅하였다 하더라도 그 내용을 훔쳐 볼 수는 없다.


    [그림 2] 스위칭 환경에서의 패킷 송신



    그렇다면 이 경우 정말 안전한 것일까… 아쉽게도 그렇지 않다. 이와 같이 스위치를 사용하는 스위칭 환경에서의 스니핑 기법이 공개되어 있다. 그 중 몇 가지 공격 기법은 다음 원고에서 소개를 하겠다.

    [해킹기법] ⑤ 스니핑 (sniffing) (2)

    지난 원고에 이어서 스위치를 사용하는 스위칭 환경에서의 스니핑 기법 중 몇가지 공격 기법에 대해 소개를 하도록 하겠다.

    1) Switch Jamming

    스위치는 원래 앞서 말한 바와 같이 실제 수신 대상으로만 패킷을 보내는 브리지 장비이다. 그러나 엉뚱한 MAC 주소를 가진 패킷을 계속하여 보냄으로써 스위치가 허브처럼 동작하도록 만들 수 있다. 많은 종류의 스위치가 주소 테이블이 가득 차게 되었을 때 패킷을 모든 포트로 브로드캐스팅하는 성질을 이용한 것이다.

    2) ARP Redirect

    대표적인 툴로 Dsniff와 같은 툴이 이 방법에 의한 스니핑을 제공한다. 네트워크 상에서 패킷이 보내질 때 목적지의 IP 주소를 갖고 해당 목적지가 어떤 MAC 주소를 사용하는지를 요청하는데 이를 ARP request라고 한다. 쉽게 말해서 교실에 선생님이 들어와서 '이 반에 코코넛이라는 학생이 누구인지 손들어 봐요' 하는 것과 같다.

    ARP request는 네트워크 상에 브로드캐스팅되어 모든 호스트가 그 패킷을 받게 되고 해당 IP를 가진 호스트는 그런 IP를 사용하는 것은 나라고 ARP reply를 주게 된다. 코코넛 학생이 '저요!'하고 손드는 것과 마찬가지이다. 하지만 코코넛 학생 대신 오렌지라는 학생이 '저요!' 하고 손든다 해도… 그렇다. 순진한 선생님은 그대로 믿게 되는 것이다.



    [그림 1] ARP request 과정

    [그림 2] ARP reply 과정



    하지만 공격자는 arpspoof 등의 툴을 이용하여 거짓된 ARP reply를 계속하여 보낼 수 있다.


    [그림 3] 조작된 ARP reply 과정


    위와 같은 경우 두 개의 Reply를 받게 된다. 이 경우, 패킷이 도달한 순서에 따라 그리고 구현에 따라 10.1.1.1의 응답 혹은 10.1.1.3의 응답을 믿게 될 것이다. 만약 10.1.1.3의 응답을 믿었다면 패킷은 10.1.1.1로 보내지는 것이 아니라 10.1.1.3으로 보내지게 될 것이다.

    그런데 문제는 ARP Request가 오기 전에 ARP reply가 위와 같은 식으로 보내지게 되었을 때 공격 대상이 되는 시스템의 ARP cache에 그런 내용이 저장이 되고 ARP cache에 10.1.1.1에 대한 정보가 있다면 굳이 ARP request를 하지는 않는다는 것이다. 이 점을 이용하여 공격자는 위와 같은 거짓 응답을 주기적으로 계속하여 보내게 된다. 물론 ARP request가 있기 전부터...

    10.1.1.1로 가게 될 패킷은 10.1.1.3으로 가게 된다. 물론 10.1.1.1 입장에서는 통신이 제대로 되지 않게 되므로 이런 시도를 금방 알아차릴 수 있을 것 같지만 10.1.1.3은 해당 패킷의 내용을 받고 저장한 후 바로 아무 일 없었다는 듯이 10.1.1.1로 포워딩하므로 통신에는 문제 없다.

    공격 대상 시스템이 라우터였다면 치명적이다. LAN 상의 시스템이 인터넷으로 주고 받는 모든 패킷을 훔쳐 볼 수 있다는 것이다.이 방법에서 공격자는 10.1.1.1에 대한 ARP Reply를 속였기 때문에 이를 ARP Spoofing이라고 하기도 한다.


    3) ICMP Redirect

    Ping 프로그램을 사용할 때 ICMP Echo 메시지와 ICMP Echo Reply 메시지가 사용된다는 것은 많은 분이 알고 계실 것이다. 이처럼 ICMP 프로토콜은 네트워크 상의 오류 메시지 전송, 트러블슈팅 등을 위해 사용되는데 그 중 ICMP Redirect 메시지를 이용한 스니핑 방법이며 일단 기본적으로는 ARP Redirect의 경우와 마찬가지로 공격 대상 시스템으로 패킷이 오도록 만드는 것이다.

    네트워크 상에 라우터가 여러 대 존재할 때 비효율적인 라우팅 경로가 존재한다면(즉 1 hop 만으로 보낼 수 있는데 3 hop으로 보내게 설정되었다든지) 라우터에 대해 이를 수정할 것을 권고하는 ICMP Redirect 메시지가 보내진다. 공격자는 이를 악용한 ICMP Redirect 메시지를 보냄으로써 패킷이 자신으로 보내지도록 한다.

    4) ICMP Router Advertisement

    ICMP Redirect와 비슷한 방법이나 ICMP Router Advertisement 메시지는 특정 호스트가 자신이 라우터라고 다른 호스트들에 대해 알리는 메시지이다. 공격자는 이를 악용하여 다른 호스트들이 자신을 라우터로 생각하게 하여 패킷이 자신으로 보내지도록 한다.

    5) MAC 스푸핑

    앞서 스위치는 기본적으로 MAC 주소를 통해 패킷이 어떤 목적지로 보내질지를 결정한다고 하였는데 이런 MAC 주소를 학습하는 방법은 다음과 같다. 특정 목적지 MAC 주소를 갖는 패킷을 보내고자 할 때,

    ① 해당 MAC 주소가 자신의 MAC 주소 테이블에 존재하는지 확인
    ② 존재한다면 테이블에 등록된 포트로 패킷을 보냄
    ③ 존재하지 않는다면 패킷이 유입된 VLAN과 동일한 모든 VLAN으로 패킷을 일단은 보냄

    그리고 MAC 주소 테이블을 갱신하는 방법은 패킷이 유입되었을 때, 해당 패킷의 출발지 MAC 주소를 참고하여 해당 패킷이 들어오게 된 포트와 MAC 주소 정보를 테이블에 등록하는 방법으로 한다.

    따라서 위와 같은 경우 응답으로 패킷이 오게 되면 MAC 주소 테이블에 해당 정보가 입력되어 다음부터는 응답이 오게 된 포트로 보내게 된다. 그러나 공격자가 공격 대상 시스템의 MAC 주소를 가지는 패킷을 출발지 MAC 주소로 하는 패킷을 계속하여 보내면 스위치의 MAC 주소 테이블에는 그러한 내용이 등록된다. 따라서 스위치는 패킷을 공격자에게 보내게 된다.

    6) 스위치에서의 SPAN/Monitor port 설정

    대다수의 스위치는 port monitoring 기능을 가지고 있는데, 이는 특정 포트(들)로 주고 받아지는 패킷을 또 다른 모니터 포트로 전송해주는 옵션이다. 공격자가 스위치에 접근 권한을 얻어내어 위와 같은 설정을 적용함으로 공격자 시스템에 연결된 포트로 보낼 수 있다.

    이는 매우 어려운 일이 될 것 같지만 디폴트로 설정된 스위치의 경우에는 매우 쉬운 일이다. 왜냐하면 해당 스위치의 사용자 ID, 패스워드는 인터넷 검색 사이트를 통해 쉽게 얻어낼 수 있기 때문이다.

    [해킹기법] ⑤ 스니핑 (sniffing) (3)

    스니핑 기법의 최종편인 (3)편에서는 스니핑 공격 도구들과 스니핑 방어에 대해 알아보도록 하겠다.

    스니핑 도구들

    OS이름설명
    Windows 기반EtherealUNIX 용 Ethereal을 Windows로 포팅한 것으로 오픈 소스
    WindumpTcpdump를 Windows 용으로 포팅한 것.
    NAI Sniffer스니핑 뿐 아니라, 다양한 통계 기능 등 제공(상용)
    EtherPeek스니핑 뿐 아니라, 다양한 통계 기능 등 제공(상용)
    AiroPeekEtherPeek를 제조한 WildPackets 사의 제품으로 무선 네트워크 상의 스니핑 도구(상용)
    Cain&Abel스니핑 기능 외에도 패스워드 크래킹 등 다양한 기능이 포함된 통합 툴. 스위칭 환경에서의 스니핑 및 각종 프로토콜에 대한 디코드 기능을 가지고 있음.(상용)
    UNIX 기반tcpdumpCommand-line 툴로 해킹보다는 트러블슈팅의 용도로 가장 많이 사용되는 툴
    EtherealGUI 기반으로 UNIX 용 GUI 스니핑 도구로서 매우 훌륭한 기능을 가지고 있음
    snoopSun Solaris 시스템 등에서 기본적으로 제공하는 스니핑 도구
    Sniffit연결된 세션 내용 정보 등을 쉽게 볼 수 있음
    AiroPeekEtherPeek를 제조한 WildPackets 사의 제품으로 무선 네트워크 상의 스니핑 도구(상용)
    dsniff송덕준 (Dug Song)이 개발한 스위칭 환경에서의 해킹 도구. 스니핑 툴만 포함된 것이 아니라 SSH나 SSL에 대한 Man-in-the-Middle-Attack 툴이 포함되어 있음. 각종 프로토콜에 대한 사용자ID, 암호 정보를 쉽게 수집해 줌.
    LinSniff각종 프로토콜에 대한 사용자 ID, 암호 정보를 쉽게 수집합니다만 dsniff보다는 적은 프로토콜을 지원합니다. 하지만 좀 더 가볍습니다.
    esniffPhrack Magazine에 소개된 툴
    ettercap스위칭 환경에서의 스니핑 툴
    snmpsniffSNMP 전용 스니핑 툴


    스니핑에 취약한 프로토콜

    앞서 말한 바와 같이 일단 패킷을 악의적인 사용자가 가로채어 보는 것은 그리 어려운 일이 아니다. 이런 시도를 탐지하는 방법도 알려져 있기는 하지만 일단 이런 시도 자체를 완전 봉쇄하는 것은 불가능하다고 볼 수 있다.

    하지만 이렇게 얻어낸 패킷이 모두 유용한 것은 아니며, 암호화되지 않거나 암호화되더라도 너무도 간단한 방법으로 되어 쉽게 복호화 해낼 수 있는 그런 프로토콜에서 사용되는 패킷이 공격자에 의해 사용될 수 있다. 그런 종류의 프로토콜을 스니핑에 취약한 프로토콜이라 할 수 있는데 스니핑에 취약한 프로토콜을 몇 가지 예로 든다.

    (1) Telnet, Rlogin

    Telnet, Rlogin의 사용자 ID, 패스워드를 비롯한 모든 통신의 내용은 암호화되지 않아 모든 통신 내용을 쉽게 볼 수 있다.

    (2) HTTP

    HTTP의 사용자 인증으로 많이 사용되는 Basic Authentication 방법은 아주 기본적인 방법으로 encode되기 때문에 쉽게 사용자 ID, 패스워드 정보를 얻어낼 수 있다.

    (3) SNMP

    SNMP 프로토콜은 단순 네트워크 관리 프로토콜(Simple Network Management Protocol)이라는 이름과 같이 보안을 거의 고려하지 않았다. SNMP 프로토콜은 SNMPv1, SNMPv2, SNMPv3로 나뉘어 뒤로 갈수록 보안은 강화되었지만 아직도 가장 많이 사용되는 것은 SNMPv1 프로토콜이다. SNMP의 패스워드와 같은 역할을 하는 커뮤니티 이름을 비롯한 모든 통신 내용이 암호화 되지 않는다.

    (4) 기타

    NNTP, POP, FTP, IMAP, SMTP 등


    스니핑의 방어

    스위치에 브로드캐스트 도메인, MAC 주소 수동 설정 등을 함으로 패킷을 가로채는 시도를 줄일 수는 있으나 앞서 말한 바와 같이 다른 사용자가 패킷을 가로채는 시도를 원천 봉쇄하는 것은 불가능하다. 따라서 패킷을 가로채더라도 그것의 내용을 가지고 어떠한 행동조차 할 수 없도록 암호화 기법을 이용하는 것이 가장 일반적이고 중요한 스니핑의 방어 기법이라고 할 수 있다.

    (1) SSL 적용

    HTTP, IMAP, POP, SMTP, Telnet 등은 SSL을 적용하여 HTTPS, IMAPS, POPS, SMTPS, Telnets 등으로 할 수 있다. SSL은 물론 HTTP에 가장 많이 활용되며 이를 적용하여 사용자 이름, 패스워드 및 전자 상거래 결재 정보 등 웹 서핑의 내용을 암호화 할 수 있다.

    (2) PGP, S/MIME

    SMTP 상으로 보내지는 메일은 기본적으로 암호화 되지 않기 때문에 스니핑하여 그 내용을 쉽게 얻어낼 수 있다. PGP, S/MIME 등을 이용하여 메일에 대한 암호화 기능을 제공할 수 있다.

    (3) SSH

    암호화 통신을 제공하여 Telnet, FTP, RCP, Rlogin 등을 대치할 수 있다.

    (4) 사설망 혹은 가상사설망(VPN)

    스니핑이 우려되는 네트워크 상에 전용선(leased line)으로 직접 연결함으로 중간에 도청되는 것을 막는 것이 사설망이다. 하지만 이는 거리가 멀어질수록 인터넷을 이용하는 것에 비해 비용이 매우 비싸질 수 밖에 없다. 인터넷 회선을 이용하며 사설망의 효과를 줄 수 있는 것이 VPN입니다. VPN 장비 간의 암호화를 통해 도청을 막을 수 있다.


    결론

    스니핑은 다양한 형태로 네트워크 상에서 이루어질 수 있으며 다음과 같은 두 가지 단계로 볼 수 있다.

    - 패킷 가로채기
    - 가로챈 패킷 디코딩을 통해 주요 정보 획득

    패킷을 가로채는 시도는 차단하기 매우 어려우며 디코딩을 통해 주요 정보를 얻어내는 것을 막기 위해 SSL, SSH, VPN, PGP 등 다양한 기법이 이용될 수 있다.

    [해킹기법] ⑥ 백도어와 트로이목마 (1)

    트로이 목마는 신화 속에 나오는 그리스와 트로이 사이의 전쟁에서 사용된 목마에서 유래된 것이다. 약 3,000여년전 그리스와 트로이 사이의 전쟁이 있었으며, 당시 세계의 패권을 노리는 강대국 그리스와 견고한 난공불락의 요새를 가지고 있는 트로이와의 전쟁은 서로에게 매우 힘에 겨운 싸움이었다.

    그리스는 무력으로 트로이를 점령할 수 없음을 알고 지혜와 모략으로 전쟁을 승리로 이끌었다. 이때 사용된 것이 난공불락의 요새를
    공략하기 위해 만든 트로이 목마였다. 트로이 목마에 병력을 숨겨 전쟁에서 승리했던 것에서 바로 유래하여 그대로 그 말이 사용되고
    있는 것이다.

    1. 백도어와 트로이 목마

    1) 백도어

    크래커가 시스템에 침입한 후 자신이 원할 때 침입한 시스템을 재침입하거나 권한을 쉽게 획득하기 위하여 만들어 놓은 일종의 비밀 통로를 말한다. 이는 초기에는 주로 시스템에 문제가 생겼을 경우, 쉽게 시스템에 접속하기 위해서 시스템 관라자나 프로그래머등의 관리자가 의도적으로 만들어 놓은 비밀 통로였는데, 이후 크래커들에 의해 악의적인 목적으로 사용되고 있다.

    2)Trojan Horse

    호감이 가는 유용한 프로그램으로 가장하고, 실제적으로는 악의적인 프로그램이나 코드를 포함하고 있는 프로그램을 말한다. 이는 정상적인 동작을 하는 것으로 보이거나 사용자가 쓰는 프로그램등으로 사용자를 현혹시킴으로써 특권을 획득한다.

    2. 백도어와 트로이 목마의 차이점

    트로이 목마의 경우, 특정 사용자 또는 프로그램이 실행에 의한 수동적인 방법에 의존한 것이며, 이는 사용자의 직간접적인 도움을 통해서 설치되거나 Bind되어진 프로그램이 실행되어 설치된다. 백도어의 경우 예전에는 관리의 목적으로 사용하기도 하였으나, 대부분 크래커들에 의해 권한이 획득된 후, 해당시스템에 추후 접속을 용이하게 하기 위하여 서비스 데몬 등을 수정하여 사용하고 있다.

    3. 백도어의 유형

    - 네트워크 데몬이나 시스템 유틸리티를 수정한 백도어
    - TCP/UDP프로토콜을 이용한 Shell binding 백도어
    - Kernel 모듈을 수정한 백도어
    - 방화벽을 우회하는 백도어

    4. 트로이 목마의 유형

    - 인터넷의 자료실이나 warez 사이트 등을 통한 정상적이고 유용한 프로그램, 불법적인 크랙파일 이나 누드 사진 등의 사용자의 관심을 끄는 프로그램에 바인드되어 네트워크를 통한 원격제어
    - Hidden Setuid shell
    - UDP Bind Shell

    4. 트로이 목마의 위험성

    최근 들어서도 웜바이러스, 트로이목마형 바이러스등이 많은 부분을 차지 하고 있음을 아래 그림에서 알 수 있다.


    [그림1] 2003년 침해사고 통계(참조 : CERTCC)



    [그림2] 2003년 침해사고 공격 수법별 통계(참조 : CERTCC)


    [해킹기법] ⑥ 백도어와 트로이목마 (2)

    1. UNIX 시스템

    1) 패스워드 크래킹 백도어

    가장 고전적인 침입 방법으로 백도어들은 패스워드 크래커를 실행하여 취약한 패스워드를 가진 계정을 알아 내고, 이 계정의 패스워드를 어려운 계정으로 바꾸어 버려 취약한 패스워드를 찾아 변경할 수 없는 상태로 만든다.

    2) Rhosts + + 백도어

    네트워크에 연결된 유닉스 시스템에서 사용 편의성 때문에 사용하고 있는 R Command(rsh,rlogin)등의 서비스를 많이 사용하는데 호스트 이름과 사용자 명에 대한 추가적인 패스워드를 묻지 않는 보안 취약성을 내재 하고 있어 이를 이용한 "rhosts" 파일에 파일에 "+ +"를 넣어 어떤 호스트의 어떤 사용자라도 해당 사용자로 패스워드 없이 들어올 수 있도록 한다.

    3) Checksum과 Timestamp 백도어

    침입자들이 실행파일을 자신의 트로이목마 버전으로 교체시키는 경우가 있다. 많은 시스템 관리자들은 타임 스탬프와 유닉스의 sum 프로그램 등과 같은 체크섬 값에 의해 실행파일의 변경유무를 진단할 수 있다. 하지만 트로이목마 프로그램의 타임 스탬프를 원래 파일의 타임 스탬프 값으로 생성시킬 수 있고, CRC 체크섬 값도 원래의 체크섬 값으로 가장할 수 있다.

    4) Login 백도어

    유닉스 시스템에서 login 프로그램은 사용자가 텔넷을 통해 시스템에 접속할 경우 패스워드 인증을 수행한다. 침입자들은 login.c 프로그램을 수정하여 특정한 백도어 패스워드가 입력될 경우 관리자가 어떤 패스워드를 설정해 놓든지에 상관없이 로그인을 허용하고, utmp나 wtmp와 같은 로그파일에 기록도 하지 않도록 한다.

    침입자는 침입한 흔적을 남기지 않고 시스템에 로그인하여 쉘을 획득할 수 있다. 시스템 관리자는 "strings"라는 명령어를 사용하여 login 실행 프로그램에 백도어 패스워드의 유무를 점검하기도 하지만, 침입자들은 백도어 패스워드를 암호화하여 저장함으로써 이러한 명령어에 의한 발견을 피할 수 있다.

    5) Telnetd 백도어

    사용자가 시스템에 텔넷 접속을 할때, inetd 서비스가 그 포트를 리슨하고 있다가 in.telnetd에 연결시켜 주고, in.telnetd는 login 프로그램을 구동한다. ( in.telnetd를 수정하는 경우도 있다.) 침입자는 터미널 종류가 "letmein" 등 특수하게 설정되어 있을 경우 인증과정 없이 쉘을 부여하도록 in.telnetd를 수정할 수 있다. 침입자는 어떤 서비스에 백도어를 설치하여 특정 소스 포트로 부터 오는 연결에 대해서는 쉘을 부여하도록 할수 있다.

    6) Services 백도어

    대부분의 네트워크 서비스들 즉, finger, rsh, rexec, rlogin, ftp 심지어 inetd 등은 백도어 버전이 존재한다. 이 프로그램들은 uucp와 같이 전혀 사용되지 않는 서비스를 백도어 프로그램으로 교체하여 inetd.conf 파일에 등록하는 경우도 있다.

    7) Cronjob 백도어

    침입자는 백도어 쉘 프로그램을 cronjob에 추가하여 특정 시간에 구동 되도록 할 경우 이 시간 동안 침입자는 시스템에 접속 할 수 있다. 침입자는 cronjob에서 전형적으로 구동되는 합법적인 프로그램인 것처럼 가장한다.

    8) Library 백도어

    대부분의 유닉스 시스템에서는 공유 라이브러리를 사용한다. 공유 라이브러리는 같은 루틴들을 재사용하여 프로그램의 크기를 줄이기 위해 사용한다. 어떤 침입자들은 crypt.c나 _crypt.c 프로그램 같은 루틴들에 백도어 프로그램을 넣어 두기도 한다. login.c는 crypt() 루틴을 사용하게 되는데 백도어 패스워드가 사용될 경우 바로 쉘을 부여하게 된다.

    9) Kernel 백도어

    Library에서 사용되었던 같은 방법으로 MD5 체크섬을 우회할 수 있으며 이 백도어가 설치된 커널은 관리자가 찾기 가장 어려운 백도어일 것이다. 다행히 커널 백도어 스크립트들은 널리 쓰이고 있지는 않지만 아무도 실제 얼마나 배포되어 쓰이고 있는지 모른다.


    10) 파일 시스템 백도어

    침입자는 특정 디렉토리나 특정 파일을 숨기기 위해 "ls", "du" 그리고 "fsck"와 같은 시스템 명령어들을 수정한다. 그렇지 않으면, 숨기려는 부분을 "bad" 섹트로 보이게 하고, 침입자는 숨겨진 파일을 오직 특수한 도구를 통해서만 보이게 할 수도 있다.

    11) Bootblock 백도어

    일반 PC에서는 바이러스가 bootblock에 자신을 숨기고 대부분의 바이러스 백신은 bootblock이 바뀌어졌는지를 감시한다. 유닉스 시스템에서는 부트 블록을 점검할 수 있는 소프트웨어가 거의 없어, 침입자들이 부트 블럭 공간에 백도어를 숨겨두기도 한다.

    12) 프로세스 은닉 백도어

    침입자들은 자신들이 설치하여 실행중인 프로그램들 숨기려고 한다. 일반적으로 스니퍼 프로그램이나 키로거, 패스워드 크랙 프로그램과 같은 것들을 보이지 않도록 한다.

    13) 네트워크 트래픽 백도어(Network traffic backdoors)

    침입자들은 시스템에서 자신들의 흔적을 숨기려고 할 뿐더러 가능하면 자신들의 네트워크 트래픽까지 숨기기를 원한다. 이러한 네트워크 트래픽 백도어들은 간혹 침입차단시스템(firewall)을 거쳐서 침입할 수 있는 것들도 있다.

    14) TCP 쉘 백도어

    침입자는 침입차단시스템이 막지 않는 높은 TCP 포트에 TCP 쉘 백도어들을 설치할 수 있다. 관리자들은 netstat를 통해서 어느 포트들이 연결을 기다리고 있고, 어느 포트가 연결되어 있는지를 점검할 수 있다. 이러한 백도어들은 SMTP 포트 상에서 구동될 수도 있어, e-mail을 허용한 침입차단 시스템을 통과할 수 있다.

    15) UDP 쉘 백도어

    관리자들이 TCP 연결에 대해서는 관리를 잘하고 이상한 행위를 알아차리기가 쉽지만, UDP 쉘 백도어는 유닉스 시스템에 접속한 상태를 netstat 등으로 알기가 쉽지 않다. 많은 침입차단시스템에서 DNS 서비스등을 위해 UDP 패킷들을 허락하도록 설정되어 있어 침입자는 UDP 백도어를 설치하여 침입차단 시스템을 무사히 통과할 수 있다.

    16) ICMP 쉘 백도어

    많은 침입차단시스템들이 외부로부터 내부 시스템에 대한 ping을 허락한다. 침입자는 ping ICMP 패킷에 데이터를 추가하여 ping을 하고있는 시스템과 쉘을 제공받을 수 있도록 한다. 시스템 관리자는 다량의 ping 패킷들을 발견하겠지만 패킷 속의 데이터를 보지 않는 이상 침입 사실을 알수 없다.

    17) 암호화된 링크

    관리자가 스니퍼를 설치하여 쉘에 접근하려는 사람을 찾으려고 할 수 있다. 하지만 침입자는 네트워크 트래픽 백도어를 암호화하여 실제 두 시스템 간에 어떤 데이터가 전송되고 있는지를 숨길 수 있다.

    2. Windows 시스템

    1) BackOrifice

    대표적인 트로이목마 프로그램이다. 백오리피스는 'Cult of Dead Cow(죽은 소에 대한 숭배)'라는 해커 그룹의 일원인 Sir Dystic이 제작 발표한 MS 윈도 95/98 및 윈도 NT 해킹 툴로, 마이크로소프트(MS) 네트워크 관리 프로그램 백오피스를 패러디해 붙여진 이름이다.

    백오리피스는 MS Back Office와 마찬가지로 원격지에서 윈도용 PC의 모든 프로그램 파일을 관리할 수 있는 도구이기 때문에, 원격지에 있는 타인의 PC에 저장된 파일에의 접근은 물론이고 파일 삭제, 생성, 실행 등 PC 이용자 모르게 프로그램 및 파일에 대한 조작을 할 수 있다. 또한 실행 중인 프로그램의 제거 및 정지, 사용자 키보드 입력 자료의 모니터링, 현재 실행중인 화면캡처, 비밀번호 빼내기, 레지스트리 편집 등이 가능하다.

    위와 같은 기능들을 수행하는 대표적인 트로이목마 프로그램으로는 SubSeven, Netbus, SchoolBus등으로 현재까지 많은 수의 프로그램이 존재 한다. 주요 트로이 목마의 사용 포트는 아래와 같다.

    포트번호트로이목마명
    777AimSpy
    1080SubSeven 2.2, WinHole
    1243BackDoor-G, SubSeven
    5880Y3K RAT
    6000The Thing
    6666Dark Connection Inside, NetBus
    6667Dark FTP, ScheduleAgent, SubSeven, Subseven 2.1.4 DefCon 8, Trinity, WinSatan
    6669Host Control, Vampire
    9400InCommand
    12345Fat Bitch trojan, GabanBus, NetBus, NetBus Toy, Whack Job, X-bill
    20034NetBus 2 Pro, NetBus 2.0 Pro Hidden, NetRex, Whack Job
    21554GirlFriend, Exploiter, Kid Terror, Schwindler, Winsp00fer
    27374SubSeven, Bad Blood, Ttfloader, Webhead
    31337Netpatch, Back Orifice, Baron Night, BO client, BO spy
    50766Fore, Schwindler
    54321Backorifice 2000, School bus


    [해킹기법] ⑥ 백도어와 트로이목마 (3)

    탐지 및 예방

    백도어나 트로이목마를 탐지하는 것은 매우 많은 설정(변수)들이 있기 때문에 매우 어렵다. 이에 대한 권고책으로 네트웍 상에서의 공격을 인식하기 위한 침입탐지 소프트웨어와 취약점 검사(네트웍상의 시스템에 백오리피스가 설치되었는지를 탐지하기 위한)를 하는 업데이트된 백신 소프트웨어 버전을 사용해야 한다.

    외부에서의 네트웍 연결시도뿐 아니라 시스템상에서 백도어 프로그램 출현을 탐지하는 것은 기존의 백신소프트웨어의 한계를 넘어섬에 따라 네트웍 취약점 및 침입탐지 가능성은 백도어 프로그램을 확인하여 제거 시키는데 있어 매우 중요하다.

    사용자 및 관리자들은 다음과 같은 주의사항을 염두하여 컴퓨터 안전예방책을 취해야 한다.

    1) 불법적인 사이트 방문 자제
    - P2P , 와레즈 사이트 , 불법적인 자료, 외설 음란 자료 열람 자제

    2) 바이러스 백신 프로그램 사용
    - 지속적인 최신 버전 업그레이드(실시간 감시 설정)

    3) 개인 방화벽(HOST Based IPS) 시스템 사용
    - Zone Alarm, ISS Remote Desktop Protector 등 사용

    4) 정품 S/W 사용
    - KeyGen, Program Crack 프로그램 사용 금지

    5) 비정상적인 실행 파일이나 첨부 파일 실행 금지
    - 메일의 첨부물은 함부로 개봉하지 않음(EXE 등 파일 실행 금지)
    - Internet Chat Systems로부터 실행 파일이나 링크를 열지 않음
    - 인터넷, PC 통신 등을 통한 외부 소프트웨어 다운시 바이러스 진단
    - 파일이나 폴더 공유시 쓰기 권한 제한

    6) 네트워크 침입 탐지 시스템
    - 침입탐지는 시스템에 대한 접속을 통제하는 것과 마찬가지로 중요하다. 예전의 대부분의 침입탐지 기술들은 로그를 기반으로 하였지만 최근의 침입탐지 기술은 실시간 스니핑과 네트워크 트래픽 보안 분석에 기반으로 하고 있다. 많은 네트워크 트래픽 백도어들을 쉽게 탐지할 수 있다.

    7) 네트워크 침입 방지 시스템
    - 침입탐지시스템에서 탐지된 알려진 트로이목마나 백도어 등의 시그네쳐 기반의 Blocking 설정

    8) 침입 차단 시스템
    - 잘 알려진 트로이목마나 백도어의 포트 설정
    - 시스템 파일의 무결성 점검
    - 트로이 목마와 백도어에 의한 불법적인 프로그램의 수정 및 변경 사실을 감시 하기 위해서는 파일 시스템의 무결성을 점검하는
    도구의 필요

    9) 무결성 점검 시스템
    - Tripwire 등과 같은 시스템 무결성 도구를 사용한 시스템 파일의 변경 사실 감지

    10) 취약점 점검 도구
    - 네트워크 베이스, 호스트 베이스 취약점 점검 도구를 사용한 지속적인 점검을 통한 백도어 및 트로이 목마 사용 및 취약점 점검
    실시

    마지막으로, 새로운 취약성들이 매일 발표 되고 있고 침입자들이 새로운 공격기술과 백도어 기술을 만들어 가고 있기 때문에, 지속적으로 바이러스 백신을 업데이트하고 신뢰 하지 않는 사이트로부터의 다운로드 및 실행 하지 않는 등 주의를 기울이지 않는다면 어떠한 보안 기술도 효과적이지 못하다는 것을 명심하여야 한다.

    [해킹기법] ⑦ HTTP Session Hijacking (1)

    앞서 해킹기법에서 스니핑(sniffing)에 대해서 살펴보았다. telnet, ftp, pop3 등의 비암호화 프로토콜 어플리케이션은 스니핑 공격을 통하여 사용자 계정 및 암호 도용에 취약할 수 있음을 알게 되었다. 마찬가지로 우리가 웹 브라우징시 사용하는 HTTP 프로토콜도 이러한 도용에 취약할 수 있다.

    HTTP Session Hijacking(혹은 Session ID Hijacking)이라는 공격 기법은 웹 브라우징시 세션 관리를 위해 사용되는 Session ID를 스니핑이나 무작위 추측 공격(brute-force guessing)을 통해서 도용하는 기법이다. 먼저 이러한 공격에 대한 기초적인 배경지식으로 HTTP 프로토콜의 특성 및 Session ID에 대해 이해해보도록 하겠다.


    HTTP 프로토콜의 특성

    HTTP는 기본적으로 비연결유지(stateless) 프로토콜이다. 반면, telnet과 ftp와 같은 프로토콜은 클라이언트와 서버 사이에 하나의 연결(session)이 성립되어 통신하는 프로토콜이다. 따라서, 우리가 보통 웹 브라우저를 열어 URL을 입력하고 해당 홈페이지에 들어간다는 것은 해당 홈페이지에 포함되어 있는 페이지(html), 그림(jpg, gif 등), 자바스크립트(js) 등을 다운받기 위해 개별적인 여러 개의 80 요청(request)을 발송한 후 서버로부터 각각의 응답(reply)을 받는 것을 의미한다.

    이러한 일련의 요청과 응답이 이루어진 후 해당 서버와의 통신은 다시 종료된다. 위와 같은 기본적인 지식을 알고 있다면 다음과 같은 질문을 할 수 있다. HTTP는 비연결유지 프로토콜이라고 하였는데 Session Hijacking 이란 공격은 어떻게 가능한 것인가? 이는 HTTP 세션 관리를 위해 사용되는 Session ID를 통해서 가능하다.


    Session ID란 무엇인가?

    웹 서버는 다수의 웹 페이지 요청자를 구별하기 위하여 각각의 사용자의 세션에 대해서 임의의 긴 문자열 값인 Session ID를 부여한다. 사용자가 홈페이지 방문시 혹은 인증 로그인시에 생성된다. 이러한 Session ID는 사용자의 계정, 암호, 그 밖의 IP 주소, timestamp 등의 여러 파라미터들을 조합하여 생성할 수 있다.


    Session ID는 사용자와 일련의 웹 서핑 동작을 연결시켜줌으로써 웹 사이트 로그인 후 다른 페이지 방문시마다 매번 로그인을 하지 않아도 되는 편리함을 제공해준다.

    우리가 신문 홈페이지나 포털 사이트에 들어갈 때 광고 배너가 자동으로 바뀐다던지, 쇼핑몰이나 인터넷 서적몰에서 구매 카트의 목록이 유지되는 것은 모두 이러한 원리이다. 즉, Session ID를 통해 인증과 인가(authentication
    & authorization)라는 세션 관리를 수행할 수 있다.


    Session ID는 어디에 존재하는가?

    Session ID는 우리가 흔히 듣는 쿠키(cookie)라는 곳에 저장되는 것이 일반적이다. 그러나 가끔은 웹 브라우저 주소창 URL이나 HTML 페이지 폼 소스 상의 hidden 필드에 포함되어 드러나기도 한다.

    1) 쿠키


    2) 웹 브라우저 주소창의 URL


    3) 웹 페이지 폼 소스 상의 hidden field



    Session ID의 취약성은 무엇인가?

    웹 서버에서의 Session ID 생성 기법 및 관리 기법에 따라서 다음과 같은 취약점이 존재할 수 있다.

  • 강력하지 못한 알고리즘(Weak Algorithm) : session ID 스트링 값을 생성함에 있어서 공격자가 reverse 엔지니어링이 가능한 쉬운 알고리즘으로 생성될 경우 cracking이나 brute-force guessing 공격의 위험이 있다.

  • 길이가 짧은 Session ID : 강력한 암호 알고리즘을 사용하더라도 그 길이가 충분하지 않고 짧은 경우에는 cracking이나 brute-force guessing 공격의 위험이 있다.

  • 계정 잠금 기능 미비 : 로그인 패스워드의 특정 회수 실패에 대해서는 보통 계정잠금 기능이나 해당 IP 차단 기능을 구현하고 있습니다. 그러나 보통 Session ID에 대한 무결성 침해나 특성 회수 실패에 대해서는 이러한 잠금 기능 구현이 미비하다. 따라서, brute-force guessing 공격의 위험이 있다.

  • 무한 만료의 Session ID : 사용자의 로그 아웃 이후에도 서버측에서 해당 세션 ID값을 폐기하지 않고 무한정 유효 인정한다면 cookie sniffing이나 프락시 서버의 로그 취득을 통하여 session ID 공격이 가능하다.

  • 평문으로 전달되는 Session ID : 서버에서 클라이언트로의 session ID 쿠키 전달 방식이 비암호화 방식일 경우에는 sniffing을 통하여 해당 값이 노출되어 공격 받을 수 있다. 특히 Session ID 값 자체가 사용자명이나 암호 등의 평문으로 구성되어 있는 경우에는 직접적인 공격이 가능하다.

    위와 같은 취약성에 대한 Session ID 공격의 유형은 다음과 같다.


    Session ID 공격유형

  • 직접적인 Cookie Sniffing을 통한 Session ID 도용
  • 간접 우회 공격을 통한 Session ID 도용
  • Brute-force guessing을 통한 Session ID 도용

    지금까지 Session ID가 무엇인지, 어떤 형태로 존재하는지, 왜 취약한지에 대해서 알아보았다. 다음에는 실제 공격 유형에 대해 살펴보고, 대응 방안에 대해서도 논의해 보도록 하겠다.

    [해킹기법] ⑦ HTTP Session Hijacking (2)

    지난 회에서 기본적으로 Session ID가 무엇인지, 어떤 형태로 존재하는지, 왜 취약한지에 대해서 설명했다. 이번 회에는 취약한 Session ID에 대한 공격이 어떤 방식으로 일어나는지 살펴보고, 대응 방안에 대해서 살펴보도록 하겠다.

    Session ID 공격 유형

    Session ID에 대한 공격은 크게 2 단계로 이루어진다. 1단계는 Session ID 취득 단계이고 2단계는 취득한 Session ID 공략 단계이다.


    [그림1] HTTP Session Hijacking 공격 흐름도


    공격자는 Session ID를 취득하기 위하여 웹 서버와 웹 클라이언트의 트래픽을 직접적으로 스니핑하거나, 웹 서버 상에 공격 코드를 삽입하여 두고 사용자가 클릭할 때 Cookie, Session ID 값을 전송받을 수 있도록 한다. 웹 서버와 웹 클라이언트 사이의 트래픽을 직접적으로 스니핑하는 방법은 일반적인 네트워크 트래픽 스니핑 기법을 통해 가능하다.

    POST /xxxxxx HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*Referer: http://xxx.xxx..comAccept-Language: koContent-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)Host: ibn.kbstar.comContent-Length: 297Connection: Keep-AliveCache-Control: no-cacheCookie: Session=QJ48621878865

    [그림2] 네트워크 트래픽 스니핑을 통한 HTTP 요청 헤더 안의 쿠키값



    웹 서버 상의 HTML 코드 삽입이 가능한 페이지는 주로 사용자가 글을 게시할 수 있는 게시판이나 자료실 등에 존재한다. 정상적인 글을 게재하는 대신 공격자는 HTML 코드 및 스크립트를 심어 넣는다. 일반 사용자는 해당 게시물을 열람하게 될 때 자신도 모르는 사이 Cookie, Session ID 정보가 제 3 의 공격자 서버나 이메일로 전송되게 된다. (이러한 공격 기법을 Cross-Site Scripting이라고 부른다.)


    [그림3] 쿠키값 탈취를 위한 HTML 삽입 코드 예


    결과적으로 공격자는 취득한 타인의 Session ID 값을 웹 서버에 요청함으로써 HTTP Session Hijacking 공격을 시도할 수 있다. 물론 이 공격이 성공하려면 Session ID 값이 유효해야 하므로, 사용자가 로그온 한 상태에서 공격이 이루어져야 하거나 Session ID 값의 유지 시간이 긴 경우라는 제한 사항이 필요하다.


    그러나, 기본적으로 잘못 설계된 세션 관리 기법을 사용하고 있는 웹 서버는 이러한 Hijacking 공격에 취약할 수 밖에 없다. 굳이 타인의 Session ID 값을 직.간접적으로 취득하지 않고도 무작위 추측 대입(Brute-force Guessing)함으로써 공격이 가능하다. 공격자는 정상적인 로그인 과정시 분석한 자신의 Cookie 값, 웹 브라우저의 주소창의 URL, 웹 페이지 폼 소스 hidden field 내에 노출된 Session ID 값 자체를 분석한다.

    Session ID 생성 방식의 취약점을 파악한 후, 공격자의 컴퓨터에서 로컬 프록시 툴이나 웹 브라우저 창 URL 주소창에서 직접 Sessioion ID 값 단일 대입을 시도한다. 더 나아가 자동적인 Session ID 대입 스크립트를 작성하여 공격할 수도 있다.

    http://mmail.xxx.co.kr/mletter1/read_mail.asp?id=2266&tableName=musicMail1927&fromEmail=xxx@xxx.co.kr
    http://www.xxx.co.kr/view/UID2305670410000
    http://www.xxx.co.kr/view/UID2305670410341
    http://www.xxx.co.kr/view/UID2305670411302

    [그림4] 정상적인 Session ID 값



    http://mmail.xxx.co.kr/mletter1/read_mail.asp?id=3734&tableName=musicMail1927&fromEmail=xxx@xxx.co.kr
    http://www.xxx.co.kr/view/UID2305670410001
    http://www.xxx.co.kr/view/UID2305670410002
    http://www.xxx.co.kr/view/UID2305670419999

    [그림5] 무작위 추측 대입된 Session ID 값


    대응 방안

    HTTP Session Hijacking 공격에 대하여 웹 어플리케이션 개발자는 다음과 같은 점을 고려하여 세션 관리 기법을 구현하여야 한다.

    1. Session ID 생성 범위값을 사용자 수에 대비하여 충분히 큰 값으로 설정한다.
    2. Session ID는 가능한 한 추측 불가능(random)하게 생성한다. 무작위 추측 대입 공격을 할 때 공격자는 그만큼 더 많은 시간을 투입하여야 하며 현재 연결되어 활성화 되어 있는 유효한 Session ID 값을 찾는 확률은 낮아진다.
    3. Session Timeout 기능과 Session ID 재생성 기능을 사용한다. 일정 시간 동안 활동이 없는 사용자는 새로운 Session ID로 재로그인하도록 하고, 사용자 로그 아웃 시에는 Session ID 값을 폐기한다. 장시간 접속이 필요한 어플리케이션의 경우에는 일정 주기마다 Session ID값을 자동으로 재생성하여 세션을 유지하도록 한다.
    4. 무작위 추측 대입(Brute-force Guessing)에 대비하여 일정 회수 이상의 인증 실패시에는 사용자 잠금 기능을 구현한다.
    5. 로그인 이후에도 중요한 서비스 이용시에는 사용자 인증을 통하여 인가된 사용자만이 해당 서비스를 이용할 수 있도록 통제한다.
    6. Cookie 내용 안의 Session ID와 기타 변수값 자체를 암호화한다.
    7. 웹 서비스 자체의 중요성에 따라 Cookie가 전달되는 방식을 SSL로 구현함으로써 스니핑 공격에 대응할 수도 있다.
    8. 웹 서비스 상에 공격자가 HTML 공격 코드 삽입이 가능한 페이지가 있는지 점검한다. 직접적인 공격 코드 삽입을 차단할 수 있도록 특수 문자 및 스크립트 코드를 필터링하여야 한다.

    지금까지 HTTP Session Hijacking 공격 기법에 대해서 알아보았다. 대부분이라고 말할 수는 없지만 요즘 인터넷에 서비스되고 있는 인기 있는 웹 컨텐츠 서버는 기본적으로 안전한 세션 관리 기법으로 구현되어 있다. 그러나, 웹 컨텐츠의 인지도와는 별도로 이러한 공격 기법에 대한 인지 없이 비보안적으로 구현된 e-메일 카드 서비스, 전자 앨범 서비스 사이트 등이 다수 존재하는 것 또한 현실이다.

    HTTP Session Hijacking공격에 대한 대비는 안전한 웹 어플리케이션 구축을 위한 여러가지 항목 중에 필수적인 한 가지 사항이며, 기획 및 개발구현 단계에서 반드시 고려되어야 한다.


    [출처] 코코넛 시큐레터

  • 'IT' 카테고리의 다른 글

    통신업계 하반기 공채 ''스타트''  (0) 2006.09.06
    2단계 .kr 도메인 18일부터 등록  (0) 2006.09.05
    유지보수 비용예측  (0) 2006.09.04
    cobit  (0) 2006.07.23
    [KT] 차세대 인터넷 주소체계, IPv6 전환 계획 수립  (0) 2006.07.04