1. 웹쉘 이란
웹쉘은 말 그대로 웹사이트를 통해 쉘(shell)을 여는 공격 입니다.
※쉘(shell) : 사용자에게 받은 지시를 해석하여 하드웨어 지시어로 바꿈으로써 운영체제의 커널과 사용자 사이를 이어주는 것
쉘은 서버에 대한 모든 설정을 변경할 수 있기때문에 일반적으로 22번 등 별도 포트를 통해 접속하게 됩니다.
그런 쉘이 인터넷을 통해 누구든지 접속 가능하게 된다면????? 웹 서버 운영자 입장에선 그만한 재앙은 없죠.
왜냐 ?? 모든 설정을 변경 할 수 있다는 건 웹사이트가 악성코드 배포의 성지가 될 수도, 개인정보 유출로 이어질 수도 있단 얘기이기 때문이죠.
웹쉘은 해커가 악성 프로그램을 웹 사이트에 업로드에 성공하는 것으로 시작 됩니다.
악성 프로그램은 주로 서버 사이드 스크립트(ASP, PHP, JSP 등)로 만들어 집니다.
즉. 웹사이트에 아무도 모르게 쉘 명령어를 날릴 수 있는 페이지를 하나 더 만든다는 얘기죠.
여기서 웹쉘이 무서운 이유!
웹쉘 공격은 일반적인 웹 사이트 사용자들과 동일한 웹 서비스 포트(http(80, 8080), https(443))를 통해 이루어지기 때문에 탐지가 매우 어려워, 해킹 사고가 터지지 않는 이상 인지하기가 어렵다는 겁니다.
정상적인 웹 서비스 구조를 통해 공격 원리에 대해 알아보겠습니다.
2. 웹 서비스 구조
1) URL 구조
- 프로토콜 : 어떠한 웹서비스 포트를 사용할 것인지(https: 443포트, http: 80, 8080 포트)
- 호스트 : DNS 에 run-it.tistory.com을 쿼리하여 응답 받은 IP를 통해 웹서버를 찾아 옴
- 경로 : 웹 서버에 올라간 디렉토리 경로
- 질의 : 경로 안에 있는 서버 사이트 스크립트파일에 파라미터를 날려 질의 명령(그림에 없음)
※예시일 뿐 실제 존재하지 않는 주소임
2) 웹 서버 구조
[순서]
① 클라이언트가 웹서버에 데이터 요청
② 웹서버가 WAS에 데이터 가공 요청
③ WAS가 필요한 정보를 DB에 요청 / DB가 WAS에 DB정보 전달
④ DB정보를 WAS가 가공하여 WEB서버에 전달
⑤ 전달받은 정보를 클라이언트에게 전달
3. 공격 원리
[순서]
① 클라이언트가 웹서버에 악성 JSP 파일 업로드 성공
원격을 쉘 명령어 수행(예시 : Runtime.getRuntile().exec("cmd=ls"))
② 웹서버가 WAS에 데이터 가공 요청
③ WAS 웹서버의 "cmd=ls"란 명령어를 수행하라고 번역하여 전달
④ 웹서버에서 "ls"란 명령어를 수행하여 현재 경로에 있는 파일리스트를 나열
⑤ 전달받은 파일리스트 정보를 클라이언트에게 전달
4. 대응 방법
- 시큐어 코딩
- 취약점 패치
- 키워드/명령어 필터링
- 업로드 파일의 확장자 및 실행권한 제한
Comments
Post a Comment