Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Chimy's Program

정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 구현 본문

BASE

정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 구현

chimy 2020. 9. 9. 21:50

정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 구현

 

SW개발보안 구현을 위한 시큐어 코딩

 

  • 안전한 소프트웨어를 개발하여 각종 보안 위협으로부터 예방하고 대응하고자 하며 정보시스템 개발  보안성을 고려하고 보안 취약점을 사전에 제거하기 위하여 시큐어 코딩 사용

 

소프트웨어 개발보안 측면의 시큐어 코딩의 목적

 

(1) 보안 취약점과 결함방지 

 

  • 최근 사이버 공격의 진화에 따라 사전에 정보처리시스템의 보안취약점을 사전에 대응
  • SQL injection 취약점, Zero Day Attack 공격침입차단시스템(TMS System)  보안장비의 우회 등과 같은 보안 취약점을 사전에 제거하여 개발

 

(2) 안전한 대고객 서비스 확대 

 

  • ⁠대부분의 대고객 서비스가 ICT신기술을 통하여 인터넷을 통해 제공
  • 대고객 비스의 보안취약점을 지속적으로 진단하여 제거에 효율적 관리 방안 마련

 

⁠(3) 안정성  신뢰성 확보 

 

  • 대고객 서비스의 신뢰성을 기반으로 하는 안정성에 기반한 보안확보를 위해 정보시스템의 기초 단계부터 설계 개념  시큐어 코드의 수준에서의 대응조치를 제안하여 고객 서비스의 보안성 강화

 

개발단계 보안을 위한 시큐어 코딩 적용방안

 

(1) 보안 정책의 ⁠수립 

 

  • 개발보안 가이드 작성  공지적용 의무화 사업에 대한 명확한 구분과 정책 추진 필요

 

(2) SW개발보안을 위한 시큐어 코딩 가이드 작성 

 

  • 사업자는 SW개발보안을 위한 적절한 개발절차와 방법을 마련하여 참여인력에게 제공하여 보안을 위한 시큐어 코딩 가이드 작성

 

(3) 시큐어 코딩 가이드 교육

 

  • 참여인력에 대한 소프트웨어 개발보안 가이드  시큐어 코딩 교육 실시

 

(4) 시큐어 코딩 자동화 도구 

 

  • 개발과정에서 보안약점 진단도구를 이용하여 개발자 스스로 보안약점 진단  제거에 활용

 

 

SW보안을 위한 시큐어 코딩의 점검내용

 

입력데이터 검증  표현

 

  • 이용자프로그램에서 입력되는 데이터에 대한 유효성 사전 검증체계를 갖추고 오류발생  처리가 가능하도록 개발 수행
  1. ⁠SQL삽입 : 사용자의 입력   외부 입력 값이 SQL 쿼리에 삽입되어 공격
  2. 자원 삽입 : 외부 입력된 값의 사전 검증이 없거나 또는 잘못 처리된 검증을 거쳐서 제공되는 시스템 자원에 접근 경로  정보로 이용될  발생
  3. 크로스사이트 스크립트 : 검증되지 않은 외부 입력 값에 의해 브라우저에서 악의적인 코드가 실행되는 보안약점
  4. 운영체제 명령어 삽입 : 운영체제(OS) 명령어 파라메터 입력 값이 적절한 사전검증을 거치지 않고 사용되어 공격자가 운영체제 명령어를 조작할  있는 보안약점 
  5. 기타 : 신뢰성이 낮은 URL주소로 자동으로 접속되는 LDAP 삽입디렉토리 경로 조작연결 크로스사이트 요청 위조, XQuery 삽입XPath 삽입, HTTP 답분할

 

보안기능 

 

  • 보안기능(인증접근제어기밀성암호화권한 관리 ) 적절하지 않게 구현  발생할  있는 보안약점
  • 사용자 중요한 정보를 평문으로 저장/전송소스에 명시적으로  혀있는 패스워드(하드코딩), 충분하지 못한 암호화  길이를 사용하는 경우적절하지  무작위 난수 값을 사용하는 경우내부 시스템상의 패스워드 평문 저장
  1. 적절한 인증 없는 중요기능 허용 : ⁠적절하지 못한 인증 없이 중요정보(개인정보계좌이체 정보) 열람/변경 가능한 보안 취약점 
  2. 부적절한 인가 : 적절하지 못한 접근제어로 외부 입력 파라미터값이 포함된 문자열로 서버 인프라 자원에 접근/서버 실행 인가을 가능하게 하는 보안약점
  3. 중요한 자원에 대한 잘못된 권한설정 : 중요한 자원(프로그램 설정 민감한 사용자 데이터의 노출) 대한 적절하지 못한 접근권한을 부여되어 의도치 않게 중요정보가 노출/수정되는 보안약점 
  4. 취약한 암호화 알고리즘 사용 : 중요한 민감성 정보(패스워드개인정보) 기밀성이 취약한 암호 알고리즘을 사용하여 정보가 노출되는 보안 취약점

 

