본문 바로가기
정보처리기사

[실기] 제 9과목 - 소프트웨어 개발 보안 구축 요점 정리

by 3.14pie 2023. 5. 7.

소프트웨어 보안 취약점 - 해킹 등 실제 침해사고에 이용될 수 있는 외부에 노출된 보안약점, CVE (Common Vulnerability Exposure)

 

모의 해킹 - 작동하는 시스템을 대상으로 수행하는 동적 검증을 통해 보안 취약점을 확인하는 보안품질 관리활동

 

소프트웨어 보안 약점 - 보안 취약점의 근본 원인이 되는 소프트웨어의 결함이나 버그, CWE (Common Weakness Exposure)

 

입력 데이터 검증 및 표현 - DBMS 조회 및 결과 검증, 시스템 자원 접근 및 명령어 수행 입력값 검증, 웹 서비스 요청 및 결과 검증, 웹 기반 중요 기능 수행 요청 유효값 검증, HTTP 프로토콜 유효성 검증, 허용된 범위 내 메모리 접근, 보안 기능 동작에 사용되는 입력값 검증, 업/다운로드 파일 검증

 

보안 기능 - 인증 대상 및 방식, 인증 수행 제한, 비밀번호 관리, 중요 자원 접근통제, 암호키 관리, 암호 연산, 중요 정보 저장, 중요 정보 전송

 

에러 처리 및 세션 통제 - 예외 처리, 세션 통제

 

입력 데이터 검증 및 표현

   - SQL Injection : 입력 변수 정적 바인딩

   - 경로 조작 및 자원 삽입 : 입력값 검증, 경로 순회 특수문자 제거

   - XSS : 특수문자 치환, HTML 인코딩 -> 스크립트 실행 차단

   - 운영체제 명령어 삽입 : 미리 명령어 목록 생성 후 선택 유도

   - 신뢰되지 않은 URL 자동 접속 연결 : 허용목록 지정, 외부 URL 확인

   - CSRF : POST 사용, 토큰 사용, 캡챠 및 사용자 재인증

   - 정수형 오버플로우 : 정수타입 범위 확인, 결과값 범위 확인

   - 보안기능 결정에 사용되는 부적절한 입력값 : 중요 정보 서버 저장, 서버 수행, 외부 입력값에 의존하지 않는 구조

   - 메모리 버퍼 오버플로우 : 적절한 크기의 버퍼 크기 설정, fgets(), strcpy_s() 사용

 

보안 기능

   - 인증 및 비밀번호 관련 : 인증, 재인증, 잠금, 추가 인증, 비밀번호 변경 관리 기준

   - 권한관리 관련 : 사용자 권한 확인, 최소 권한 부여

   - 암호연산 관련 : AES, ARIA.. 사용, 최소 128비트 이상 키 사용, 암호화키 별도 공간, 암호화 SEED 적용 가능한 함수 사용, 솔트 및 해시 사용

   - 중요정보 처리 관련 : 중요 정보 암호화, 전송 시 암호화 과정, SSL 인증서 기반 암호화, 영속 쿠키에 중요 정보 저장 X

   - 기타 : 주석에 중요 정보 입력 X, 별도 파일에 암호화 저장, 암호화로 변조 방지, 무결성 검사

 

시간 및 상태

   - 경쟁조건 : 동일 자원에 대한 검사 시점과 사용 시점이 달리 동기화 오류, 교착상태 유발, 한번에 하나만 처리하도록 설정

   - 종료되지 않은 반복문, 재귀함수 : 무한 루프에 빠져 자원 고갈, 정상적인 서비스 제공 X, 종료 조건 정의, 흐름 검정

 

에러 처리

   - 오류 메시지를 통한 정보 노출 : 예외 상황은 내부적으로 처리, 사용자에게는 민감정보를 포함한 오류 정보 제공 X, 미리 정의된 메시지 전달

   - 오류 상황 대응 부재 : 예외 처리를 구현하지 않을 경우, if, switch, try-catch 구문을 사용해 예외 처리 구현

   - 부적절한 예외 처리 : 예외 조건 검사 X, 결과값 적정성 검증, 구체적인 예외처리

 

코드 오류

   - NULL 포인터 역참조 : 의도적으로 객체가 NULL인 상황 유발, 레퍼런스 참조 전 NULL인지 검사

   - 부적절한 자원 해제 : 유한한 자원을 할당 받아 사용 후 오류나 에러로 사용이 끝난 자원을 반환하지 못할 경우, 자원 사용 후에는 반드시 반환

   - 해제된 자원 사용 : 해제한 메모리 사용으로 예상치 못한 값, 코드 실행, 해제 후에는 다시 접근하지 못하도록 포인터에 NULL값을 저장해 사용 X

   - 초기화되지 않은 변수 사용 : 지역 변수 초기화 없이 임의값으로 사용되는 경우, 사용 전 초기화

 

캡슐화

   - 잘못된 세션에 의한 정보 노출 : 싱글턴 객체에 포함되는 멤버 변수가 전역범위로 공유, Java 서블릿은 서로 다른 세션 간 데이터 공유, 싱글턴 패턴 사용 시 변수 적용 범위 주의, Java, HttpServlet의 하위 클래스에서 멤버 변수 사용 X

   - 제거되지 않고 남은 디버그 코드 : 남아 있는 경우, 민감정보, 제어정보 노출, 반드시 디버그 코드 확인 및 삭제

   - 시스템 데이터 정보 노출 : 내부 데이터 노출, 예외상황 시 내부 정보 화면 출력 X

   - Public 메서드에서 반환된 Private 배열 : 배열 주소값이 외부에 공개되어 배열 수정 가능, 반환하지 않도록 하고, 필요시 복제본 반환, 별도의 Public 메서드 선언

   - Private 배열에 Public 데이터 할당 : Private 배열을 외부에서 접근 가능, Public 데이터가 Private 배열에 저장 X

 

API 오용

   - DNS Lookup에 의존한 보안 결정 : 도메인명에 의존 시 DNS 변호할 경우 보안결정 우회 가능성 증가, DNS Lokkup 도메인명 대신 IP 주소 사용

   - 취약한 API 사용 : 안전한 함수 사용

 

모바일 앱 주요 보안 요구사항

   - 탈옥 및 루팅 기기 대응

   - 앱 무결성 검증

   - 앱 난독화 적용

   - ShareUseID 설정 방지

   - SSL-Pinning

   - 앱에 대한 외부로부터의 접근 방지

   - 중요 정보 노출 방지