본문 바로가기
정보처리기사/정보 시스템 구축 관리

시큐어 코딩 가이드 1

by jhwannabe 2023. 8. 19.

입력 데이터 검증 및 표현

입력 데이터 검증 및 표현의 개념

  • 프로그램에 입력되는 데이터로 인해 여러 가지 보안 약점이 발생할 수 있음
  • 이러한 보안 약점을 방지하기 위한 보안 점검 항목들임

보안 약점의 종류

  • 운영체제 명령어 삽입, 위험한 형식 파일 업로드, 신뢰되지 않는 URL 주소로 자동 접속 연결됨
SQL Injection - 검증되지 않은 외부 입력값이 SQL 쿼리문에 삽입되어 공격할 수 있는 보안 약점임
- DB에 컴파일된 SQL 쿼리문을 전달함으로써 방지할 수 있음
- SQL Injection 취약점이 발생하는 곳은 주로 웹 애플리케이션과 데이터베이스가 연동되는 부분임
- 로그인과 같이 웹에서 사용자의 입력값을 받아 데이터베이스 SQL문으로 데이터를 요청하는 경우 SQL Injection을 수행할 수 있음
경로 조작 및 자원 삽입 검증되지 않은 외부 입력값이 시스템 자원 접근 경로를 조작하거나 시스템 자원에 삽입되어 공격할 수 있는 보안 약점
크로스 사이트 스크립트
(XSS, Cross Site Scripting)
- 게시판의 글에 원본과 함께 악성 코드를 삽입하여 글을 읽으면 악성코드가 실행되도록 하여 클라이언트의 정보를 유출하는 공격 방법
- 웹페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도함으로써, 정보 유출 등의 공격을 유발할 수 있는 취약점임
- 외부 입력값에 스크립트가 삽입되지 못하도록 문자열 치환 함수를 사용하거나 JSTL이나 크로스사이트 스크립트 방지 라이브러리를 사용함으로써 방지할 수 있음
XQuery 삽입 - XQuery를 사용하여 XML 데이터에 대한 동적 쿼리 생성 시 검증되지 않은 외부 입력값이 쿼리문 구조 변경에 사용될 수 있는 보안 약점
- XQuery에 사용되는 외부 입력값에 대하여 특수문자 및 쿼리 예약어 필터링을 통해 방지할 수 있음
XPath 삽입 검증되지 않은 외부 입력값으로 XPath 쿼리문을 생성하여 쿼리문의 의미나 구조가 변경될 수 있는 보안 약점
LDAP 삽입 - 외부 입력값잉 올바르게 처리되지 못하여 LDAP(Lightweight Directory Access Protocol) 쿼리문의 구성 변경에 사용될 수 있는 보안 약점
- DN(Distinguished Name)과 필터에 사용되는 외부 입력값에 특수문자를 제거함으로써 방지할 수 있음
자원 삽입 외부 입력값을 검증하지 않고 시스템 자원에 대한 식별자로 사용하는 경우 공격자는 입력값 조작을 통해 시스템이 보호하는 자원에 임의로 접근하거나 수정할 수 있음

 

보안 기능

보안 기능의 개념

  • 인증, 접근 제어, 기밀성, 암호화, 권한 관리 등의 보안 기능을 부적절하게 구현하여 여러 가지 보안 약점이 발생할 수 있음

보안 약점의 종류

적절한 인증 없는 중요 기능 허용

  • 적절한 인증 없이 중요 정보를 읽거나 변경할 때 발생하는 보안 약점
  • 인증 과정 없이 서버에 접근하지 못하도록하고 중요 정보는 재인증을 거치도록 함으로써 방지할 수 있음

부적절한 인가

  • 접근 가능한 실행 경로에 대한 접근 제어 검사를 완전하게 하지 않아 정보가 유출되는 보안 약점
  • 노출되는 실행 경로를 최소화하고 사용자의 권한에 따라 접근 제어 리스트(Access Control List)를 관리함으로써 방지할 수 있음

중요한 자원에 대한 잘못된 권한 설정

  • 보안 또는 설정 파일과 같이 중요한 자원에 대해 읽기나 쓰기 권한을 잘못 설정하여 발생하는 보안 약점
  • 중요한 자원은 관리자만 읽고 쓰기가 가능하게 하고 사용자의 권한을 검사함으로써 방지할 수 있음

취약한 암호화 알고리즘 사용

  • 취약하거나 위험한 암호화 알고리즘을 사용하여 패스워드가 유출되는 보안 약점
  • 잘 알려진 안전한 암호화 알고리즘을 사용함으로써 방지할 수 있음

중요 정보 평문 저장

  • 개인정보, 금융정보, 패스워드 등의 중요 정보를 암호화하지 않고 평문으로 저장하여 중요 정보가 노출되는 보안 약점
  • 중요 정보를 암호화하여 저장하고 중요 정보 접근 시 사용자의 권한을 검사함으로써 방지할 수 있음

중요 정보 평문 전송

  • 중요 정보를 암호화하지 않고 평문으로 전송하여 중요 정보가 노출되는 보안 약점
  • 중요 정보를 암호화하여 전송하거나 보안 채널을 사용함으로써 방지할 수 있음

하드 코드된 비밀번호

  • 프로그램 코드 내에 데이터를 직접 입력하는 하드 코드된 패스워드를 포함시켜 사용하여 관리자의 정보가 노출되는 보안 약점
  • 패스워드는 암호화하여 별도의 파일에 저장하여 사용하고 디폴트 패스워드 대신 사용자 입력 패스워드를 사용함으로써 방지할 수 있음

충분하지 않은 키 길이 사용

  • 길이가 짧은 키로 암호화 및 복호화를 함으로써 짧은 시간 안에 키를 찾아낼 수 있는 보안 약점
  • RSA 알고리즘을 2,048비트 이상, 대칭 암호화 알고리즘을 128비트 이상의 키를 사용함으로써 방지할 수 있음

적절하지 않은 난수값 사용

  • 적절하지 않은 난수값을 사용하여 난수가 예측 가능해질 수 있는 보안 약점
  • 난 수 값을 결정하는 현재 시각 기반 등으로 시드값을 매번 변경함으로써 방지할 수 있음
728x90