현행 시스템 분석
현행 시스템 파악 절차
1단계 : 구성/기능/인터페이스 파악
2단계 : 아키텍쳐 및 소프트웨어 구성 파악
3단계 : 하드웨어 및 네트워크 구성 파악
소프트웨어 아키텍쳐 4+1 뷰
유논프구배
유스케이스 뷰, 논리 뷰, 프로세스 뷰, 구현 뷰, 배포 뷰
디자인 패턴
생성 패턴
생빌 프로 팩앱싱
- Builder : 복잡한 인스턴스를 조립하여 만드는 구조, 생성과 구현 방법을 분리
- Prototype : 프로토타입을 만들어 복사해 사용
- Factory Method : 상위 클래스에서 인터페이스 정의, 하위 클래스에서 인스턴스 생성
- Abstract Factory : 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스 제공
- Singleton : 한 클래스에 한 객체만 존재, 전역 변수 사용하지 않고 하나의 객체만 생성
구조 패턴
구 브데 퍼플 프록 컴 어
- Bridge : 기능 클래스 계층과 구현 클래스 계층을 연결, 추상화된 부분까지 변경 시 활용
- Decorator : 기존 구현 클래스에 필요한 기능을 추가해 나가는 패턴
- Facade : 복잡한 시스템에 단순한 인터페이스 제공, 시스템 구조 파악 용이, 통합 인터페이스 제공
- Flyweight : 클래스의 경량화, 여러 개의 가상 인스턴스 제공하여 메모리 절약
- Proxy : 실제 객체에 대한 접근 이전에 필요한 행동 가능, 정보은닉, 특정 객체로의 접근 제어
- Composite : 객체 관계를 트리구조로, 단일 객체와 복합 객체 동일하게 다룸
- Adapter : 기존의 클래스 재사용 하도록 중간에 맞춰주는 역할 하는 인터페이스를 만듬
행위 패턴
행 미인이 템옵 스테 비커 스트 메체
- Mediator : 중재자에게 요구하여 통신 빈도수 낮춤
- Interpreter : 여러 형태의 언어 구문 해석 가능, 문법 자체를 캡슐화
- Iterator : 내부 구조를 노출하지 않고, 순차적 접근 가능
- Template Method : 전체 일을 수행하는 구조는 바뀌지 않고 특정 단계에서 수행하는 내역을 바꿈, 상위 작업의 구조를 바꾸지 않으면서 서브 클래스로 작업의 일부분 수행
- Observer : 객체에 의존하는 다른 객체들에 연락이 감. 일대 다의 의존성
- State : 객체 상태를 캡슐화하여 클래스화함 그것을 참조
- Visitor : 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스가 각 클래스를 돌아다님
- Command : 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계, 캡슐화
- Strategy : 알고리즘 군 정의 후 캡슐화하여 필요할 때 교환하며 사용
- Memento : 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인, Undo
- Chain of Responsibility : 하드코딩 되어 있는 기능 처리 연결 불가능을 동적 연결 경우로 처리 될 수 있게 함
개발환경 구축
형상관리
소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
소프트웨어 형관 관리 도구 유형
공클분
- 공유 폴더 방식
- RCS : 소스 파일의 수정을 한 사람만으로 제한, 파일 잠금 방식
- SCCS
- 클라이언트/서버 방식
- CVS : 서버와 클라이언트로 구성, 다수의 인원이 동시에 범용적인 운영체제 접근 가능
- SVN : 하나의 서버에서 소스 관리, 저장소에 소스 저장
- 분산 저장소 방식
- Bitkeeper : SVN과 비슷, 대규모 프로젝트에서 빠른 속도 낼 수 있게
- Clear Case : 복수 서버, 복수 클라이언트 구조, 확장성
공통 모듈 구현
공통 모듈 구현
모듈의 독립성은 결합도가 약할수록, 응집도가 강할수록 높다.
응집도의 유형
우논시절 통순기
- 우연적 응집도 : 연관이 없음
- 논리적 응집도 : 유사한 성격, 특정 형태 처리 요소들이 한 모듈 안에서
- 시간적 응집도 : 특정 시간에 처리되어야 하는
- 절차적 응집도 : 다수의 관련 기능을 가질 때 기능을 순차적으로 수행할 경우
- 통신적 응집도 : 동일한 입력과 출력
- 순차적 응집도 : 한 활동에서 나온 출력값을 다른 활동이 사용
- 기능적 응집도 : 모듈 내부 모든 기능이 단일한 목적을 위해 수행
결합도의 유형
내공 외제 스자
- 내용 결합도 : 모듈 내부의 변수나 기능을 다른 모듈에서 사용, 다른 모듈의 내용을 참조할 때
- 공통 결합도 : 모듈 밖의 전역 변수 참조, 전역 변수 갱신, 공유되는 공통 데이터 영역
- 외부 결합도 : 외부의 데이터 포맷, 프로토콜, 인터페이스 등 공유, 외부 모듈에서 선언한 데이터를 참조
- 제어 결합도 : 다른 모듈의 내부 논리 조직을 제어하기 위해 제어 신호 통신, 권리 전도 현상
- 스탬프 결합도 : 배열, 객체, 구조 등이 전달, 동일한 자료 구조를 조회, 어떤 변화가 모든 모듈에 영향
- 자료 결합도 : 인터페이스로 전달되는 파라미터로만 상호작용, 다른 모듈에는 영향 없음
팬인 팬아웃
팬인(Fan-in) : 어떤 모듈을 제어하는 모듈의 수, 모듈에 들어오면 +1
팬아웃(Fan-out) : 어떤 모듈에 의해 제어 되는 모듈의 수, 모듈에서 나가면 +1
소프트웨어 개발 보안 설계
소프트웨어 개발 보안 설계
SW 개발 보안의 3대 요소
- 기밀성 : 인가되지 않은 개인, 시스템의 접근 차단
- 무결성 : 정당한 방법을 거치지 않으면 데이터 변경 불가
- 가용성 : 권한을 가진 사용자는 서비스를 지속 사용 가능
공격 기법
-
DOS : 시스템의 자원을 부족하게 하는 공격, 수많은 접속 시도, 직접 공격
- SYN 플러딩 : TCP 프로토콜의 구조적인 문제를 이용
- UDP 플러딩 : 대량의 UDP 패킷 보냄, ICMP 패킷은 변조되어 대기상태
- 스머프, 스머핑 : 직접 브로드캐스팅하여 마비, 바운스라는 제3의 사이트 이용
- 죽음의 핑(Ping of Death) : ICMP 패킷을 아주 크게 만들어 전송
- 랜드 어택 : 출발지와 목적지 IP를 같은 패킷 주소로 만들어 보냄
- 티어 드롭 : 잘못된 Fragment Offset 정보
- 봉크, 보잉크 : 프로토콜의 오류 제어를 이용한 공격(같은 시퀀스 번호, 일정 간격으로 빈공간)
-
DDOS : DOS의 또다른 형태, 여러 대의 공격자, 공격을 지시함
-
세션 하이재킹 : TCP의 세션 관리 취약점을 이용한 기법
-
애플리케이션 공격
- HTTP GET 플러딩
- Slowloris : 개행 문자열 전송 안함
- RUDY : 헤더를 크게, 바디를 매우 소량
- Slow HTTP Read DoS : TCP 윈도 크기와 데이터 처리율 감소
- Hulk DoS : URL을 지속적으로 변경하여 다량의 GET 요청
- Hash DoS : 다수의 해쉬 충돌을 발생
-
네트워크 공격
- 스니핑 : 직접 공격 X, 데이터만 몰래 들여다 봄
- 네트워크 스캐너, 스니퍼 : 공격자가 취약점을 탐색하는 도구
- IP 스푸핑 : 인증된 시스템 처럼 속임, 인증된 IP 어드레스로 위조
- ARP 스푸핑 : 인증된 MAC 주소로 위조, 특정 호스트의 MAC 주소를 통해 스니핑
- ICMP Redirect 공격 : 또 다른 라우터라고 알리면서 패킷의 흐름 바꿈
- 트로이 목마 : 겉보기에는 정상, 실행하면 악성코드
-
시스템 보안 위협
- 버퍼 오버플로우 : 할당된 버퍼를 초과하는 데이터 입력하여 프로세스 흐름 바꿈
- 백도어 : 정상적인 인증 절차를 우회
- 공격기법
- 포맷 스트링 공격
- 레이스 컨디션 공격 : 공유자원을 공시에 접근할 때 비정상 결과 도출, 임시 파일을 심볼릭 링크
- 키로거 공격 : 키보드 움직임을 탐지
- 루트킷 : 차후 침입을 위한 준비, 불법 해킹에 사용되는 기능 제공하는 프로그램 모음
-
보안 관련 용어
- 스피어피싱 : 사회 공학의 한 기법, 일반적인 메일처럼 위장
- 스미싱 : SMS + 피싱
- 큐싱 : QR 코드 + 피싱
- 봇넷 : 악의적인 의도로 사용될 수 있는 다수의 컴퓨터들이 네트워크로 연결되어 있는 것
- APT 공격 : 특정 타깃 목표, 다양한 수단으로 지속적, 지능적 공격
- 공급망 공격 : 소프트웨어 개발사의 네트워크에 침투
- 제로데이 공격 : 보안 취약점 공개되기 이전에 공격
- 웜 : 스스로를 복제하여 전파하는 악성 컴퓨터 프로그램, 독자적으로 실행
- 악성 봇 : 스스로 실행 불가, 해커의 명령에 의해 원격에서 제어, 좀비 PC
- 사이버 킬체인 : 록히드 마틴, APT 공격 방어 분석 모델
- 랜섬웨어 : 파일들을 암호화, 인질로 잡고 몸값 요구
- 이블 트윈 공격 : 핫스팟에 연결한 사용자들 정보 탈취
서버 인증, 접근 통제
- 인증 기술 유형
지소생특
- 지식 기반 인증 : 사용자가 기억, ID, PW
- 소지 기반 인증 : 소지하고 있는, 공인인증서, OTP
- 생체 기반 인증 : 생체 정보, 홍채, 정맥 등
- 특징 기반 인증 : 사용자의 특징, 발걸음, 서명 등
- 서버 접근 통제 기법
- Identification(식별)
- Authentication(인증)
- Authorization(인가)
- Accountability(책임추적성)
- 서버 접근 통제의 유형
- 임의적 접근 통제 (DAC) : 주체나 그룹의 신분에 근거, 신분 기반
- 강제적 접근 통제 (MAC) : 주체가 갖는 접근 허가 권한에 근거, 규칙 기반
- 역할 기반 접근 통제 (RBAC) : 조직 내 맡은 역할게 기초
- 3A : 체계적인 정보보호 기술
- Authentication (인증) : 가입자, 단말에 대한 식별 및 신분 검증
- Authorization (권한 부여) : 권한과 서비스 허용
- Accounting (계정 관리) : 리소스 사용에 대한 정보 수집 및 관리 서비스
- 접근 통제 보호 모델
- 벨-라파듈라 모델(BLP) : 국방부 지원 보안 모델, 기밀성 강조
- 비바 모델 : BLP를 보완한 무결성 보장 최초 모델
암호화 알고리즘
-
양방향 방식
- 대칭키 암호 방식 : 암호화키=복호화키, 블록 암호방식, 스트림 암호방식
- DES : IBM에서 개발, 연방 표준국 발표
- 3DES : DES를 세번 적용
- SEED : 한국인터넷진흥원 개발
- AES : 미국 표준 기술 연구소 발표, 3DES의 성능 문제 극복
- ARIA : 국가정보원, 산학연구협회 개발, XOR같은 단순 바이트 단위 연산
- IDEA : DES를 대체하기 위해 스위스 연방기술 기관에서 개발
- LFSR : 시프트 레지스터의 일종, 선형 함수로 계산되는 구조
- 비대칭키 암호 방식(공개키 암호 방식) : 암호화키!=복호화키
- 디피-헬만 : 최초의 공개키 알고리즘, 이산 대수의 어려운 계산이 원리
- RSA : 소인수 분해 문제의 어려움
- ECC : RSA에 대한 대안으로 코블리치, 밀러가 제안, 타원 기반 구조체
-
일방향 암호 방식(해시 암호 방식)
- MAC : 키를 사용하는 메시지 인증 코드로 무결성, 인증 보장
- MDC : 키를 사용하지 않는 변경 감지 코드로 무결성 보장
- MD5 : MD4를 개선
- SHA-1 : 미 정부 표준, DSA에서 사용
- SHA-256/384/512 : SHA 알고리즘의 종류
- HAS-160 : 국내 표준 서명 알고리즘, MD5 + SHA1
- HAVAL : 1024bits로 나눔, 메시지 다이제스트 출력
데이터 암호화 전송
- IPSec : IP 계층, 무결성과 인증-인증 헤더(AH), 기밀성-암호화(ESP)
- IPSec 프로토콜
- 인증(AH) 프로토콜
- 암호화 프로토콜
- 키 관리 프로토콜
- SSL/TLS : 전송계층, 응용계층, Netscape 개발, 다양한 암호 통신, 특정 암호기술 의존 X
- S-HTTP : 웹상에서 네트워크 트래픽을 암호화하는 방법
소프트웨어 개발 보안 구현
SW 개발 보안 구현
시큐어 코딩 가이드
입보시 에코 캡아
- 입력 데이터 검증 및 표현
- 보안 기능
- 시간 및 상태
- 에러 처리
- 코드 오류
- 캡슐화
- API 오용