본문 바로가기
SECURITY ::/Security Academy

웹 어플리케이션 보안 개요 - 주요 보안 약점 11가지

by bbombi 2024. 5. 2.

 

 

 


 

 

 

1. SQL Injection

원인 DB와 연동된 웹 앱에서 입력된 데이터에 대한 유효성 검증을 하지 않고 입력값을 DB쿼리의 일부로 사용하는 경우
영향 1. 인증을 우회해서 시스템에 로그인할 수 있음
2. 조작된 쿼리를 이용해 권한 없는 사용자에게 DB데이터가 유출되거나 삭제될 수 있음
3, 원격으로 시스템 명령어를 수행할 수 있음
대응 1. 정적쿼리를 사용하여 쿼리문의 구조가 바뀌지 않도록 한다.
2. 동적쿼리를 사용해야 하는 경우에는 입력값에 대한 쿼리문의 구조를 변경할 수 있는 문자열을 검사한 뒤 쿼리문에   사용한다.
3. DB에 접근하는 웹 앱의 접근권한을 최소화해야한다.
4. Internal Error(500) 페이지에 대한 오류 정보를 노출시키지 않아야 한다.

 

 

 

2. 운영체제 명령어 삽입 

원인 검증되지 않은 외부에서 입력 데이터를 프로그램내에서 실행 가능한 운영체제 명령문을 생성하는데 사용되는 경우
영향 공격자는 입력값을 조작하여 실행중인 웹서버의 권한으로 공격자가 삽입한 운영체제 명령어를 실행하여 시스템 내부 중요 파일들을 삭제하거나 백도어 실행과 같은 심각한 문제를 발생 시킬 수 있다
대응 1. 애플리케이션 내부에서 운영체제 명령어가 실행되지 않도록 프로그램 설계
2. 외부에서 입력되는 값을 내부명령에 직접적으로 사용하지 않고, 프로그램 내부에 미리 정의되어 있는 허용 목록을 검색하는데 사용하도록 프로그램 설계

 

 

 

3. 크로스사이트 스크립트(XSS)

