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

소프트웨어 개발 보안 구축 구현 1/5

by 피갓자 2025. 3. 24.

소프트웨어 개발 보안 구축 구현
소프트웨어 개발 보안 구축 구현

SW 개발 보안 구현

시큐어 코딩 가이드

  • 설계 및 구현 단계에서 해킹 등의 공격을 초래할 가능성이 있는 잠재적인 보안 취약점(Vulnerability)을 사전에 제거하고, 외부 공격으로부터 안전한 소프트웨어를 개발하는 기법
  • 소프트웨어 보안 약점(Weakness)을 방지하기 위한 시큐어 코딩 가이드에 따른 개발 수행이 필요

력데이터 검증 및 표현

  • 프로그램 입력값에 대한 검증 누락과 부적절한 검증, 잘못된 형식 지정
  • 사용자와 프로그램 입력데이터에 대한 유효성 검증 체계를 수립하고 실패 시 처리 설계 및 구현

안 기능

  • 보안 기능(인증, 접근 제어, 기밀성, 암호화, 권한 관리 등)의 부적절한 구현
  • 인증과 접근 통제, 권한 관리, 비밀번호 등의 정책이 적절하게 반영되도록 설계 및 구현

간 및 상태

  • 거의 동시에 수행 지원하는 병렬 시스템 또는 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태의 부적절한 관리
  • 공유 자원의 접근 직렬화, 병렬 실행 가능 프레임워크 사용, 블록문 내에서만 재귀함수 호출

러 처리

  • 에러 미처리, 불충분한 처리 등으로 에러 메시지에 중요정보가 포함
  • 에러 또는 오류 상황을 처리하지 않거나, 불충분하게 처리되어 중요정보 유출 등 보안 약점이 발생하지 않도록 시스템 설계 및 구현

드 오류

  • 개발자가 범할 수 있는 코딩 오류로 인해 초래
  • 코딩 규칙 도출 후 검증 가능한 스크립트 구성과 경고 순위를 최상향 조정한 후 경고 메시지 코드 제거

슐화

  • 기능성이 불충분한 캡슐화로 인해 인가되지 않은 사용자에게 데이터 누출
  • 디버그 코드 제거와 필수 정보 외의 클래스 내부 데이터 접근자 프라이빗(Private)으로 지정

API 오용

  • 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용
  • 개발 언어별 취약 API 확보 및 취약 API 검출 프로그램 사용

입력 데이터 검증 및 표현

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

  • 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목들
  • 입력 데이터로 인해 발생하는 문제를 예방하기 위해서는 소프트웨어 개발의 구현 단계에서 유효성 검증 체계를 갖추고, 검증되지 않은 데이터의 입력을 처리할 수 있도록 구현해야 함

입력 데이터 검증 및 표현 취약점

입력 데이터 검증 및 표현 취약점

XSS(Cross Site Scripting)

  • 검증되지 않은 외부 입력 데이터가 포함된 웹페이지가 전송되는 경우, 사용자가 해당 웹페이지를 열람함으로써 웹페이지에 포함된 부적절한 스크립트가 실행되는 공격
  • 특수문자 등록을 방지하기 위해 특수문자 필터링, HTML 태그 사용 금지(특히, < 문자사용 시 &lt로 변환처리), 자바스크립트로 시작하는 문자열은 모두 문자열 변환처리

사이트 간 요청 위조(CSRF, Cross Site Request Forgery)

  • 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격
  • 입력화면 폼 작성 시 GET 방식보다 POST 방식 사용, 입력 폼과 입력처리 프로그램에서 세션별 CSRF 토큰을 사용하여 점검, 중요기능의 경우 재인증을 통해 안전하게 실제 요청 여부를 확인하도록 구현

SQL 삽입(SQL Injection)

  • 응용 프로그램의 보안 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행시켜서 데이터베이스(DB)의 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격
  • 바인딩 매개변수 방식 적용하여 사전에 변수 타입을 명시적으로 지정, 사용자로부터 입력될 수 있는 모든 값을 체크하여 필터링, Servlet Filter 기능 적용(Java에서만 적용)

XSS

XSS 공격 유형

저장형(Stored) XSS : 방문자들이 악성 스크립트가 포함된 페이지를 읽어 봄과 동시에 악성 스크립트가 브라우저에서 실행되면서 감염되는 기법

반사형(Reflected) XSS : 공격용 악성 URL을 생성한 후 이메일로 사용자에게 전송하면 사용자가 URL 클릭 시 즉시 공격 스크립트가 피해자로 반사되어 접속 사이트에 민감정보를 공격자에게 전송하는 기법

문서 객체 모델(DOM, Document Object Model) 기반 XSS : 공격자는 DOM 기반 XSS 취약점이 있는 브라우저를 대상으로 조작된 URL을, 이메일을 통해 발송하고 피해자가 URL 클릭 시 공격 피해를 당하는 기법

 

XSS 공격 절차

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

SQL 삽입(SQL Injection)

SQL 삽입 공격 유형

Form SQL Injection : HTML Form 기반 인증을 담당하는 애플리케이션의 취약점이 있는 경우 사용자 인증을 위한 쿼리 문의 조건을 임의로 조작하여 인증을 우회하는 기법

Union SQL Injection : 쿼리의 UNION 연산자를 이용하여 한 쿼리의 결과를 다른 쿼리의 결과에 결합하여 공격하는 기법

Stored Procedure SQL Injection : 저장 프로시저를 이용하여 공격하는 기법

Mass SQL Injection : 기존 SQL Injection의 확장된 개념으로 한 번의 공격으로 대량의 DB 값이 변조되어 홈페이지에 치명적인 영향을 미치는 공격 기법

Error-Based SQL Injection : DB 쿼리에 대한 에러 값을 기반으로 한 단계씩 점진적으로 DB 정보를 획득할 수 있는 공격 기법

Blind SQL Injection : DB 쿼리에 대한 오류 메시지를 반환하지 않으면 공격할 수 없는 Error-Based SQL과 달리 오류 메시지가 아닌 쿼리 결과의 참과 거짓을 통해 의도하지 않은 SQL 문을 실행함으로써 데이터베이스를 비정상적으로 공격하는 기법

 

SQL 삽입 공격 절차

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

CSRF(Cross Site Request Forgery)

CSRF 공격 유형

GET-Based CSRF : 악성 링크나 이미지 태그 등을 사용하여 사용자의 브라우저에서 특정 GET 요청을 실행하도록 유도하는 기법

POST-Based CSRF : 사용자의 세션을 이용해 악성 POST 요청을 보내도록 유도하는 기법

 

CSRF 공격 절차

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