시간  상태 

 

  • ⁠프로그램 실행 중에 동시에 수행되는 병렬 처리 시스템다수의 프로세스가 실행되는 환경에서 시간과 실행 상태를 부적절하게 처리되어 발생 가능한 보안 취약점
보안 약점 설명
경쟁조건 : 검사시점과 사용시점 다수의 멀티 프로세스 상에서 인프라 자원을 체크하는 시점과 사용되는 시점이 달라 발생하는 보안 취약점
제어문을 사용하지 않는 재귀함수 적절한 제어문 처리가 되어있지 않는 재귀함수에서 무한재귀(무한루프)가 발생하는 보안약점

 

에러 처리 표현 

 

  • 에러를 처리하지 않거나 불충분하게 처리하여 에러 정보에 중요정보(시스템) 포함될  발생할  있는 보안약점
보안 약점 설명
부적절한 오류메시지 개발자가 에러처리 활용을 위하여 오류정보의 출력메시지를 배포될 서비스 버전 소프트웨어에 오류메시지 또는 디버깅 메시지를 소스내에 포함시킬 때 발생하는 보안약점
오류 상황 대응 부재 시스템에서 발생되는 오류를 처리하지 못하여 프로그램 다운 등 의도하지 못하는 경우가 발생할 수 있는 보안 취약점
적절하지 않은 예외처리 예외에 대한 부적절한 처리로 인해 의도하지 않은 상황이 발생될 수 있는 보안약점

 

⑤ 코드 오류 

 

  • 프로그램의 (type)변환 오류인프라 자원(메모리 사용현황) 적절하지 못한 반환 같이 개발자가 범할  있는 개발 오류로 인해 발생되는 보안약점
보안 약점 설명
널(Null) 포인터 역참조 Null 값으로 설정된 중요 변수의 메모리 주소 값을 참조했을 때 발생하는 보안 취약점
부적절한 자원 해제 사용되는 리소스 자원을 적절하게 해제하지 못하면 리소스 자원의 누수 등이 발생하고 리소스 자원이 부족하여 새로운 입력을 처리하지 못하게 되는 보안 취약점

 

⑥ 캡슐화

 

  • 중요한 데이터를 은닉하기 위한 확장개념
  • 객체들의 내부와 외부 간의 분리 역할을 수행하고 사용자에게 상세 구현을 감추고 필요사항만 보이게 함으로써 객체의 속성과 메소드를 다른 객체가 접근할  없도록 하기 때문에 메시지 수신에 의해 요구된 작업을 수행
  • 소프트웨어의 부품의 재사용증대와 소프트웨어의 수정시험유지보수성 향상
  • 중요한 프로그램의 데이터와 프로그램의 기능성을 충분하지 못하게 캡슐화하였을  인가 되지 않은 사용자에게 프로그램 내부의 데이터 누출이 가능해지는 보안약점
  • Private 배열에 Public Data 할당, Public Method부터 반환된 Private 배열
보안 약점 설명
잘못된 세션에 의한 정보 노출 잘못된 통신 세션에 의해 권한없는 사용자에게 데이터 노출이 일어날 수 있는 보안 취약점
제거되지 않고 남은 디버그 코드 프로그램 디버깅을 위해 작성된 코드를 통해 권한이 없는 사용자 인증이 우회되거나 중요 정보에 접근이 가능해지는 보안약점
시스템 데이터 정보 노출 사용자가 볼 수 있는 에러처리 메시지나 오류가 스택 정보에 시스템 내부 데이터나 내부 로직 등 디버깅 관련 정보가 공개되는 보안 취약점

 

API 오용

 

  • 의도된 사용에 반하는 방법으로 API 사용하거나 보안에 취약한 API 사용하여 발생할  있는 보안약점
