
취약성
- 악의적 의도를 가지고 원치 않는 작업을 수행하는데 이용할 수 있는 약점.
가장 많은 피해사례가 보고된 목록
- OWASP Top Ten
- SANS Top 25
반드시 알아야 할 일반적인 취약성 목록
- 인증 취약성
- 세션 고정
- XSS (교차 사이트 스크립팅)
- Injection
- 기밀 데이터 노출
- 메서드 접근 제어 부족
- 알려진 취약성이 있는 종속성(Dependency) 이용
인증 취약성 (Authentication)
- 애플리 케이션을 이용하려는 사용자를 식별하는 프로세스.
- 회원가입, 로그인, 로그아웃 등
인가(권한) (Authorization)
- 인증된 사용자가 특정 기능과 데이터에 대한 이용 권리가 있는지 확인하는 프로세스.
인증 취약성이란
- 사용자가 악의를 가지고 다른 사람의 기능이나 데이터에 접근할 수 있다는 것.
- 일반 사용자가 관리자의 기능이나 데이터에 접근한다.
- 내가 작성하지 않은 글의 수정 또는 삭제
- 내가 주문하지 않은 상품들의 주문서 수정 또는 삭제
세션 고정 (Session Fixation / Session Hijacking)
- 세션 인증 기반 애플리케이션에서 발생
서버는 사용자를 식별한 후 다음 요청을 위해 SessionID를 발급한다.
발급한 SessionID 를 사용자에게 Cookie 를 통해 전달한다.
사용자는 매 요청마다 SessionID 를 Cookie 로 전달한다.세션 고정 / 세션 탈취란
- 발급 받은 SessionID 가 로그인 전/후의 SessionID 와 모두 동일하게 사용될 경우.
- 악의적인 사용자가 피해자의 세션을 탈취하여 정상적인 사용자로 위장하는 방법.
XSS (교차 사이트 스크립팅)
악의적인 사용자가 게시글에 스크립트를 주입해 사용자가 이를 실행하도록 하는 공격.
DDoS, 세션 탈취 등의 공격에 사용됨.
- 불특정 다수의 피해자는 자신도 모르는 사이에 공격의 가담자가 될 수 있다.
CSRF (사이트 간 요청 위조)
- 웹 애플리케이션의 흔한 취약점 중 하나.
- 서버에서 실행되는 특정 URL 하나를 추출해 이메일이나 게시글 및 댓글에 작성.
- 이미지나 링크 혹은 스크립트
- 이메일 또는 게시글, 댓글을 조회한 사용자는 자신도 모르는 사이에 URL 을 실행.
- 서버는 사용자가 직접 실행한 것으로 판단함.
- Log, DB 등에도 사용자가 직접 실행한 것으로 작성됨.
Injection (주입)
- 해커가 시스템의 OS, DB, 환경정보 등을 탈취 및 제어권을 확보하기 위한 공격.
- Form 또는 URL 을 통해 시스템을 제어하는 실행 문장을 전송.
- 이를 방어하지 않은 서버는 정보를 탈취 당하거나 제어권을 잃게 된다.
- SQL Injection : SQL 문장을 서버로 보내 DB 정보를 탈취한다.
- Command Injection : OS 명령문을 서버로 보내 OS 의 제어권을 탈취한다.
- MyBatis #, $ 차이
- #의 경우 문자와 숫자를 구별해서 ''를 붙인다.
- $로 파라미터를 전달할 경우 param = 'or 1=1--' 을 사용해 DB 정보를 탈취할 수 있다.
민감한 데이터 노출 처리
- 민감한 데이터 노출 처리란.
- 시스템의 중요 정보나 사용자의 개인 정보 등
- 보호 되어야 할 정보들이 Log나 화면에 그대로 노출되는 것.
- 사용자의 개인 정보
- ID, Password, 주소 이메일 등
- 시스템 정보
- OS 정류, Server 제품명 및 버전, DB 제품명 및 버전 등등
- 로그인 결과 정보
- 아이디가 존재하지 않습니다.
- 비밀번호가 틀렸습니다. 등 해커가 유추할 수 있는 정보들
- DB 에서 로그인 오류 정보를 처리하는 것이 아니라 IP 로 처리하면 해커가 ID 를 유추하는 것을 막을 수 있다.
- 로그인 실패가 계속 되면 IP 를 차단함
메서드 접근 제어 부족
- Controller, Service, Repository 등 권한 처리를 하나의 클래스로만 처리하는 경우
- 충분한 테스트가 뒷받침 되지 않으면, 정상적으로 동작하지 않을 가능성이 높다.
- 권한에 대한 인터페이스나 클래스를 따로 분리하여 처리해야 한다.
알려진 취약성이 있는 종속성 이용
- Spring 애플리케이션을 개발하기 위해서 여러 종류의 라이브러리가 필요.
- 취약성이 보고된 라이브러리를 사용할 경우, 개발자 단계에서 처리가 불가능.
- 따라서, 애플리케이션도 동일한 취약성에 노출된다.