Clean & Blue 자세히보기

전공/정보처리기사 실기

정보처리기사 실기 - 8. 소프트웨어 개발 보안 구축(3) /보안기능/에러처리/모바일앱/보안테스트

_청렴 2021. 5. 3. 15:35
반응형

- 보안기능

- 인증 및 비밀번호 관련 보안 약점

  • 적절한 인증 없는 중요 기능 허용
  • 반복된 인증 시도 제한 기능 부제
  • 취약한 비밀번호 허용

 

- 권한 관리 관련 보안 약점

  • 부적절한 인가
  • 중요한 자원에 대한 잘못된 권한 설정

 

- 암호 연산 관련 보안 약점

  • 취약한 암호화 알고리즘 사용 -> AES, SEED, ARIA 등 사용
  • 충분하지 않은 키 길이 사용 -> RSA는 최소 2048비트, 대칭키는 최소 128비트 이상
  • 하드코드된 암호화 키 -> 코드 내부에 암호화 키 하드 코딩 x
  • 적절하지 않은 난수 값 사용 -> Seed 적용 가능 함수 사용
  • 솔트 없이 일방향 해시 함수 사용

 

- 중요 정보 처리 관련 보안 약점

  • 중요 정보 평문 저장
  • 중요 정보 평문 전송
  • 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 -> 영속 쿠키에는 사용자 권한 등급, 세션 ID 등 중요정보 포함 X

 

- 보안 기능의 기타 보안 약점

  • 주석 문 안에 포함된 시스템 주요 정보
  • 하드코드된 비밀번호
  • 무결성 검사 없는 코드 다운로드 -> 코드 전송 시 암호화, 체크섬 검사 등

 

- 시간 및 상태

- 경쟁 조건 : 검사 시점과 사용 시점 (TOCTOU, Time of Check, Time of use)

-> 동일 자원에 대한 검사 시점과 사용 시점이 달라 동기화 오류뿐만 아니라 교착상태 등과 같은 문제점 유발

-> 공유 자원을 여러 프로세스가 접근하여 사용할 경우, 동기화 구문을 사용하여 한번에 하나의 프로세스만 접근하여 처리하도록, 성능 영향의 최소화를 위해 임계코드 주변만 동기화 구문을 사용

 

- 종료되지 않은 반복문 또는 재귀함수

종료 조건이 없는 재귀함수나 종료 되지 않는 for, while 등 반복문이 사용될 경우 무한 루프에 빠져 자원 고갈을 유발 시킴

-> 종료 조건(귀납 조건, Base Condition)을 정의

 

- 에러 처리

- 오류 메세지를 통한 정보 노출

민감한 정보가 오류 메세지를 통해 외부에 노출되는 보안 약점

-> 예외 상황은 내부적으로 처리, 민감한 정보를 포함하는 오류를 노출하지 않도록 미리 정의된 메세지 제공

 

- 오류 상황 대응 부재

오류가 발생할 수 있는 부분에 대해 예외처리를 구현하지 않을 경우 공격자에 의도하지 않은 프로그램 동작을 유발할 수 있는 보안 약점

-> C/C++ 에서의 if 나 switch, Java 에서의 try-catch 구문을 이용

 

- 부적절한 예외처리

예외 상황에 대한 조건을 적절하게 검사하지 않은 경우

-> 함수의 결과값에 대한 적정성 검증, 광범위한 예외 처리 대신 구체적인 예외 처리 수행

 

- 코드 오류

- 널 포인터 역참조

객체가 널(NULL)이 될 수 없다는 전제로 구현된 코드에서 공격자가 의도적으로 객체가 널인 상황 유발

-> 널이 될 수 있는 레퍼런스는 참조하기 전에 널 값인지 검사

 

- 부적절한 자원 해제

열린 파일 디스크럽터, 힙, 소켓 등의 유한한 자원을 할당받아 사용한 후 프로그램 오류 또는 에러로 인해 사용이 끝난 자원을 반환하지 못하는 경우

-> 반드시 자원을 해제하여 반환

 

- 해제된 자원 사용

해제한 메모리를 참조함으로써 예상치 못한 값 또는 코드를 실행하게 되어 의도하지 않을 결과과 발생

-> 메모리 해제 후 포인터에 널 값등을 저장하여 의도하지 않은 코드의 실행 방지

 

- 초기화되지 않은 변수 사용

C언어에서 함수 내 지역변수를 초기화하지 않고 사용할 경우 임의 값을 사용하게 되어 의도하지 않은 결과를 유발

-> 사용 전 초기값 할당

 

 

- 캡슐화

- 잘못된 세션에 의한 데이터 정보 노출

싱글톤 객체에 포함되는 멤버변수는 전역 범위로 공유 되고 멀티 스레드 환경인 Java 서블릿의 경우 서로 다른 세션간에 데이터가 공유 될 수 있는 보안 약점

 

- 제거되지 않고 남은 디버그 코드

 

- 시스템 데이터 정보 노출

 

- Public 메서드로부터 반환된 Private 배열 -> 배열 주소값이 외부 공개됨

 

- private 배열에 Public 데이터 할당 -> Public 으로 선언된 데이터 또는 메서드의 파라미터를 Private 배열에 저장하면, private 배열을 외부에서 접근 할 수 있게 되는 보안약점

 

