9. 소프트웨어 개발 보안 구축 - Chap 2. 소프트웨어 개발 보안 구현
Chapter 2. 소프트웨어 개발 보안 구현
1. 소프트웨어 개발 보안 구현
1) 시큐어 코딩 ---> 입보시에코캡아
입력데이터 검증 및 표현 (sql인젝션, XSS) / 보안기능 / 시간 및 상태(병렬 시스템->직렬화)
/ 에러처리(에러 미처리, 불충분한 처리) / 코드 오류 / 캡슐화(프라이빗 접근자 지정) / API 오용
2) 입력데이터 검증 및 표현 취약점 ★★
㉠ XSS (Cross Site Script)
: 검증되지 않은 외부 입력 데이터가 포함된 웹페이지가 전송되는 경우,
사용자가 해당 웹페이지를 열람함으로써 웹페이지에 포함된 부적절한 스크립트가 실행되는 공격
--> XSS 취약점 대책 : 특수문자 필터링 / HTML 태그 사용 금지 / 자바스크립트로 시작하는 문자열 모두 변환처리
--> XSS 공격유형 : 스S리R돔D ( Stored XSS, Reflected XSS, DOM XSS)
㉡ CSRF (Cross-Site Requeset Forgery)
: 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격
--> 대책 : 폼 작성 시 get 방식보다 post 방식 사용 / CSRF 토큰 사용 / 재인증
㉢ SQL삽입 (SQL Injection) -- 기출!
: 응용 프로그램의 보안 취약점을 이용해서 악의적인 SQL구문을 삽입, 실행시켜
데이터베이스 접근을 통해 정보를 탈취하거나 조작 등의 행위를 하는 공격기법
--> 대책 : 모든 값 체크하여 필터링 / 바인딩 매개변수 방식 적용(ex. prepared statment)
3) 보안 기능
: 적절한 인증 없이 중요 기능 허용, 부적절한 인가, 취약한 암호화 알고리즘 사용
중요 정보 평문 저장 및 전송, 하드코드 된 비밀번호
4) 에러 처리
: 취약한 패스워드 요구조건, 오류메세지 통한 정보 노출
오류 상황 대응 부재(Try~catch문 사용) , 적절하지 않은 예외 처리
5) 세션 통제
: 다른 세션 간 데이터 공유 금지 등 안전 설계 필요 --> 세션 타임아웃
6) 코드 오류
: 널 포인드 역참조 , 정수를 문자로 변환 , 초기화되지 않은 변수 사용
부적절한 자원 해제 (힙, 스택 등 사용 후 반환 -> finally블록에서 반환되도록 코딩)
7) 캡슐화 취약점
: 잘못된 세션에 의해 데이터 정보 노출(변수 범위 주의, 지역변수 활용) , 시스템 데이터 정보 노출
, 제거되지 않고 남은 디버그 코드, 민감한 데이터를 가진 내부 클래스 사용
8) API 오용
: DNS Lookup에 의존한 보안 결정, 위험하다고 알려진 함수 사용, 널(null) 매개변수 미검사
=============================================================
=============================================================
2. 시스템 보안 구현
1) 유닉스/리눅스 주요 로그 파일
* 유닉스의 경우 Nar/adm 디렉토리에 주로 저장된다
* 리눅스의 경우 Nar/log 디렉토리에 주로 저장된다 (log파일-> 사후(공격 후))
* /etc/syslog.conf 파일에서 시스템 로그 파일 위치 지정하고 있다
-> wtmp, utmp, btmp, lastlog, sulog, acct/pact, xgerlog, messages, secure
2) 보안 솔루션
* 네트워크 보안 솔루션
-> 방화벽 , 웹 방화벽(WAF), 네트워크 접근제어(NAC), 침입 탐지 시스템(IDS),
침입 방지 시스템(IPS), 무선 침입 방지 시스템(WIPS), 통합 보안 시스템(UTM), 가상 사설망(VPN)
* 시스템 보안 솔루션
- 스팸 차단 솔루션(Anti- SPAM),
보안 운영체제(Secure OS)-운영체제 커널에 보안 기능 추가
* 콘텐츠 유출 방지보안 솔루션
- 보안USB, 데이터 유출 방지(DLP), 디지털 저작권 관리(DRM)-문서 보안 솔루션
3) 취약점 분석 절차
* 분석 대상 : 환경 및 시설, 하드웨어, 소프트웨어
* 분석 절차 : 자산 조사 및 분석 -> 진단 대상 선정 -> 제약사항 확인 -> 진단 수행 -> 결과 분석/보고서
(규모 작으면 전수조사, 크면 샘플링) (체크리스트)
3. SW 개발 보안 테스트와 결함 관리
1) 소프트웨어 개발 보안 테스트
: 정적 분석 -> 개발단계 (초기 발견, 비용 절감)
동적 분석 -> 시험 단계 (소스코드 필요 없음, 정확도 높음)
* 소프트웨어 개발 보안 테스트 절차
준비단계 -> 실행단계 -> 개선단계 -> 관리단계 -> 종료
(대상 선정, 일정 수립) (테스트 수행) (보고서 발행/ 지적사항 해결) (결함해결 보고, (보안 상황 보고)
점검 소스 코드관리)
4. 비즈니스 연속성 계획(BCP)
: 각종 재해, 장애, 재난으로부터 위기관리를 기반으로
재해복구, 업무복구 및 재개, 비상계획 등을 통해 비즈니스 연송성을 보장하는 체계,
-> 비즈니스 영향 평가(BIA)가 선행되어야 함
5. 보안 중요 용어
1) BCP 용어
BIA - 비즈니스 영향 분석 (영향도 및 손실평가)
RTO - 재해 시 복구 목표 시간의 선정( 실시간 RTO=0)
RPO - 시점, 재해 시 복구 목표 지점의 선정
DRP - 재난 복구 계획
DRS - 재해 복구 센터
-> DRS 유형 : Mirro Site(모두 운영, 운영비용 높음...),
Hot Site(대기상태, 최신유지) ,
Warm Site(중요성 높은 자원, 백업주기 수시간~1일, 복구까지 수일~수주),
Cold Site(데이터만 보관, 복구까지 수주~수개월, 저렴하나 시간 길고 신뢰성 낮음)
2) 보안 중요 용어 -> 책에 있는거 참고 ! 익숙하게 해서 이해하기!
부채널 공격 (Side Channel Attack)
드라이브 바이 다운로드 (DBD) - 악성 스크립트
워터링홀-- 표적, 웹사이트 (스피어피싱--(표적, 이메일)과 헷갈리지 않게 주의!)
스캠공격 - 무역 거래대금
하트블리드 - 하트비트라는 확장 모듈 (심장에서 피..)
크라임웨어 - 금융정보 또는 인증정보 탈취로 금전적 이익
MITM - 중간에 침입, 도청 및 조작
DNS 스푸핑(위조,변조) - 희생자가 의도하지 않은 주소로 접속, =DNS 캐시 포이즈닝
포트 스캐닝 - 열린(활성화) 포트로 공격
디렉토리 리스팅 - 강제브라우징
리버스 쉘 공격 - 쉘 획득해서 공격
익스플로잇 - 의도한 동작이나 명령 실행
스턱스넷 - 독일 지멘스사의 SCADA시스템 (산업 제어 시스템), 산업 기반 시설
크리텐셜 스터핑 - 다른곳에서 유출된 아이디 비번 적용
허니팟 - 일부러 허술하게 만들어 노출, 유인 시스템OWASP top 10 - 10가지 취약점핑거프린팅 - 저작권 정보와 구매한 사용자 정보워터마킹 - 저작권 정보 삽입
FDS - 이상 거래 탐지, 이상거래 차단CC인증 - 정보기술, 정보보호 시스템 등...... 국제 평가 기준C-TAS - 인터넷진흥원(KISA) 주관 침해 예방 대응 시스템PAM - 리눅스 내 인증용 라이브러리
CVE : 미국 MITRE 비 영리회사 식별자 목록
CWE :미국 MITRE 비 영리회사 약점 체계적으로 분류한 목록