공격자가 원격에서 코드를 실행할 수 있는 RCE(Remote Code Execution) 공격으로 이어지기 때문에 치명적이다.
역직렬화 : 저장되어 있는 바이트 스트림을 다시 객체로 만들어 원래의 데이터를 다시 불러오는 과정
바이트 스트림 : 저장을 하기 위해 객체를 순차적인 데이터로 변환하는 과정
직렬화와 역직렬화는 객체 데이터를 네트워크를 통해 전송할 때도 사용할 수 있다.
하나의 호스트 내에서 여러 개의 프로세스가 동일한 객체를 사용할 수 있도록 하고, 인터넷을 통해 여러 호스트의 프로그램이 동일한 객체를 사용할 수 있도록 한다.
바이트 스트림에 표시된 aced005라는 문자열은 직렬화된 데이터 앞에 항상 나타나는 문자열이다.
직렬화된 데이터가 어떤 식으로 표시되는 지 알아본다.
위와 같이 application /x-java-serialized-object 타입을 통해 직렬화된 데이터로 확인할 수 있다.
위와 같이 버프스위트의 응답 메시지의 hex값을 이용하여 직렬화된 데이터임을 확인할 수 있다.
이때, 자바 역직렬화 취약점으로 인해 임의의 페이로드를 삽입하여 원하는 명령어를 실행할 수 있다.
공격을 위해 ysoserial이라는 프로그램을 다운로드한다.
다운로드한 jar 파일을 이용하여 원하는 명령어를 실행할 수 있는 공격 코드(페이로드)를 만들 수 있다.
그렇게 임의로 생성한 페이로드를 JBoss의 /invoker/JMXInvokerServlet URL로 전송하여 페이로드에 지정된 명령어를 실행할 수 있다.
우선 칼리 리눅스에서 nc를 서버 모드로 실행해놓는다.(4000 포트)
클라이언트 PC에서 nc 접속을 한다.
명령문을 삽입한 페이로드를 ysoserial로 생성한다.
※ CommonsCollections1은 페이로드의 한 종류로 JBoss 4.2.3 GA 버전을 공격하는 데 사용
※ ""는 우리가 실행하고자 하는 명령어
※ >을 활용하여 home 디렉터리에 reverse.bin 파일 생성
이렇게 생성된 페이로드 파일의 내용을 /invoker/JMXInvokerServlet URL로 전송한다.
reverse.bin 공격 코드를 추가하고, 요청을 보낸다.
리스닝 모드로 nc가 실행 중이던 터미널에서 접속이 확인된다.
python -c 'import pty; pty.spawn("/bin/bash");'를 이용하여 프롬프트가 표시되는 쉘로 업그레이드한다.
위와 같이 호스트까지 침투함을 알 수 있다.
아파치 CommonsCollection 패키지를 최신 버전으로 업데이트하여 공격을 예방한다.
프레임워크를 비롯한 웹 애플리케이션 개발을 위해 사용하는 구성요소들을 항상 최신 버전으로 유지한다.
역직렬화 전에 반드시 인증 과정을 수행한다.
출처를 알 수 없는 객체의 경우 역직렬화를 수행하지 않는다.
직렬화된 객체에 디지털 서명이 되도록 하여 역직렬화 과정에서 객체 변조 여부(무결성)를 점검한다.
가급적 최소 권한으로, 가능하다면 격리된 환경에서, 역직렬화를 수행한다.(접근 방지)
Step12. 알려진 취약점을 위한 공격 (0) | 2021.03.09 |
---|---|
Step11. XXE(XML 외부 엔티티) 공격 (0) | 2021.03.08 |
Step10. 접근 통제 취약점 공격 (0) | 2021.03.08 |
Step9. 민감한 데이터 노출 (0) | 2021.03.07 |
Step8. 파일 업로드 공격 (0) | 2021.02.28 |
댓글 영역