brunch

You can make anything
by writing

C.S.Lewis

by 복지CEO 조정원 Jul 16. 2016

(모의해킹) 프로그래밍은 항상 보안중심으로!!

보안프로젝트 매거진


보안으로 진로를 선택한 취업 준비생과 상담을 해보면 제일 고민 중 하나는 “프로그래밍을 어느 수준까지 해야 하나?”이다. 학원을 등록하면 선수과정으로 C언어, 자바언어는 기본으로 제시한다. 보안 업무를 하는데 프로그래밍은 알면 알수록 좋긴 하다. 하지만, 취업을 준비하는 기간 안에서 욕심을 부려가면서 프로그래밍을 마칠 이유는 없다. 우선 모의해킹 업무에서 프로그래밍이 어떻게 쓰이고 있는지 살펴보자.


내가 보안 컨설팅을 할 때쯤에도 웹 해킹 중심으로 프로젝트가 진행되었다. 단, 지금과 달리 입력 값 검증에서 많은 취약점이 나오는 시기였다. SQL 인젝션, XSS 취약점은 기본적으로 보고서에 포함이 되었다. 특히, SQL 인젝션은 데이터베이스의 중요한 정보를 획득할 수 있으므로 취약점이 존재하면 어떻게든 관리자 패스워드 계정까지 획득하려고 시도했다. 이 과정에서 빠르고 정확하게 획득할 방법이 필요했다. 그 당시에 자동으로 SQL 인젝션을 자동으로 판별하고 데이터까지 뽑아내는 도구가 많지 않았다. 중국에서 개발한 NBSI, NDSI 등이 대표적이었다. 그런데 이 도구들은 데이터베이스에서 임의적인 테이블을 생산하는 문제가 있었고, 다른 도구들도 비슷한 사례가 있었다. 고객 데이터베이스에 임의적인 테이블을 생성하는 것은 절대 안 되기 때문에 사용을 제한했다.


그래서 정말로 필요한 기능들만으로 구성된 도구가 필요하여 직접 제작을 하는 사례가 있었다. 나름대로 내부 모의해킹 인력들은 만족하는 도구를 만들었고 도구를 오픈해서 많은 사람이 사용되기도 했다. 세월이 지나 칼리 리눅스를 포함해서 많은 오픈소스 도구 라이브 CD들이 배포되었고 좋은 진단 도구들이 널리 퍼졌다. 도구에서 사용할 수 있는 옵션들도 정교해지면서 실무에서도 유용하다. 도구를 개발하기보다는 실무에 어떻게 적용을 해서 좋은 결과를 도출하냐에 초점을 둘 수 있다.


공격 도구를 개발하는 측면보다는 방어 시스템을 개발하는 것에 중점이 되었다. 국내에 공격을 목적으로 하는 솔루션은 많지 않다. 외국 Rapid7사의 메타스플로잇(Metasploit), 넥스포즈(Nexpose) 등이 대표적으로 총판하고 있다. 보안 솔루션은 웹 방화벽, 문서보안 솔루션, 고객정보 검색 솔루션, 인프라 서비스 취약점 자동 분석, 모바일 앱 보안 솔루션 등 많이 있다. 모의해킹을 직업으로 했던 사람 중에 많은 인력도 보안 솔루션 개발자로 전직한다. 국내에서는 SEWORKS, NSHC, SSR 등 창업을 하여 다양한 솔루션을 판매한다.


모의해킹 업무를 할 때는 스크립트 기반의 프로그래밍을 많이 한다. 파이썬(Python), 펄(Perl), PHP 등을 많이 활용한다. 쉽게 설명하기 위해 사례를 들어보겠다. 개인 정보 수정페이지에 인증 처리가 미흡하여 특정 패턴의 ID 값으로 다른 사용자의 정보도 요청할 수 있다고 하자. 이때 한두 명의 사용자 정보를 불러오면 결과보다 위협이 적게 보인다. 그래서 ID 값을 순차적으로 생성해서 수십만 건, 수백만 건의 개인정보를 획득한다면 파급력이 큰 취약점이 된다. 또한, 획득한 개인정보에서 2차 공격을 하는 데 필요한 계정 정보가 있다면 모든 정보를 가져와야 한다. 이를 수행하기 위해 간단한 스크립트를 제작하여 효율적으로 정보를 획득할 수 있다. 고급 프로그래밍 기술이 필요한 것은 아니어도 어떻게 프로그래밍을 하냐에 따라 시간을 단축할 수 있다.


또 다른 사례를 살펴보겠다. 모의해킹 업무 중에 시큐어코딩 진단 프로젝트가 있다. 개발 단계에서 취약점을 제거하기 위해 소스코드 중심으로 취약점 여부를 판단한다. 항목 중에서 SQL Injection 취약점, XSS 취약점 등 입력 값 검증 부재와 소스코드 내 중요한 정보 포함 등은 특정 패턴을 반영하여 검색할 수 있다. 정규화 표현 식으로 자동으로 소스코드를 검색해서 취약점을 도출할 때도 프로그래밍을 하면 좋다. 한 달 이상 소요되리라 판단되는 프로젝트도 몇 일 만에 결과를 낼 수 있었던 경험이 있다.


그 외에도 리버싱 과정에서 보안 솔루션 우회, 퍼징 기법을 통한 신규 취약점 도출 등 여러 곳에서 프로그래밍이 사용된다. 개발 목적이 아니라 진단 목적에서 프로그래밍하는 것이며 알면 알수록 고급적인(?) 방법으로 진단할 수 있다.


이렇게 프로그래밍을 공부할 때는 모의해킹 업무에서 어떻게 사용할 수 있는지 알고 공부하는 것과 그렇지 않고 무작정 공부하는 것과는 공부 소요 시간의 차이가 난다. 프로그래밍을 공부하면서 꼭 무엇을 개발해야 한다는 생각을 버리고 많은 보안 책을 보면서 자신이 공부했던 프로그래밍을 어떻게 활용할 수 있는지 고민하길 바란다.

매거진의 이전글 보안프로젝트 강의 업데이트
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari