🔐 소프트웨어 개발 보안 구축 #8 - 캡슐화
2020. 7. 14. 16:22ㆍ컴퓨터언어/소프트웨어공학
728x90
반응형
👍 캡슐화란?
정보은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생할 수 있는 문제를 예방하기 위한 보안점검항목
데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것을 의미한다.
다음은 잘못된 캡슐화로 인해 발생할 수 있는 보안약점이다.
잘못된 세션에 의한 정보 노출 *분석/설계단계에서는 세션통제, 구현단계에서는 캡슐화에 해당 |
❗️ 다중스레드 환경에서 멤버변수에 정보를 저장할 때 발생함. ❗️ 싱글톤패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나 멤버변수의 정보가 노출될 수 있음. ✅ 멤버변수(클래스가 생성되면 계속 메모리에 적재)보다 지역변수(함수의 종료를 함께 메모리에서 해제가능)활용하여 변수의 범위를 제한함으로써 방지 |
제거되지 않고 남은 디버그 코드 | ❗️ 개발 중에 버그 수정이나 결과값 확인을 위해 남겨둔 코드는 공격자가 악용할 수 있음 ✅ 소프트웨어를 배포하기 전에 코드검사를 통해 남아있는 디버그 코드를 삭제함으로써 방지 |
시스템 데이터 정보 노출 | ❗️ 시스템의 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩했을 때 발생하는 보안 약점 ✅ 시스템 메시지를 통해 노출되는 메시지는 최소한의 정보만을 제공함으로써 방지 |
Public 메소드에서 반환된 Private 배열 | ❗️ 외부에서 접근할 수 없도록 만든 배열이, 공개된 메소드에서 반환되는 바람에 배열의 주소가 공개되는 현상 ✅ Private 배열을 별도 메소드로 조작하거나, 동일한 형태의 복제본으로 반환받고 값을 전달함으로써 메모리 주소를 공개하지 않도록 함 |
Private 배열에 Public 데이터 할당 | ❗️ Private 배열에 Public으로 선언된 데이터 또는 메소드의 파라미터를 저장하면 Private 배열을 외부에서 접근할 수 있게 되는 현상 ✅ Public으로 선언된 데이터를 Private 배열에 저장할 때, 레퍼런스가 아니라 값을 직접 저장함으로써 방지 ex int A=10일 때, int B=A가 아닌, int B=10으로 선언해야 B에 A의 메모리 주소가 담기지 않는다. |
👊 접근지정자
프로그래밍 언어에서 특정 개체를 선언할 때 외부로부터의 접근을 제한하기 위해 사용되는 예약어를 "접근지정자"라고 한다.
다음은 각 접근지정자가 접근할 수 있는 범위이다.
접근지정자 | 클래스 내부 | 패키지 내부 | 하위 클래스 | 패키지 외부 |
Public | O | O | O | X |
Default | O | O | X | X |
Private | O | X | X | X |
728x90
반응형
'컴퓨터언어 > 소프트웨어공학' 카테고리의 다른 글
🔐 소프트웨어 개발 보안 구축 #10 - 시간 및 상태 (0) | 2020.07.14 |
---|---|
🔐 소프트웨어 개발 보안 구축 #9 - API 오용 (0) | 2020.07.14 |
🔐 소프트웨어 개발 보안 구축 #7 - 코드오류 (0) | 2020.07.14 |
🔐 소프트웨어 개발 보안 구축 #6 - 암호 알고리즘 (0) | 2020.07.14 |
🔐 소프트웨어 개발 보안 구축 #5 - 세션통제 (0) | 2020.07.14 |