본문 바로가기
STUDY

[정처기] 9과목 소프트웨어 개발 보안 구축 시큐어 코딩 가이드 총정리

by univus 2022. 10. 19.

수제비 2022 정보처리기사 실기 교재 개념 정리한 내용입니다.

시큐어 코딩 가이드

: 설계 및 구현 단계에서 잠재적인 보안 취약점을 사전에 제거하고 외부 공격에 안전한 소프트웨어를 개발하는 기법

 

1. 입력데이터 검증 및 표현

1-1. XSS(cross site script)

: 검증되지 않은 외부 입력 데이터가 포함된 웹 페이지가 전송되는 경우, 사용자가 열람하면 웹 페이지에 포함된 부적절한 스크립트가 실행되는 공격

 

공격 유형

  • stored XSS

: 방문자들이 악성 스크립트가 포함된 페이지 읽어봄과 동시에 실행되면서 감염

  • reflected XSS

: 공격용 악성 URL을 생성한 후 이메일로 사용자에게 전송, 사용자가 클릭 시와 동시에 접속 사이트에 민감정보를 공격자에게 전송

  • DOM(document object model XSS)

: 공격자는 DOM 기반 XSS 취약점이 있는 브라우저를 대상으로 URL을 발송, 클릭시 공격 피해 당하게

 

공격 절차

  1. XSS 취약점이 존재하는 서버에 XSS 코드 작성하여 삽입 저장
  2. 사용자가 XSS 코드에 접근, 해당 페이지에서 정보를 요청
  3. 사용자의 시스템에서 XSS 코드 실행
  4. XSS 코드 실행 결과가 공격자에게 전달, 결과를 가지고 웹 서버에서 2차 해킹 시도

 

1-2. CSRF(사이트 간 요청 위조)

: 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격

 

 

공격 절차

  1. 공격자가 CSRF 스크립트가 포함된 게시물 등록
  2. 사용자가 해당 페이지 열람 요청
  3. 게시물을 읽은 사용자의 권한으로 공격자가 원하는 요청 발생
  4. 공격자가 원하는 CSRF 스크립트 결과가 발생

 

1-3. SQL 삽입

: 응용 프로그램의 보안 취약점을 이용해 악의적인 SQL 구문을 삽입,실행하여 DB의 접근을 통해 정보 탈취 및 조작

 

공격 유형

  • form SQL injection

: HTML form 기반 인증에 취약점 있는 경우, 사용자 인증을 위한 쿼리문의 조건을 임의로 조작하여 인증 우회

  • union SQL injection

: union 연산자 이용하여 한 쿼리의 결과를 다른 쿼리의 결과에 결합하여 공격

  • stored procedure SQL injection

: 저장 프로시저(stored procedure) 이용하여 공격

  • mass SQL injection

: 한번의 공격으로 대량의 DB 값이 변조

  • error-based SQL injection

: DB 쿼리에 대한 에러값을 기반으로 점진적으로 DB 정보를 획득(DB 쿼리에 대한 오류 메시지를 반환하지 않으면 공격 불가)

  • blind SQL injection

: 쿼리 결과의 참 거짓을 통해 의도하지 않은 SQL문을 실행함으로써 DB 비정상적으로 공격

 

 

공격 절차

  1. 응용 프로그램의 취약점 탐지
  2. 악의적인 SQL 구문 삽입하여 인증 우회
  3. 권한 상승하여 DB 정보 탈취, 조작

 

2. 보안 기능

취약점

  • 적절한 인증 없이 중요 기능 허용 : 보안검사 우회
  • 부적절한 인가 : 접근제어 기능 없는 실행경로를 통해 정보,권한 탈취
  • 취약한 암호화 알고리즘 사용 : 암호화된 환경설정 파일 해독하여 중요 정보 탈취
  • 중요 정보 평문 저장 및 전송 : 암호화되지 않은 평문 데이터 탈취
  • 하드 코드 된 비밀번호 : 프로그램 코드 내부에 패스워드 포함 시 관리자 정보가 노출될 수 있음
  • 취약한 패스워드 요구 조건 : 사용자 계정 보안 취약점

3. 시간 및 상태

 

4. 에러 처리

  • 오류 메시지 통한 정보 노출
  • 오류 상황 대응 부재
  • 적절하지 않은 예외 처리

 

5. 코드 오류(개발자의 실수)

  • 널 포인터 역참조 : null이 될 수 없다는 가정을 위반했을 때 발생
  • 정수를 문자로 변환 : 문자에 대한 저장 값이 올바르지 않음
  • 부적절한 자원 해제 : 종료된 자원을 반환하지 못했을 때
  • 초기화되지 않은 변수 사용

 

6. 캡슐화

  • 잘못된 세션에 의한 데이터 정보 노출
  • 제거되지 않고 남은 디버그 코드
  • 민감한 데이터를 가진 내부 클래스 사용 : 권한이 없는 클래스를 사용하고자 할 때 발생
  • 시스템 데이터 정보 노출 : 내부 데이터를 외부로 출력하도록 코딩했을 때 발생

 

7. API 오용

  • DNS lookup에 의존한 보안 결정 : 도메인명에 의존하여 보안결정을 내리는 경우 발생
  • 위험하다고 알려진 함수 사용
  • 널(null) 매개변수 미검사

 

8. 세션 통제(session control)

  • 불충분한 세션관리 : 세션 타임아웃을 길게 설정한 경우 공격자에 의해 사용자 권한이 도용