- API 오용

- DNS Lookup에 의존한 보안 결정

-> 공격자가 DNS 정보를 변조할 경우 보안 결정을 우회할 수 있게 되는 보안 약점 -> IP 주소 사용

 

- 취약한 API 사용

 

- 모바일 앱 보안

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

 

- 탈옥(Jail break) 및 루팅 기기 대응

 

- 앱 무결성 검증 -> 앱 위변조 탐지 기능 추가

 

- 앱 난독화 적용 

난독화(Obfuscation)는 작성된 코드를 분석하기 어렵도록 하여 역공학이나 디컴파일 공격에 대비할 수 있는 기술

 

- ShareUserId 설정 방지

안드로이드 환경에서는 설치되는 앱마다 UserID를 할당

-> 동일한 개발자가 개발하여 배포한 앱인 경우, 같은 키로 서명된 앱들간에 UID를 공유할 수 있음

-> 데이터 공유가 필요하지 않음에도 불구하고 sharedUserId 설정을 통하여 공유하게 되면 데이터의 유출이나 부적절한 접근의 위협에 노출될 수 있음

-> Androidmanifest.xml 파일 내 manifest 태그의 android:sharedUserId 속성 제거

 

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

AndroidManifest.xml 파일에 android:exported = "true"로 설정되어 있는 컴포넌트는 외부에서 해당 컴포넌트에 인텐트를 전달하여 활성화 시킬 수 있는데 이 경우 해당 컴포넌트가 원래 의도하지 않았던 상황에서 실행됨

-> 인텐트를 라우팅하는 리졸버(resolver) 액티비티를 통하여 system 레벨 사용자 권한으로 송신자의 ID가 바뀌어 전송되므로 보안 침해 위협

-> android:exported = "false" 설정 혹은 제거

 

- SSL Pinning

악의적 wifi 공유기를 이용한 중간자 공격

-> 서버측 유효 인증서를 모바일 앱에 설정(Pinning)하여 유효하지 않은 인증서를 사용하는 중간자 공격 차단

-> 유효하지 않은 SSL 인증서에 대한 처리 기능(경고 혹은 앱 종료 등)을 구현

 

 

•소프트웨어 보안 테스트

- 화이트박스 보안 테스트 

소프트웨어 설계 및 구현 방법에 대한 지식을 기반으로 소프트웨어를 실행하지 않은 상태에서 수행하는 정적 분석 방법 -> 소프트웨어 보안 약점 진단

-> 사전에 개발자가 보안 결함을 수정 가능하나 서드 파티 컴포넌트나 서비스, 라이브러리 등에 적용이 불가능

 

- 블랙박스 보안 테스트

사전지식이 전혀 없고 내부 구조를 고려하지 않은 상태에서 입력에 따른 행위를 분석하기 위해 소프트웨어를 실행하여 테스트하는 동적 분석 방법 -> 모의 해킹 혹은 침투 테스트

-> 취약점이 실제로 존재하는지 소스코드 없이 검증 가능하나 정확한 보안 약점의 원인 발견이 어려우며, 검증 수행자의 역량 편차에 따라 테스트 커버리지가 달라짐

 

- 소프트웨어 정적 보안 검증

정적 보안 검증 단계
정적 보안 검증 단계

 

- 소프트웨어 동적 보안 검증

동적 보안 검증 단계
동적 보안 검증 단계

 

•그 외 알면 좋은 것

* AE : 인증교환

* Anti-Debugging

* APT : 지능형 타깃 지속 공격

* Drive by Download : 악성코드 자동다운

* BlockChain

* Bread Crumbs : 자신들의 자취

* CAPTCHA

* Dark Data : 사용하지 않는 대량 데이터

* Digital Forensics : 디지털 포렌식

* DLP : 데이터 유출 방지

* DoS : 서비스 거부 공격

* Exploit : DoS, 취약점 악용

* Hadoop : PC로 가상화된 거대 저장 장치

* HoneyPot : 해킹 유도 후 예방책 마련

* INDECS : 디지털 콘텐츠 저작권 보호 프레임워크

* kill switch : 기기분실시 원격 정지

* Land Attack : DoS, 패킷 출발지, 도착지 IP주소 동일

* OWASP : 웹 취약점 발표 단체

* Ping of Death : Ping을 이용한 DoS

* SYN Flooding : 수만개의 SYN 패킷, DoS

* Spoofing : IP 주소 변조 후 추적 회피

* Switch Jamming : 주소 테이블 용량이 넘치도록

* TearDrop : IP패킷, 일련번호 어긋나게

* Trap Door : 백도어 같은거

* DRM : 온라인 컨텐츠 저작권 관리 기술

* tripwire : 백도어, 설정 파일 분석 도구

* Smishing

* Trojan Horse

* Smurfing : IP, ICMP 특성 악용, DoS

 

 

정보처리기사 실기 - 9. 프로그래밍 언어 활용(1) /기본문법/변수명명법/절차적언어

1) 기본 문법 활용 - 데이터 타입의 길이 - Java short - 2byte long - 8byte char - 2byte - Python long - 무제한 float - 8byte - C# long - 8byte char - 2byte decimal - 16byte(실수형) - 변수 - 변수 명명..

aapslie94.tistory.com