인터페이스에는 다양한 보안 취약점이 존재합니다. 인터페이스를 위해 송 · 수신 시스템 사이의 데이터 통신이 일어날때 데이터 전송 내역을 엿듣는 스니핑을 이용하여 데이터를 탈취할 수 있습니다.
즉, 인터페이스에는 데이터 통신 시 데이터 탈취 위협이 있고, 데이터 통신 시 데이터 위 · 변조위협이 있을 수 있습니다. 이런 위협에서 벗어나기 위해서는 안전한 코딩 수칙을 준수해야합니다.
시큐어 코딩 가이드
위에서 말한 것과 같이 인터페이스 개발 시 보안 취약점을 방지해야만 합니다. 안전한 서비스를 만들기 위해서 개발자가 따라야하는 시큐어 코딩 가이드가 있습니다.
시큐어 코딩가이드는 7가지의 적용 범위가 존재합니다.
- 입력데이터 검증 및 표현
입력데이터 검증 및 표현은 프로그램의 입력 값에 대해서 검증이 누락되거나 부적절한 검증, 잘못된 형식 지정이 있을 경우 보안에 취약해집니다.
이를 대응하기 위해서는 검증된 사용자와 프로그램 입력 데이터에 대해 유효성 검증 체계를 수립해야합니다. 또한 잘못된 형식이 들어올 경우에 대한 처리 기능을 설계하고 구현해야 합니다.
- 보안 기능
보안기능이 부적절하게 구현되있는지도 확인해야합니다. 보안기능에는 인증과 접근제어, 기밀성, 암호화, 권한 관리 등이 들어갑니다.
보안기능에 대한 안전성을 높이기 위해서는 인증과 접근 통제가 이뤄 져야하며 권한 관리, 비밀번호 등의 정책이 적절하게 수립되고 반영되도록 프로그램을 설계하고 구현해야합니다.
- 시간 및 상태
시간 및 상태는 병렬 시스템의 경우 거의 동시에 수행 지원할 경우와 여러개의 프로세스가 동작하는 환경 등에서 시간이나 상태가 관리가 안될 경우에 생길 수 있는 문제가 있습니다.
이 문제를 해결하기 위해서 공유되고 있는 자원의 접근을 직렬화하거나 병렬 수행가능 프레임워크 사용합니다. 그 외에도 블록문을 이용하며 블록문 내부에서만 재귀함수 호출하도록 해야합니다.
- 에러 처리
에러를 처리 안하거나 불충분한 처리할 경우 에러 메시지가 나오게 되는데 이 에러 메세지에 중요 정보가 포함되면 보안에 취약해집니다.
이런 문제점을 해결하기 위해서 에러 상황을 최대한 없애고 불충분하게 처리되어 중요 정보 유출되는 약점이 발생하지 않도록 에러 메세지를 숨기는 프로그램을 구현해야합니다.
- 코드 오류
코드오류는 그저 개발자가 만들어 내는 코딩에 대한 오류를 말합니다.
이 경우 코딩 규칙을 도출 하고 검증 가능한 스크립트를 구성합니다. 또한 경고 순위를 최상향으로 조정한 뒤 경고 메시지 코드를 제거해서 막습니다.
- 캡슐화
캡슐화에서 생기는 문제점은 기능성이 불충분한 캡슐화에서 발생합니다. 이 경우 숨겨야하는 데이터도 사용자에게 노출 됩니다.
이를 막기 위해서는 디버거 코드 제거해야하며 필수 정보 외에도 클래스 내의 프라이빗 접근자를 지정해야합니다.
- API 오용
API의 의도에 맞지 않는 방법으로 사용하거나 보안에 취약하도록 만들어진 API사용한 경우도 위협에 노출됩니다.
이를 막기 위해 개발 언어별로 취약 API 확보하고 취약 API 검출 프로그램 사용해야합니다.
데이터베이스 보안 적용
데이터베이스의 기밀성을 유지하기 위해서는 인터페이스에 활용되는 중요 데이터에 보안 요구사항을 적용해야합니다.
데이터베이스 암호화 알고리즘에는 대칭 키 암호화 알고리즘, 비대칭 키 암호화 알고리즘, 해시 암호화 알고리즘이 있습니다.
첫번째로 대칭 키 암호화 알고리즘은 암호화 알고리즘의 한 종류로 암 · 복호화에 사용되는 암호가 같은 알고리즘입니다.
ARIA 128/192/256과 SEED 등이 암 · 복호화에 같은 키를 사용하는 대칭 키 암호화 알고리즘입니다.
두번째로 비대칭 키 암호화 알고리즘입니다. 비대칭 키 암호화 알고리즘은 모두에게 공개되어 있는 공개키와 이와 대응되는 소유자만 알수 있는 비밀키를 사용하는 암 · 복호화키가 다른 알고리즘 입니다.
RSA, ECC, ECDSA 등이 비대칭 키 암호화 알고리즘의 대표적인 예 입니다.
마지막 암호화 알고리즘은 해시 암호화 알고리즘입니다. 해시값을 이용해 원래의 입력값을 찾아낼수 없도록 만든 일방향성의 특성을 가진 알고리즘입니다.
대표적인 예로는 SHA-256/384/512, HAS-160 등이 있습니다.
데이터베이스 암호화 기법으로는 API 방식, Plug-In 방식, Hybrid 방식이 있습니다.
- API 방식은 애플리케이션 레벨에서 암호 모듈 API를 적용하는 방식입니다. 암호화는 가능하지만 이 방법을 이용하게 되면 애플리케이션 서버에 암 · 복호화와 정책 관리, 키 관리 등에서 부하가 발생합니다.
- Plug-In 방식은 DB레벨의 확장성과 프로시저 기능을 이용해 DBMS에 Plug-In 모듈로 동작하는 방식입니다. 그러나 이 방식도 DB서버에 암 · 복호화와 정책 관리, 키 관리 등에서 부하가 발생합니다.
- Hybrid 방식은 API 방식과 Plug-In 방식을 결합시킨 방법입니다. 두 방식 모두 부하가 발생하므로 Hybrid방식을 통해서 DB서버와 애플리케이션 서버로 부하를 분산시켜 단독으로 사용했을 때보다 안정적입니다.
인터페이스 구현 검증
인터페이스의 세부 기능을 기능 단위로 테스트하는 단위 테스트와 전체 인터페이스 흐름을 확인하는 시나리오를 통한 통합 테스트를 통해서 인터페이스 구현 검증을 할수 있습니다.
구현 검증을 확인하기 위해서 인터페이스 구현 검증 도구를 이용하면 테스트의 효율성을 높일 수있습니다. 인터페이스 구현 검증 도구는 구현되어 있는 인터페이스의 동작을 검증하는 도구입니다. 인터페이스 구현 및 감시 도구를 통해서 인터페이스 동작 상태를 검증하며 모니터링합니다.
인터페이스 구현 검증 도구에 대해 자세히 알아보겠습니다.
처음으로 소개할 구현 검증 도구는 xUnit입니다. xUnit은 자바(Junit), C++(Cppunit), .Net(Nunit) 등 다양한 언어를 지원하는 단위테스트 프레임워크입니다.
소프트웨어의 함수나 클래스 같이 서로 다른 구성 단위를 테스트 할 수 있게 해주는 도구입니다.
다음은 STAF입니다. STAF는 서비스 호출과 컴포넌트 재사용 등 다양한 환경을 지원하고 있는 테스트 프레임워크입니다.
각 테스트 대상 분산 환경에서 데몬을 사용하여 테스트 프로그램을 통해서 테스트 후 통합과 자동화를 진행하는 검증도구입니다.
FitNesse는 웹 기반 테스트 케이스의 설계,실행와 결과 확인 등을 지원하는 테스트 프레임워크입니다.
사용자가 테스트 케이스 테이블을 작성하면 별다른 동작없이도 빠르고 편하게 원하는 값을 테스트 할 수 있다는 장점이 있습니다.
다음은 Selenium입니다. Selenium은 다양한 브라우저 지원 및 개발언어를 지원하는 웹 애플리케이션 테스트 프레임워크입니다. 테스트 스크립트 언어를 학습안해도 되는 기능 테스트를 위한 도구를 제공합니다.
마지막으로 소개할 구현 검증 도구는 watir입니다. 루비(Ruby)기반의 웹 애플리케이션 테스트 프레임워크로 모든 언어 기반의 웹 애플리케이션 테스트와 브라우저 호환성 테스팅 가능하다는 특징을 가지고 있습니다.
'공부' 카테고리의 다른 글
정보처리기사 PART 6 정리 - UI 표준과 지침, 화면설계 (0) | 2021.04.21 |
---|---|
정보처리기사 PART 6 정리 - UI 요구사항과 설계 원칙 (0) | 2021.04.19 |
정보처리기사 PART 5 정리 - 인터페이스 설계서와 EAI, ESB (0) | 2021.04.18 |
정보처리기사 PART 4 정리 - 모듈 (0) | 2021.04.18 |
정보처리기사 PART 4 정리 - 개발환경 구축 (0) | 2021.04.18 |