Chimy's Program
정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 구현 본문
정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 구현
SW개발보안 구현을 위한 시큐어 코딩
- 안전한 소프트웨어를 개발하여 각종 보안 위협으로부터 예방하고 대응하고자 하며 정보시스템 개발 시 보안성을 고려하고 보안 취약점을 사전에 제거하기 위하여 시큐어 코딩 사용
① 소프트웨어 개발보안 측면의 시큐어 코딩의 목적
(1) 보안 취약점과 결함방지
- 최근 사이버 공격의 진화에 따라 사전에 정보처리시스템의 보안취약점을 사전에 대응
- SQL injection 취약점, Zero Day Attack 공격, 침입차단시스템(TMS System) 등 보안장비의 우회 등과 같은 보안 취약점을 사전에 제거하여 개발
(2) 안전한 대고객 서비스 확대
- 대부분의 대고객 서비스가 ICT신기술을 통하여 인터넷을 통해 제공
- 대고객 서비스의 보안취약점을 지속적으로 진단하여 제거에 효율적 관리 방안 마련
(3) 안정성 및 신뢰성 확보
- 대고객 서비스의 신뢰성을 기반으로 하는 안정성에 기반한 보안확보를 위해 정보시스템의 기초 단계부터 설계 개념 및 시큐어 코드의 수준에서의 대응조치를 제안하여 대고객 서비스의 보안성 강화
② 개발단계 보안을 위한 시큐어 코딩 적용방안
(1) 보안 정책의 수립
- 개발보안 가이드 작성 및 공지, 적용 의무화 사업에 대한 명확한 구분과 정책 추진 필요
(2) SW개발보안을 위한 시큐어 코딩 가이드 작성
- 사업자는 SW개발보안을 위한 적절한 개발절차와 방법을 마련하여 참여인력에게 제공하여 보안을 위한 시큐어 코딩 가이드 작성
(3) 시큐어 코딩 가이드 교육
- 참여인력에 대한 소프트웨어 개발보안 가이드 및 시큐어 코딩 교육 실시
(4) 시큐어 코딩 자동화 도구
- 개발과정에서 보안약점 진단도구를 이용하여 개발자 스스로 보안약점 진단 및 제거에 활용
SW보안을 위한 시큐어 코딩의 점검내용
① 입력데이터 검증 및 표현
- 이용자, 프로그램에서 입력되는 데이터에 대한 유효성 사전 검증체계를 갖추고 오류발생 시 처리가 가능하도록 개발 수행
- SQL삽입 : 사용자의 입력 값 등 외부 입력 값이 SQL 쿼리에 삽입되어 공격
- 자원 삽입 : 외부 입력된 값의 사전 검증이 없거나 또는 잘못 처리된 검증을 거쳐서 제공되는 시스템 자원에 접근 경로 의 정보로 이용될 때 발생
- 크로스사이트 스크립트 : 검증되지 않은 외부 입력 값에 의해 브라우저에서 악의적인 코드가 실행되는 보안약점
- 운영체제 명령어 삽입 : 운영체제(OS) 명령어 파라메터 입력 값이 적절한 사전검증을 거치지 않고 사용되어 공격자가 운영체제 명령어를 조작할 수 있는 보안약점
- 기타 : 신뢰성이 낮은 URL주소로 자동으로 접속되는 LDAP 삽입, 디렉토리 경로 조작, 연결 크로스사이트 요청 위조, XQuery 삽입, XPath 삽입, HTTP 응답분할
② 보안기능
- 보안기능(인증, 접근제어, 기밀성, 암호화, 권한 관리 등)을 적절하지 않게 구현 시 발생할 수 있는 보안약점
- 사용자 중요한 정보를 평문으로 저장/전송, 소스에 명시적으로 적 혀있는 패스워드(하드코딩), 충분하지 못한 암호화 키 길이를 사용하는 경우, 적절하지 못한 무작위 난수 값을 사용하는 경우, 내부 시스템상의 패스워드 평문 저장
- 적절한 인증 없는 중요기능 허용 : 적절하지 못한 인증 없이 중요정보(개인정보, 계좌이체 정보)를 열람/변경 가능한 보안 취약점
- 부적절한 인가 : 적절하지 못한 접근제어로 외부 입력 파라미터값이 포함된 문자열로 서버 인프라 자원에 접근/서버 실행 인가을 가능하게 하는 보안약점
- 중요한 자원에 대한 잘못된 권한설정 : 중요한 자원(프로그램 설정 값, 민감한 사용자 데이터의 노출)에 대한 적절하지 못한 접근권한을 부여되어 의도치 않게 중요정보가 노출/수정되는 보안약점
- 취약한 암호화 알고리즘 사용 : 중요한 민감성 정보(패스워드, 개인정보)의 기밀성이 취약한 암호화 알고리즘을 사용하여 정보가 노출되는 보안 취약점
③ 시간 및 상태
- 프로그램 실행 중에 동시에 수행되는 병렬 처리 시스템, 다수의 프로세스가 실행되는 환경에서 시간과 실행 상태를 부적절하게 처리되어 발생 가능한 보안 취약점
보안 약점 | 설명 |
경쟁조건 : 검사시점과 사용시점 | 다수의 멀티 프로세스 상에서 인프라 자원을 체크하는 시점과 사용되는 시점이 달라 발생하는 보안 취약점 |
제어문을 사용하지 않는 재귀함수 | 적절한 제어문 처리가 되어있지 않는 재귀함수에서 무한재귀(무한루프)가 발생하는 보안약점 |
④ 에러 처리 표현
- 에러를 처리하지 않거나 불충분하게 처리하여 에러 정보에 중요정보(시스템)가 포함될 때 발생할 수 있는 보안약점
보안 약점 | 설명 |
부적절한 오류메시지 | 개발자가 에러처리 활용을 위하여 오류정보의 출력메시지를 배포될 서비스 버전 소프트웨어에 오류메시지 또는 디버깅 메시지를 소스내에 포함시킬 때 발생하는 보안약점 |
오류 상황 대응 부재 | 시스템에서 발생되는 오류를 처리하지 못하여 프로그램 다운 등 의도하지 못하는 경우가 발생할 수 있는 보안 취약점 |
적절하지 않은 예외처리 | 예외에 대한 부적절한 처리로 인해 의도하지 않은 상황이 발생될 수 있는 보안약점 |
⑤ 코드 오류
- 프로그램의 형(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) 보안 등급별 로깅 설정(비밀/일반) 로그 관리 및 접근 통제를 위하여 보안 등급별 로그 방법 설정
- 로그의 중요도에 따른 분류가 가능하도록 구성
- 정보의 비밀등급 설정에 따라 생성, 수정, 삭제, 조회 기능 관리
- 분류정보에 따른 로그인 정보, 오류정보, 기밀정보 접근 기록은 별도 관리되도록 구현
- 비밀 로그정보는 기밀정보 접근기록, 관리자 모듈 접근 정보, 콘텐츠 유료 정보 생성 및 삭제 정보, 상거래 수행 정보 등을 포함하도록 구현
(b) 보안등급별 로그 보관기간 설정
- 모든 개발자 ID의 개발시스템 로그인 및 이용기록 저장
- 개발자 ID, 단말 ID, 사용시간, 사용 정보명, 로그인 실패, 출력내역 포함
(c) 로그 접근 통제
- 보안 담당자의 사전 승인이 없는 경우 응용프로그램의 로그파일에 대한 접근 제한
- 로그 파일에 대한 무결성 확보 및 백업된 로그파일은 수정이 불가능하도록 구현
③ 설계가 완료된 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) 우회
- 권한 부여 메커니즘을 악용하여 악의적인 사용자가 특권을 강화해서 애플리케이션 기능이나 사용자의 민감한 데이터에 비인가 접근 허용 여부 검토
'BASE' 카테고리의 다른 글
정보처리기사 실기 - 프로그래밍 언어 활용 : 변수 활용 (0) | 2020.09.11 |
---|---|
정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 테스트와 결함 관리 (0) | 2020.09.10 |
정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 환경구축 일정계획 수립 (0) | 2020.09.08 |
정보처리기사 실기 - 소프트웨어 개발 보안 구축 : SW개발보안 요구사항 명세/설계 (0) | 2020.09.05 |
정보처리기사 실기 - SQL 응용 : DCL 명령문 작성 (0) | 2020.09.04 |