OS Command Injection(운영체제 명령어 주입)
: 사용자 입력값에 운영체제 명령어를 주입하여 원격 시스템 명령어를 실행할 수 있는 공격
- 원격 서버에 대한 시스템 취약점 발생
→ 제어권 탈취(서버 설정 파일 접근, 중요 소스 삭제 및 수정 가능)
= 웹 서버 가용성 침해, 데이터 침해 , 랜섬웨어 경유지/유포지 활용, 개인정보 탈취 등
운영중인 서비스에 영향 O
(모든 해킹은 결론적으로 시스템 명령 실행을 목표로 진행되므로 해킹의 관점에서 매우 강력)
공격 대상
- 사용자 입력값을 통해 시스템 명령을 실행하는 기능엔 잠재적으로 발생 가능 (= 일반 기능에선 필요 X)
- 웹 서비스의 관리자 콘솔에 가끔 존재, 일반적으론 찾기 어려움
vs SQL Injection
어떤 것을 주입하는가?가 가장 큰 차이
| SQL Injection | OS Command Injection | |
| 주입하는 것 | SQL 구문 | OS 명령어 |
| 결과 | 중요 데이터 탈취 | 중요 데이터 탈취, 인접 네트워크 침투, 해당 서버 점령 |
OS Command Injection이 더 강력한데도 sql이 더 주목 받게된 이유?
OS Command Injection은 발생하기 위한 조건을 만족하기가 어렵기 때문에 발생할 확률이 적은 반면,
SQL Injection은 CRUD와 밀접하기 때문에 발생할 확률이 높기 때문
공격 원리
- 사용자 입력값에 cmd 주입 (+ 기존의 미완성된 시스템 명령어 구문)
사용자 입력값에 입력값 검증이 없어서 발생
보통 관리자 콘솔에 취약점이 있어서 인가된 사용자라는 생각에 보안이 소홀
- 정상적인 입력값) nslookup www.page
비정상적 입력값) nslookup www.page & ifconfig(기존 명령어 뒤에 원하는 구문 추가)
- os에 따른 메타문자
linux/unix) &, &&, |, ||, 개행문자(\n), ; ...
windows) &, &&, |, ||
바인드쉘과 리버스쉘
쉘을 생성하기 위한 접속 방향에 따라 구분
| 바인드쉘 | 리버스쉘 | |
| 포트 여는 위치 | 공격 대상 서버 | 공격자 서버 |
| 접속 방향 | 공격자 클라이언트 → 서버 | 공격 대상 → 공격자 서버 |
| 공격자 호스트 | 클라이언트 | 서버 |
| 공격 대상 | 서버 | 클라이언트 |
리버스쉘 사용 용도
방화벽을 우회해야 할 때 사용 (일반적으로 내부→외부 허용, 외부→내부 차단)
∴ 방화벽의 아웃바운드 정책에 따라 포트포워딩
대응방안
1. 서버 사이드 스크립트로 구현
2. 사용자 입력 값 형식에 따른 정규 표현식 검증
입력 값이 ip면 ip 형식에 맞게 정규식을 쓰고 여기에 맞지 않으면 에러 처리
포맷대로 할 수 없다면 허용할 (특수)문자만 허용
시스템 명령 전에 검증 필요
ip의 경우 /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/ 부합하지 않으면 반드시 종료
3. 악의적인 문자 검증
4. 기능 없애기(사실상 이게 제일 좋다)
'Security > 취약점분석' 카테고리의 다른 글
| [BackDoor] 섹션5. XSS (0) | 2024.05.23 |
|---|---|
| [BackDoor] 섹션4. XXE Injection (0) | 2024.05.23 |
| [BackDoor] 섹션 2. SQL Injection (0) | 2024.04.06 |
| [BackDoor] 섹션 0. 프롤로그 & 섹션 1. 웹 해킹에 대한 이해 (0) | 2024.04.04 |
| [BackDoor] 취약점 분석/aws 1주차 (0) | 2024.04.01 |