InetAddress addr=InetAddress.getByName(ip);
if(addr.getCanonicalHostName().endsWith("trustme.com"){
	trusted=true;
}
if(Ip.equals(trustedAddr)){
	trusted=true;
}
보안 약점 설명
DNS lookup에 의존한 보안결정 보안결정을 DNS 이름에 의존 시 DNS는 공격자에 의해 DNS 스푸핑 공격 등이 가능하게 되는 보안 결정 등이 노출되는 보안약점

 

 

수행

 

① 설계가 완료된 SW프로그램 개발환경 점검

 

(1) SW응용프로그램 구현

 

(가) 초기 설계단계의 기능 명세서에 따라 기본 설계서를 작성하고 상세설계서 등에 반영된 보안요구사항을 응용프로그램 개발자가 직접 구현

 

응용프로그램 방식의 보안 구현의 고려사항

 

  • 개인정보 입력  암호화되어야 하는 범위 결정
  • 소프트웨어 플랫폼을 확인하여 보안 모듈 선택
  • 보안 구축 전문업체의 확인을 통해 소프트웨어 플랫폼에 맞는 응용프로그램방식의 솔루션을 제공해   있는지 확인
  • 응용프로그램 방식에서의 암호화 부분은 텍스트로 전송되는 부분만을 암호화하여 미지와 같이 암호화가 불필요한 부분을 제외하여 적절히 암호화 적용부분 결정
  • 응용프로그램 방식의 보안 구축을 완료한  적절한 테스트 시나리오를 통해 구축완료 선포

 

(나) 보안 담당자  보안 평가자는 설계된 내용들이 정확히 구현 되었는지와 소스코드  구현물 내의 취약점 등에 대해 점검하고 확인

 

(a) 프로그램 버그에 의한 경쟁상태 발생 가능성 검토 

 

  • 공격자가 구동한 악성 프로그램이 프로그램 버그를 악용한 경쟁 상태를 유발하여 시스템 권한(Set-User ID 붙은 경우 Root, Bin) 획득하는 상황 방지

 

(b) 소스코드  민감한 정보 삽입 

 

  • 개발자는 소스코드에 ID 또는 패스워드시스템 정보, DB정보 포함되거나 주석으로 포함되지 않도록 처리

 

(c) 소스코드  악성코드 삽입 

 

  • 응용프로그램 개발  보안 정책을 우회할  있거나 프로그램 자체 기능에 위해 가할  있는 코드개인 정보의 유출코드은닉(covert channel) 생성할  있는 코드백도어/트랩 도어 등의 코드의 삽입 방지

 

(d) 실행 결과의 예외 처리

 

  • 예기치 않은 입력 값에 대한 정확한 예외상황 처리

 

(2) 응용프로그램 구현 환경 관리

 

(가) 로그인 관리 

 

(a) 로그인 실패  정확한 원인 표시

 

  • 개발자의 로그인 실패  로그인 실패 이유의 설명 없이 세션을 종료하거나 재입 대기 x

 

(b) 잘못된 패스워드 입력 횟수 제한

 

  • 일정 횟수 이상 패스워드를 잘못 입력할 경우 일시적으로 사용을 중지하거나 세션 종료

 

(c) 최근 로그인 정보 표시 

 

  • 개발자가 로그인  가장 최근에 성공적으로 로그인한 날짜시각 등의 정보를 면에 표시

 

(d) 일정시간 경과  자동 로그오프 

 

  • 사용자로부터 일정시간 동안 입력이 없을 경우 자동 로그오프 또는 세션 종료 

 

(e) 로그인 상태 유지  세션 방식 적용

 

  •  애플리케이션의 경우 브라우저에 저장된 쿠키(cookie) 방식보다는 서버 측에  정보를 저장하여 상호 대조할  있는 세션(session) 방식 사용

 

(나) 패스워드 관리 

 

(a) 패스워드 최소 길이 제한 

 

  • 패스워드의 최소 길이를 통제할  있도록 최소 패스워드 길이 정의

 

(b) 추측 가능한 패스워드 사용 통제 

 

  • 사용자 개인 정보(주민등록번호휴대폰 번호 ) 관련된 패스워드 사용 불가
  • 사용자 ID 동일한 패스워드 사용 불가
  • 동일한 문자 또는 숫자가 반복되는 패스워드 사용 불가
  • 문자 또는 숫자만으로 구성된 패스워드 사용 불가

 

(c) 패스워드 변경  확인  보안 적용

 

  • 패스워드 변경  현재 패스워드를 확인한  변경 사항 적용

 

(d) 패스워드 파일 접근통제  암호화 저장 여부 진단

 

  • 응용프로그램에 저장된 패스워드 파일은 관리자도 알아볼  없도록 암호화된 형태 저장

 

(e) 이전 부여 패스워드 일정기간 재사용 통제 

 

  • 응용프로그램 인증시스템은 관리자가 이전에 사용했던 패스워드를 일정 기간 동안 재사용하지 못하도록 하는 기능 구현

 

(f) 패스워드 사용기간 설정 

 

  • 패스워드를 사용할  있는 최소기간을 설정하여 일정 기간이 지나면 개발자로 하여금 강제로 패스워드를 변경하도록 구현

 

(g) 인증(OTP, 생체인증, PKI) 강화 작용

 

  • 전자상거래금융 관련 서비스  특별하게 인증 강화가 필요할 경우 OTP, 생체 인증, PKI 등의 강화된 인증 기능 적용

 

(다) 개발자 계정 관리

 

(a) 추측 가능  Default 계정 사용 통제 

 

  • 애플리케이션 관리자 계정의 경우 admin, root, administrator  추측가능하거나 디폴트(default) 계정을 사용하지 않도록 구현

 

(b) 불필요한 계정에 대한 주기적 검토  삭제

 

  • 일정 기간 동안 사용하지 않는 계정에 대한 일시 사용 중지  사용 중지   휴면 계정에 대한 삭제 조치

 

(라) 데이터 보안 관리

 

(a) 주요 데이터  자료 파일 등의 DB 저장 유무

 

  • 주요 데이터를 접근통제가 수행되는 DB 저장

 

(b) 데이터의 보안등급 분류 설정

 

  • 응용프로그램에서 사용되는 데이터에 대한 보안등급 설정  보안등급에 따른 안대책 수준 구현

 

(c) 클라이언트와 서버 간의 데이터 암호화 전송 여부 

 

  • 서버와 개발자 간에 사용되는 연결  전송되는 자료의 보안성 강화를 위해 필요  암호화 전송 구현

 

(d) 암호화 Key 관리 정책

 

  • 데이터베이스에 자료 저장  암호화를 사용하였을 경우 Key 관리 정책  복구에 대한 안전성 확인

 

(마) 응용프로그램 접근제어 관리

 

(a) 개발자 그룹별 접근 권한 통제 

 

  • 응용프로그램의 개발자를 그룹별로 구분하고 접근 권한에 대한 등급을 설정하여 접근 권한 관리

 

(b) 관리자 접근 통제 

 

  • 강력한 응용프로그램 서비스 관리자의 접근 통제 실시
  • 응용프로그램 서버에서 관리자에 대한 접근 날짜접근 시간, IP 주소별로 통제 적용

 

(c) 다중 접속 권한 제한

 

  • 단일 개발자 ID 다중 온라인 세션(session) 생성 제한

 

(d) 인증절차를 우회한 접근통제 

 

  • 모든 응용프로그램 접근 방법에 대한 인증 실시

 

(e) 인가된 등급 이상의 정보에 대한 접근 통제 

 

  • 특정 수준의 정보에 대한 접근 권한을 부여받은 개발자는 해당 수준 또는  이하 정보에만 접근하도록 구현

 

(f) 개발  사용된 Sample & Backup 코드 접근 제한

 

  • 응용프로그램 개발  사용된 샘플 소스코드(sample source code)  백업코드(backup code) 등에 대한 접근 제한

 

(바) 로그 관리  접근 통제 

 

(a) 보안 등급별 로깅 설정(비밀/일반로그 관리  접근 통제를 위하여 보안 등급별 로그 방법 설정

 

  1. 로그의 중요도에 따른 분류가 가능하도록 구성
  2. 정보의 비밀등급 설정에 따라 생성수정삭제조회 기능 관리
  3. 분류정보에 따른 로그인 정보오류정보기밀정보 접근 기록은 별도 관리되도록 구현
  4. 비밀 로그정보는 기밀정보 접근기록관리자 모듈 접근 정보콘텐츠 유료 정 생성  삭제 정보상거래 수행 정보 등을 포함하도록 구현

 

(b) 보안등급별 로그 보관기간 설정 

 

  • 모든 개발자 ID 개발시스템 로그인  이용기록 저장
  • 개발자 ID, 단말 ID, 사용시간사용 정보명로그인 실패출력내역 포함

 

(c) 로그 접근 통제 

 

  1. 보안 담당자의 사전 승인이 없는 경우 응용프로그램의 로그파일에 대한 접근 제한
  2. 로그 파일에 대한 무결성 확보  백업된 로그파일은 수정이 불가능하도록 구현

 

③ 설계가 완료된 SW프로그램의 주요 취약점을 사전에 점검

 

(1) 설계가 완료된 SW프로그램의 정적 분석 실시/알려진 주요 취약점을 정적 분석을 실행하여 위험도 예측

 

(가) XSS(Cross-site scripting)

 

  • 애플리케이션이 입력물/출력물 검증 부족으로 인해 클라이언트 쪽의 악성 코드 인젝션(injection) 일어나기 쉬운 사용자가 수정 가능한 파라미터를 포함하고 있는지 여부에 대해 검토

 

(나) 인젝션(Injection)

 

  • 애플리케이션이 의도하지 않은 명령어를 수행하거나 허용되지 않은 데이터를 접근하도록 조작하는 악성 문구를 주입하는 공격에 대해 모듈을 보호하도록 애플리케이션이 클라이언트 입력 파라미터의 검증 여부 검토

 

(다) 불안전한 직접적인 객체 참조

 

  • 애플리케이션이 URL이나 형상(form) 파라미터로서 파일디렉토리데이터베이스 기록 등의 내부 이행 객체에 대한 참조를 안전하지 않은 방법의 제공 여부 검토

 

(라) 불안전한 암호 저장

 

  • 클라이언트  애플릿과 HTML 소스 코드와 같은 공개적으로 접속 가능한 정보에서 회수할  있는 민감한 암호화 상세 정보(암호화 알고리즘암호화 ) 애플리케이션이 제공하는지 여부 검토

 

(마) URL 접근 제한 실패 

 

  • 애플리케이션이 모호한 URL(obscurity)이나 위장술(obfuscation) 기반 기능의 여부 검토

 

(바) 취약한 인증  세션 관리 

 

  • 인증 사용자의 ID 추정할  있도록 인증과 세션 관리를 침해하는 공격 리스크를 최소화할  있는 인증  적절한 세션 관리의 올바른 이행 여부 검토

 

(사) 사이트  요청 위조(CSRF, Cross-site request forgery)

 

  • 애플리케이션에 특정 액션의 상세 사항을 예측하여 애플리케이션에 악의적인 요청을 위조하는 공격이 허용되 예측 가능한 파라미터의 포함 여부

 

(아) 잘못된 보안 설정 

 

  • 시스템 데이터  기능에 허가를 받지 않고 접근하여 시스템 전체가 침해되는 결과를 가져오는 공격을 방지할  있도록 애플리케이션의 적절한 설정 여부 검토

 

(자) 불충분한 전송 레이어 보호 

 

  • ⁠네트워크를 통해 전송되는 애플리케이션 데이터가 허용되지 않은 가로채기(interception)  Man-in-the middle 공격을 방지할  있도록 적절한 안전 여부 검토

 

(차) 검증되지 않은 리디렉팅(redirects)  포워드(forward)

 

  • 사용자가 악성  사이트로 리디렉팅 되는 것을 방지할  있도록 애플리케이션 페이 리디렉션  포워드를 검증할  있도록 통제 이행 여부 검토

 

(카) 애플리케이션 로직 결함 

 

  • 의도한 목적의 애플리케이션 로직이 악용되어 워크플로우나 정보를 변환 혹은 우회하거나 조작하는 결과를 가져올  있는 여부 검토

 

(파) 인증 우회 

 

  • 애플리케이션을 악용하여 보안 통제를 우회해 내부 애플리케이션 기능에 직접적으로 접근하는 공격 허용 여부 검토

 

(하) 권한부여(Authorization) 우회 

 

  • 권한 부여 메커니즘을 악용하여 악의적인 사용자가 특권을 강화해서 애플리케이션 능이나 사용자의 민감한 데이터에 비인가 접근 허용 여부 검토

 

Comments