🔐 소프트웨어 개발 보안 구축 #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
반응형