원인 외부에서 입력된 값이나 DB에 저장되어 있는 값을 사용하여 동적인 페이지를 생성하는 애플리케이션이 입력 값에 대한 충분한 검증작업 없이 입력값을 사용하는 경우
영향 1. 클라이언트(브라우저)에서 악성코드가 실행되어 사용자 PC를 좀비 PC화 할 수 있다.
2. 사용자를 피싱 사이트로 접속하게 만들어 사용자의 중요 정보를 탈취할 수 있다.
3. 사용자의 쿠키정보 노출로 세션 하이재킹과 같은 공격이 실행될 수 있다.
대응 1. 입력값에 대해 정규식을 이용하여 정확하게 허용되는 패턴의 데이터만 입력되도록 제약
2. 서버로 들어오는 모든 요청에 대한 입력값에 XSS 필터링을 적용하여 안전한 값만 애플리케이션에서 사용하도록 한다
3. 출력값에 대해 HTML 인코딩을 적용하여 스크립트가 동작되지 않도록 한다
4. 출력값에 대해 XSSFilter를 적용하여 안전하지 않은 입력값들(<>'"&)에 대해 HTML인코딩을 적용하여 출력한다

 

 

 

4. 위험한 형식 파일 업로드

원인 파일 업로드 기능에서 업로드 되는 파일에 대한 안전성을 검사하지 않고 파일 업로드를 허용하는 경우
영향 1. 웹쉘을 업로드 하여 해당 웹쉘을 사용하여 시스템 명령어를 수행할 수 있는 쉘을 얻을 수 있다
2. 키로그를 설치하여 로그인 정보를 추출할 수 있다.
3. 악성코드가 포함된 파일을 업로드하여 다운로드 받아간 사용자의 시스템을 감염시킬 수 있다.
대응 1. 파일의 타입이나 확장자를 검사하여 허용된 형식의 파일만 업로드 처리한다.
2. 파일을 외부에서 접근 불가능한 경로에 저장한다.
3. 저장되는 파일 이름을 랜덤하게 생성하여 사용한다
4. 저장되는 파일이 실행권한을 가지지 않도록 한다.
5. 업로드 파일의 개수와 크기를 제한한다.

 

 

 

5. 크로스사이트 요청 위조

원인 요청에 대해 실제 페이지 서비스를 통해 전달된 요청인지를 확인하지 않고 서버가 요청을 처리하는 경우
영향 1. 미리 잘 작성된 스크립트를 이용하여 희생자의 권한으로 실행이 되도록 시도한다.
2. 게시판 자동 글쓰기, 자동 회원 가입, 다른 사용자의 권한을 도용하여 중요기능이 실행되는 공격이 수행될 수 있다.
대응 1. 입력 화면 폼 작성 시 GET 방식 대신 POST 방식을 사용한다.
2. 입력 화면 폼과 해당 입력을 처리하는 프로그램 사이에 CSRF 토큰을 사용하여 공격자가 직접적인 URL 조작을 통해 시스템의 기능을 사용할 수 없도록 한다.
3. 중요 기능에 대해서는 추가적인 인증이나 다중매체 인증방식을 적용한다.

 

 

 

6. 취약한 암호 알고리즘

원인 주요 정보를 암/복호화할 때 취약한 암호 알고리즘을 사용하는 경우
영향 외부로 유출된 중요 정보가 복호화 되어 노출 될 수 있다
대응 1. 자체적인 암호화 알고리즘을 개발해서 사용하는 것은 안전하지 않으므로, 학계 및 업계에서 이미 검증된 표준화된 알고리즘을 사용한다.
2. 취약하다고 알려진 DES, RC5 등의 알고리즘 대신 3DES, AES, SEED, RSA, SHA-2 등의 안전한 암호 알고리즘을 사용하여 암복호화 작업을 수행한다.

 

 

 

7. 중요정보 평문 전송

원인 중요정보(비밀번호, 개인정보 등)을 전송할 때 암호화하지 않거나 안전한 통신채널을 이용하지 않는 경우
영향 네트워크 스니핑(훔쳐보기)을 통해 암호화 되지 않은 인증정보나 개인정보가 노출된다.
대응 1. 로그인은 반드시 HTTPS와 같은 안전한 통신 채널을 사용한다.
2. 중요 정보들은 안전하게 암호화하여 전송하거나 HTTPS와 같은 안전한 통신 채널을 사용한다.
3. 쿠키로 전송되는 중요정보의 경우 HTTPS 통신으로만 값이 전달될 수 있도록 보안 속성을 설정한다.

 

 

 

8. 부적절한 인가

원인 인가된 특정 사용자만 사용 가능한 페이지에 대해 올바른 접근권한이 체크되지 않는 겨우
영향 허가 없는 사용자에 의해 기능이 사용되거나 데이터가 유출될 수 있다.
대응 1. URL 조작을 통해 리소스에 직접 접근할 수 없도록 차단한다.
2. 파라미터 조작을 통해 직접 접근을 차단한다.
3. ACL(Access Control List)을 이용하여 권한에 따라 적절한 기능을 사용할 수 있도록 설정한다.

 

 

 

9. 반복된 인증시도 제한 기능 부재

원인 인증을 위한 기능 구현 시 인증시도 횟수를 적절한 로직으로 제한하지 않은 경우
영향 인증시도 횟수를 제한하지 않는 경우 공격자는 툴을 이용하여 무작위 대입 인증시도를 통해 계정 접근권한을 얻을 수 있다.
대응 1.  인증시도 횟수를 제한하여 제한된 횟수를 초과하는 인증 시도에 대해 인증시도 시간 간격을 설정하여 툴을 이용한 인증시도 공격을 최대한 어렵게 만든다.
2. 중요 시스템에 대해서는 인증시도 횟수 제한을 초과한 계정에 대해서는 계정 잠금정책을 적용하여 공격이 불가능하게 한다.

 

 

 

10. 취약한 비밀 번호 허용

원인 비밀번호 조합규칙(영문, 숫자, 특수문자 등)이 미흡하거나 길이가 충분하지 않은 경우
영향 1. 패스워드 무작위 대입으로 계정 정보가 노출될 수 있다.
2. 패스워드 추측 공격으로 계정 정보가 노출될 수 있다.
대응 1. 비밀번호 설정 시 문자 구성 및 길이 조건을 설정한다.
2. 특정 정보 이용 및 패턴조건 제약
3. 기타 (KISA의 "암호정책수립기준설명서" 참조)

 

 

 

11. 에러처리

원인 개발자가 생성한 오류메시지에 시스템 정보나 프로그램 구조와 같은 민감한 정보가 노출되는 경우
ex) 예외처리 블록에서 e.printStackTrace()와 같은 메소드를 수행하게 되면 예외 시 스택정보가 콘솔로 출력되어 시스템에 대한 상세 정보가 노출된다.
영향 공격자는 에러 메시지를 통해 프로그램 실행 중 발생된 상세한 오류 정보를 얻을 수 있으며, 이 정보는 공격에 활용될 수 있다.
대응 에러메시지는 에러상황에 대해 간단한 에러상태 코드나 에러상태 문자열을 정의하여 지정된 로그파일에 로깅한다. 

 

 

 

 

 

 

출처: [KISIA] 시스템 취약점 진단 및 분석 수업 자료

 

댓글