brunch

You can make anything
by writing

C.S.Lewis

by Younggi Seo Jun 27. 2021

가장 흔한 침투 테스트

리버스 쉘(Reverse Shell)을 통한 웹쉘(Web shell)




3~4년 전쯤 예술의 전당 미술관에서 입체파의 피카소와 야수파의 마티스의 작품 전시가 동시에 열린 기획전을 본 적이 있었다. 아마도 피카소라는 화가의 유명세를 이용해서 대부분 마티스 작품응 전시한 것으로 기억한다. 실제로 전시를 둘러봤을 때, 피카소 작품은 몇 점 없을뿐더러, 그의 전성기 때가 아닌 초창기의 데쌩(스케치)을 한 희귀 작품류가 꽤 전시되어 있었고 마지막 출구 지점에서 그와 라이벌이었던 마티스의 생애에 대한 연보와 피카소가 그를 평가한 문구가 적혀있었다.



그리고 몇 년 후, 그 미술관에서 데이트하기 전에 미리 어떤 전시회가 열리는지 둘러볼 겸 들렀을 때 이미 미술관의 출구가 어딘지 알고 있었기 때문에, 표를 사지 않고 거꾸로 출구 건물로 들어가서 데이트하기 전에 미리 그날 미술전시를 공짜로 둘러봤다. 이것을 정보보안에서 해킹 용어로 백도어(Backdoor)라고 한다. 즉, 뒷문으로 들어간다는 뜻이다. 만약 위에서 언급한 미술관의 출구지점이 오직 바깥으로 나가는 경우에만 문이 열렸을 경우(지금은 그 미술관에 가더라도 따로 출구지점이 없고 입구로 돌아서 나와야 할 것이다), 전시를 다 관람한 관람객이 나오는 틈을 이용해 미술관을 들어가서(백도어 공격) 무료로 관람하고(시스템 정보 파악) 나갈 때 다음에도 이 출구 게이트를 통해서 나올 수 있게끔 어떠한 조치를 취하고 나간다면, 이것을 해킹 용어로 '리버스 쉘(Reverse Shell)'이라고 한다. 그리고 이렇게 열어둔 백도어를 통해 지속적으로 지능적 공격을 이어나가면 이전 섹션에서 언급한 APT(Advanced Persistent Threat)라고 한다.



거꾸로 들어가서 쉘(시스템에서 어떠한 명령을 실행할 수 있는 상태나 프롬프트를 일컫고, 배시쉘 bashshell이 가장 많이 쓰임), 관리자 권한을 획득할 때 가장 유용한 해킹 기술이 웹쉘(web shell)이다. 이러한 시스템 취약점을 이용하는 일련의 과정 자체는 어렵지 않다. 왜냐하면 해킹 대상의 시스템(Client)에서 웹서버(Server)로 접속할 때 기본적으로 열어두는 80이나 8080 포트를 이용하기 때문이다. 클라이언트에서 서버로 접속(3-way handshaking)이 이루어진 후, 접속을 해제(4-way handshaking) 하기 전에 이미 열려있는 80 포트나 8080 포트로 리다이렉팅(redirecting, 해커의 임의적인 포트에서 앞서 두 대표적인 웹 접속 포트를 경유)해서 거꾸로(출구를 통해) 클라이언트의 시스템으로 접속할 수 있다. 이때, 해커가 실행파일로 올린(업로드) 악성(malware) 소프트웨어나 기타 바이러스가 포함된 익스플로잇(해킹 자동화 툴킷)을 '웹쉘'이라고 칭하며, 이 웹쉘이 실행됨으로써 공격 대상의 시스템을 해커가 원하는 상태로 즉, 관리자(root) 권한을 획득할 수 있다.



웹쉘 파일 리스트, 총 320 개의 php 웹쉘을 모수로 하여 실습을 진행하려 한다. from 'WEB HACKING 서버 침투 기법' by 유현수

  


일단, 위험한 함수명과 난독화(암호화)되어 있는 위의 파일 리스트에서 어떻게 탐지할 수 있는지 살펴보고 오탐을 분간하기 위해 결과치(카운트)를 나타내는 방법이다.


웹쉘 오탐 확인을 위해서 오픈소스 콘텐츠 관리시스템 CMS을 다운로드하여 카운트를 확인함. 효율적으로 웹쉘을 탐지하기 위해서는 다수의 웹쉘을 분석하여 특징을 이해하고 패턴을 추출함


위에서 일단 웹쉘의 대표적인 기능으로 운영체제 명령 실행이 있는데, 이 실습은 PHP에서 사용이 가능한 운영체제 명령 실행 함수('passthru')를 이용하여 웹쉘을 탐지했다.


모수인 320 개의 3 배를 초과하는 것(1121 개)으로 상당수의 오탐이 포함되어 있는 것을 확인할 수 있고, 또한 각 키워드별로 탐지(위의 화면 맨 마지막 명령에서 해당 키워드만을 검색하여 추출)되는 개수도 추출 가능하다. 다음은 디코딩 함수(base64_decode)와 웹쉘에서 사용빈도가 높은 함수(str_rot13)를 이용하여 탐지하는 방법이다.


총 1421 개의 파일이 탐지되었다. 역시 디렉터리 별로 탐지된 숫자를 카운팅 할 수 있다.


리눅스에 기본적으로 설치되어 있는 AWK 유틸리티를 사용하면 조금 더 빠르게 탐색이 가능하고 grep의 정규식을 이용한 검색에서 오래 걸리는 성능 이슈를 피할 수 있음.


웹쉘을 탐지하기 위한 다양한 방법이 있으며 최근에 파일의 수정 여부를 확인해서 의심되는 파일이 있는지 확인하는 방법도 유용하다. 다음은 하루 전에 변경된 php 파일을 검색하는 방법이다(2017, 유현수).


# find -name '*.php' -mtime -1 -ls



이렇게 수동으로 뽑아낸 카운트 수치 백데이터로 작성한 도표만들어서 다음  월간보고에서 고객사에 이번에 신규 장비로 구축하는 웹쉘 탐지 시스템의 자체 성능과 비교한 차트(오탐율 대비 정탐률) 보여주려고 한다. 그래서 신규 도입 장비의 정탐률에 대한 평가를  예정이다.



발췌

한국어 APA 단행본 / 내주-참고문헌
유현수. (2017). WEB HACKING 서버 침투 기법 (pp. 273-279). n.p.: 오픈시큐어랩 BOOKS.
매거진의 이전글 Hashmap Table #0
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari