1장 인터넷과 웹의 이해
인터넷 프로토콜
컴퓨터간 정보를 원활하게 교환하기 위해 상호간에 정한 여러 통신규약
프로토콜의 구성요소
- 구문 : 데이터의 형식이나 신호로 부호화 방법을 정의
- 의미 : 정확한 정보 전송을 위한 전송제어와 오류 제어방법을 정의
- 순서 : 송신자와 수신자 간 혹은 양단의 통신 시스템, 망 사이의 통신 속도나 순서를 정의
TCP/IP : 가장 많이사용되는 통신 프로토콜
RFC : 인터넷에서 기술을 구현하는데 필요한 상세 절차와 기본 틀을 제공하는 기술문서
인터넷 거버넌스
ICANN : 국제인터넷주소 관리 기구
- 인터넷의 기술적인 문제를 관리
- 도메인 이름, DNS와 ip 주소, 프로토콜 번호롸 매개변수 지정등을 관리
IANA : 인터넷할당번호관리기관
- 인터넷 초기에 사용자들에게 인터넷 주소를 할당하기 위해 DISA가 만든 기관
- DNS Root Zone을 관리하는 것이 중요 기능
ISOC
- 인터넷의 이용과 기술에 관한 국제적인 협조와협력을 촉진하기 위한 국제 기구
ISOC
- 인터넷의 운영, 관리, 개발에 대해 협의하고 프로토콜과 구조적인 사안을 분석하는 인터넷 표준화 기구
월드와이드웹 컨소시엄(W3C)
- 웹 브라우저, 웹 서버 기술의 표준화는 추진하는 단체
국제 전기 통신 엽합(ITU)
- 인터넷에 영향을 미칠 수 있는 관세 문제를 다루고, 정보통신 네트워크에 대한 기술적인 표준과 운영 표준을 발행
http의 기본 개념
문서간의 상호 연결을 통해 다양한 텍스트, 그래픽, 애니메이션을 화면에 보여주고 사운드를 재생
request 방식
- 서버에 클래이언트가 전송한 인자값에 추가정보를 전송할 때 사용
- url에 나타난 호스트명을 자세하게 나타내기 위해 사용
- get 방식의 경우, 요청 데이터에 대한 인수를 url을 통해 웹 브라우저로 전송(...?id=33)
- post 방식의 경우 http 보디 영역에 소켓을 사용하여 데이터 전송
-> 보내려는 인자값이 노출되지 않아 보안측면에서 더 안전
get/post 방식의 사용
- get: 목록이나 글을 보는 화면에는 접근 자유도를 부여
- post: 보안을 위해 글을 저장/수정/삭제 하는 작업에 사용
rquest 패킷의 메소드
- head : 서버 쪽 데이터를 검색하고 요청할 때 사용
- options : 자원에 대한 요구(선택사항에 대한 정보 전송시)
- put : 메시지에 포함되어 있는 데이터를 지정한 url 장소에 지정된 이름으로 저장
- delete : url에 지정된 자원을 서버에서 제거
- trace : 루프백 검사용으로 사용
respose 방식
- 클라이언트가 보낸 request의 응답 패킷으로 형식이 간단함
- 서버에서 사용하는 프로토콜 버전, http 상태코드, 전달한 데이터의 형식. 데이터 길이 등과 같은 추가 정보가 포함되어 있음
http 상태 코드
- 100 : 정보 전송
- 200 : 정보 전송 성공
- 300 : 리다이렉션
- 400 : 클라이언트 측 에러
- 500 : 서버 측 에러
http 1.0의 동작방식
- 문서에 그림이 존재할 경우, text가 저장된 html 문서를 먼저 전송 받은 후, 연결을 끊은 후 다시 그림을 전송 받음
http 1.1의 동작 방식
- 연결 요청이 계속 들어오면 html 문서를 받은후 연결을 유지한 채 이미지 파일을 요청
웹 어플리케이션의 기술
서버측 기능
- 초기 웹서버는 정적 페이지만 보여주었으나,
현재는 입력한 값에 따라 다양한 결과를 보여주는 동적 기능을 제공
웹 어플리케이션이 이용하는 서버측 기능
서버 측 스크립트 언어(노드 js, php 등)
- 요청 받은 데이터를 서버측에서 처리하여 원하는 결과를 돌려주기 위해 사용하는 언어
- 취약점 분석을 위해선 기본적인 서버 스크립트 언어에 대해 이해하고 있어야 함
웹 서버
- 아파치, IIS, 노드 js, nginx 등을 주로 사용
데이터베이스
- DBMS : 데이터베이스를 관리하는 소프트웨어
- DBMS를 통해 DB를 만들고 데이터를 crud 할 수 있음
클라이언트 측 기능
html
- 대표적인 특징으로 플러그인 없이 멀티미디어를 재생할 수 있음
자바스크립트
- 성능문제로 인해 서버 측에서 처리하지 않는 부분을 클라이언트 측에서 처리할 수 있도록 할 때 사용
- 자바스크립트로 작성된 입력값 검증 부분은 주요 공격 대상이 됨
2장 웹 해킹의 키초
웹 해킹 방법
- 취약점의 존재 여부를 확인 후 그곳을 통해 침투를 시도하는 방법
- 발견 가능한 모든 공격 표면을 찾은 후 매트릭스를 작성한 뒤, 하나씩 시도하는 방법
시스템에 침투하는 일반적인 해킹 과정
공격 대상 선정 -> 정보 수집 -> 취약점 분석 -> ㄱㅇ격 -> report, defacement, 흔적 제거 등
공격 대장 선정
- 방문자가 많은 웹 사이트를 선정
- 도메인을 모두 검색 한 후 가장 취약한 부분을 대상으로 함
정보 수집
- 공격 대상의 특성과 취약점을 찾음
- 웹 어플리케이션의 개발 언어, 주요 공격 대상의 기능, 웹서버의 종류 등을 파악
자동화 도구를 이용한 정보 수집
- 공격 대상의 취약점이 가장 많이 발생하고 영향력이 큰 영역을 먼저 조사
- 사용자 로그인, 게시판, 자료실 등 파일을 업로드할 수 있는 부분이 있는지 파악
- 웹 사이트의 디렉터리 구조, 소스코드 간의 연관성등 기본 정보를 얻을 수 있는지 파악
정보 수집 도구들
- burp suite
- 개발자 도구
- 검색 엔진 사용(site, file type, link, cache, intitle, inurl 등의 검색어를 사용)
- 스캐닝 도구
웹 어플리케이션의 취약점
OWASP : 웹 보안에 대한 정보를 공유하고 체계를 세우는 자발적인 온라인 정보 공유 사이트
- 잠재적인 공격자는 다양한 경로를 통해 보안 취약점을 공격
- 각 보안 취약점 마다 보안 통제를 설계
-> 취약점 악용시 발생하는 기술적인 영향을 통해 해당 위험을 계산
OWASP TOP 10
- A1 : 잘못된 접근 통제
- A2 : 암호화 오류
- A3 : sql 인젝션
- A4 : 안전하지 않은 설계
- A5 : 보안 설정 오류
- A6 : 취약하거나 오래된 컴포넌트
- A7 : 식별 및 인증 실패
- A8 : 소프트웨어와 데이터 무결성 실패
- A9 : 보안 로그 및 모니터링 실패
- A10 : 서버 사읻 요청 변조(SSRF)
3장 인증 기술과 접근 통제
인증 기술
인증방법은 가급적 두개 이상의 방법을 함께 사용해야 안전함
알고 있는 것
- 특정인을 인증할 때 사용하는 방법
- 패스워드/주민등록번호/i-pin 기반 인증
가지고 있는 것
- 그 사람이 가지고 있는 것을 통해 인증
- 스마트카드, 간편 인증 등
그 자체
위치하는 곳
- 장소 기반 인증 방법
- ip주소, 지역 정보를 토대로 정상 사용자인지 아닌지 파악
접근 통제
수직적 접근통제
- 특정 정보에 대한 접근 권한을 수준별로 상이하게 설계한 통제
- 대부분의 사이트는 일반사용자와 관리자 기능을 분리해둠
수평적 접근 통제
- 여러 사용자가 존재시 상대방의 정보를 볼 수 없도록 통제하는 것
- url에 노출되는 자신의 식별 코드나 쿠키/세션 값을 대체함으로서 공격함
비지니스 로직 접근 통제
- 사용자 권한에 종속되지 않고 민감하거나 중요한 자원에 대한 접근과 관련됨
- 관리자 권한이 없어도 관리자만 접근할 수 있는 메뉴에 접근하는 경우
4장 sql 인젝션의 개요
원리
- 웹 어플리케이션과 데이터베이스가 연동되는 부분에 공격자가 임의의 sql 명령어를 삽입하여 공격
- 사용자 로그인, 검색 부분, 자료실 등이 대부분
# 웹 어플리케이션에서 쿼리를 실행하는 소스코드
SELECT * FROM employee WHERE userid = " + userid + " and password = '" +
password+ "'
# 로그인 입력 창에 Neville Bartholomew(admin), ‘or’‘=’ 명령어를 입력
# or 문으로 인해 쿼리가 참이 되면서 로그인이 됨
SELECT * FROM employee WHERE userid = 'Neville Bartholomew(admin)' and password =''or''=''
dbms의 종류에 따른 sql 인젝션 공격
microsoft sql 서버에는 운영을 좀 더 편리하고 효율적으로 하기 위한 여러 확장 저장 프로시저가 존재
-> 이를 통해 다양한 공격을 시도가능
# 사용자 정의 테이블 가져오기
SELECT name FROM sysobjects WHERE xtype = 'U'
# 컬럼 이름 가져오기
SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name ='컬럼 이름을 얻으려는 테이블의 이름')
XPath 삽입 공격
XPath란
- xml 문서로부터 선택한 노드를 사용하기 위한 프로그래밍 언어
- xml 데이터를 트리 구조로 형성
sql 인젝션과 비슷하게 공격을 가능
# 공격 방법
Username = anesra' or '1'='1
Password = 1234' or '1'='1
# 결과
XPath query: //Users/user[username/text() = 'anesra' or '1'='1' and password/text() = '1234' or '1'='1']
5장 XSS 공격의 개요
웹 어플리케이션이 사용자를 인증하는 방법
- 아이디와 패스워드를 기반으로 사용자의 신원을 확인
- 웹 어플리케이션이 사용자에게 고유한 값을 전달
- 웹 어플리케이션으로부터 받은 고유값을 가지고 사이트를 이용
쿠키
- 사용자 정보를 알 수 있는 데이터
- 쿠키를 만든 사이트의 도메인. 사이트 구분 숫자, 만기일 등의 정보가 존재
쿠키의 용도
- 사이트 개인화 -> 사용자의 성향을 파악
- 장바구니 시스템
- 웹사이트의 이용 방식 추적
- 타깃 마케팅
XSS
- 다른 사용자의 정보를 추출하는 공격 기법
- 입력을 받아들이는 부분의 스키립트 코드를 필터링하지 않음으로서 공격자가 스크립트 코드를 실행 가능
XSS 공격 유형
stored XSS
- 사용자가 글을 저장하는 부분에 스크립트 코드를 입력
- 다른 사용자가 게시물을 열람시 공격자가 입력해둔 스크립트가 실행됨
Reflect XSS
- url의 변수 부분처럼 스크립트 코드를 입력하는 동시에 결과가 나오는 공격 기법
# 표준 스크립트 문자열을 입력하여 테스트
<script>alert(document.cookie)</script>
CSRF 공격
크로스 사이트 요청 변조
- 피해자의 브라우저가 특정 사이트에 강제적으로 리퀘스트를 보내도록 하는 기법
6장 소스코드의 취약점 분석
취약점 테스트 방식
black box 테스팅
- 소스코드가 아닌 웹 어플리케이션의 외부 인터페이스나 구조를 분석하여 취약점을 발견
- 취약점 발견 속도가 빠르며 다양한 취약점을 발견 가능
- 인터페이스 간의 상관관계를 분석하여 취약점이 발생하는 부분 식별 가능
white box 테스팅
gray box 테스팅
- 외부에서 보이는 취약점은 웹 어플리케이션 보안 진단을 통해 확인하고, 소스코드에서 접근 통제, 입력 값 검증, 세션 처리 문제들을 같이 살펴보면서 취약점을 조사하는 방식
취약점 유형
- 대부분의 취약점이 사용자가 입력한 값을 적절하게 검증하지 않아서 발생
취약점 분석 방법
입력값 검증 취약점
- sql 인젝션, XSS, 위험한 형식의 파일 업로드, 디렉터리 경로 조작 등
public boolean login(WebSession s, String userId, String password)
{
// System.out.println("Logging in to lesson");
boolean authenticated = false;
try
{
// 취약점 1
String query = "SELECT * FROM employee WHERE userid = " + userId + " and password = '" + password + “’”;
// System.out.println("Query:" + query);
try
{
Statement answer_statement = WebSession.getConnection(s) .createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// 취약점 2
ResultSet answer_results = answer_statement.executeQuery(query);
문제가 되는 코드 부분
- 문제가 되는 핵심 코드의 실행 과정
- 사용자가 입력한 아이디와 패스워드는 userId와 password 변숫값으로 저장
된다.
- userId와 password 변숫값을 포함하여 SELECT 문장을 만든다.
- 완성된 SELECT 문장을 executeQuery 함수를 통해 실행한다.
protected void addMessage(WebSession s)
{
try
{
String title = HtmlEncoder.encode(s.getParser( ).getRawParameter(TITLE, ""));
String message = s.getParser( ).getRawParameter(MESSAGE, "");
⋮
statement.setInt(1, count++);
statement.setString(2, title);
statement.setString(3, message);
statement.setString(4, s.getUserName());
statement.setString(5, this.getClass().getName());
문제가 되는 코드 부분
- 사용자가 입력한 title과 message 변수를 getRawParameter 함수를 통해 받
아들인다.
- 해당 변수를 필터링 없이 데이터베이스 쿼리문에 포함하여 저장한다.
→ 사용자가 입력하는 값을 getRawParameter 함수를 통해 받아들이며, 이후 추
가적인 필터링 기능이 없는 것 확인
기타 예시
위험한 형식의 파일 업로드에 대한 입력값 검증 미비의 문제점 확인
- getUserName으로 파일명을 가져와서 처리할 때 파일명 및 확장자에 대한 필
터링이 없는 것 확인
→ 웹 애플리케이션의 파일을 업로드하는 부분에서 파일 확장자를 검사하는지
살펴볼 필요가 있음
디렉터리 경로 조작
- 파일명을 받아 처리하는 부분에 파일명에 대한 필터링이 없으면 공격자는 디
렉터리 경로를 조작하여 상위 디렉터리에 있는 임의의 파일에 접근할 수 있음
→ 파일명을 받는 file 변수나 getRawParameter 변수를 통해 필터링하고 있는지
확인
매개변수와 쿠키 조작
- URL에서 변수 또는 POST 형태로 전송되는 매개변숫값을 조작하여 자신이 소
유한 것 외의 권한을 획득하는 공격 기법
- 매개변수 조작 취약점이 존재하는지 확인하려면 사용자 권한이 필요한 페이지
에 접근할 때 세션 처리를 하는 코드를 포함하는지 확인
- 예) 사용자가 입력한 매개변숫값을 받아들여 쿠키로 저장하고 그 쿠키 값으로
인증하는 경우
강제 브라우징
- 권한이 필요한 페이지에 권한 체크 코드가 누락되었을 때 발생
- /admin/과 같은 관리자 디렉터리 내에 있는 소스코드 중에 세션 처리 등의 코
드가 존재하는지 확인해봄으로써 강제 브라우징 취약점이 존재하는 페이지를
찾을 수 있음
→ 관리자 페이지 및 인증이 필요한 페이지에 세션 처리 코드가 포함되어 있는
지 확인
중요 정보 평문 전송
- 패스워드나 주민등록번호와 같은 민감한 내용을 암호화하지않고 평문으로 전
송할 때 발생하는 취약점
중요 정보 평문 전송 취약점을 확인하는 방법
- 사용자의 중요 정보를 전송하는 페이지가 HTTPS(SSL) 등의 암호화된 채널로 통
신하는지 확인
- 소스코드 내에서 중요한 정보를 암호화 함수를 통해 전송하는지 확인
암호화 함수를 이용한 전송
- 소스코드 또는 중요 정보를 암호화하더라도 복호화 함수나 복호화 키가 쉽게
노출된다면 암호화된 정보가 공격자에 의해 악용될 수 있음
하드 코딩된 패스워드
- 하드 코딩(hard coding): 패스워드 및 시스템 접속 정보와 같은 민감한 정보가
소스코드 내에 그대로 노출되어 있는 경우
주석 처리된 중요 정보
- 주석에는 해당 소스코드가 어떤 기능을 하는지 설명하는 내용이 많은데, 간혹
개발 단계에서 수정이 발생한 소스코드를 삭제하지 않고 주석 처리를 하는 경
우가 있음
7장 웹해커의 도구
웹 브라우저의 개발자 도구
Burp suite
target
- 탐색한 사이트의 정보를 확인 가능
- 웹 사이트의 구조를 분석할 때 사용
- 해당 페이지의 http 헤더, request, response 정보를 상세히 확인 가능
intruder 기능
- 해당 웹페이지에 전달되는 변숫값을 자동으로 생성하여 전달하도록,
규칙 생성 가능
- 어떤 변수 값을 조작할 지, 변숫값의 종류와 범위, 리소스 할당량 등을 관리 가능
- Status와 Length 값을 확인하여 다른 내용을 가진 페이지르 확인 가능
repeater
- request 항목에서 target 탭에서 전달한 요청을 확인 가능
- response 항목에서 요청한 결과를 확인 가능
웹 취약점 스캐너
데이터 기반 웹 스캐너
Nikto
- 웹 서버와 어플리케이션에 있는 취약점 데이터베이스 기반 웹 스캐너
N-stealth(N-stalker)
- 웹 취약점 데이터베이스를 기반으로 하는 웹 취약점 스캐너
특정 웹 취약점 스캐너
Absinthe
Sqlmap
Acunetix
- 웹 어플리케이션의 취약점을 찾는 휴리스틱 웹 취약점 스캐너
- 특정 사이트를 스캔하여 취약점을 확인 할 수 있음
-> 어떤 변수에서 공격이 가능한지, 상세 http 요청은 무엇인지 확인 가능
- 스캔된 결과를 통해 다양한 형태의 보고서를 생성 가능
8장 sns 보안 위협
sns : 종족, 가족, 동성 간의 특정한 네트워크를 만드는 행위
웹 2.0
- 이용자가 적극적으로 참여하여 정보/지식을 생산, 공유, 소비하는 열린 인터넷을 표방
- 복합적인 정보를 양방향으로 빠르게 주고받을 수 있개 됨으로써 비교할 수 없을 만큼 정보가 방대해짐
- 공격자에게 있으 새로운 공격 표면으로 부상
SNS 보안 위협과 대응 방안
개인
- 출처를 알 수 없는 링크는 클릭하지 않는다
- 모르는 사람에게 받은 이메일에 첨부된 파일은 열지 않는다
- sns에서 검증되지 않은 어플리케이션은 가급적 사용하지 않는다.
- sns의 개인정보 설정이 적절하게 유지되고 있는지 확인한다
- 안티바이러스 소프트웨어를 설치하고 항상 최신 버전을 유지 한다
기업
- 직원을 대상으로 보안 인식 교육을 실시
- 네트워크 기반의 ids/ips를 주요 시스템과 네트워크의 접점에 설치
- 주요 서버에 호스트 기반의 ids/ips를 사용한다.
- 업무와 상관없는 sns를 이용하지 못하도록 웹 필터링 프록시를 사용
- 악성소프트웨어 필터링을 이용
- 메신저나 p2p 프로그램의 사용을 제한
피싱 대응 방안
피싱
- 진짜 사이트와 비슷하게 꾸민 가짜 사이트를 이메일 또는 링크를 통해 전달하여 개인 정보를 탈취하는 공격기법
피싱 공격 제대로 알기
안티피싱 솔루션 사용
- 신뢰할 수 있는 사이트가 제공하는 안티피싱 솔루션을 사용
개인 정보는 반드시 확인 후 제공하기
이블 트윈 어택
- 사용자를 속이는 소셜 엔지니어링 공격 기법
- 사용자 정보를 중간에서 가로채어 사용자인 것처럼 행동하는 공격에서 나온 것
- ex) 유명인을 흉내내는 sns 계정 등
9장 웹 보안과 웹서버 보안
패스워드
가장 널리 사용되는 기본적인 사용자 인증 방식
안전한 패스워드 만들기
- 8자 이상, 세 종류 이상의 문자 구성
- 10자 이상, 두종류 이상의 문자 구성
- 특정 명칭을 예측하기 어렵도록 가공
- 특수문자, 숫자 삽입
- 기본 패스워드 문자열 + 사이트 이름
안전하게 패스워드 보관하기
- 패스워드 변경
ROT13 방식
- 영어 알파벳을 13 글자씩 밀어서 암호로 만드는 방법
- ROT18은 모든 문자와 숫자를 치환가능하며, 47은 모든 ASCII을 치환할 수 있다.
-
패스워드 보관 파일의 암호화
-
패스워드와 보관 파일을 외부 저장장치와 하드 디스크에 이중 보관
사용자 인증 방식
공인 인증서
- 전자 서명의 검증이 필요한 공개키에 소유자 정보를 추가해서 만든 일종의 전자 신분등
- 패스워드 인증 매커니즘보다 한 단계 강화된 인증 방식
- 공개키와 비밀키 한 쌍을 이용하여 사용자를 인증하는 공개키 기반 구조
생체 인증 방식
- 현존 방식 중 가장 강화된 방식
- 모바일 기기로 인해 생체 인증 방식이 도입되는 추세
지문
- 개인의 고유한 생체 정보로 일생동안 변하지 않음
손모양
- 손을 폈을때 손가락 길이, 굵기 등의 요소를 인증에 사용
- 정맥 모양을 촬영해서 인증하기도 함
망막
- 눈 뒷부분에 있는 모세혈관의 형태를 확인해서 인증
- 시간이 오래 걸림
- 안경을 쓴 상태에선 사용 불가
홍채
- 홍채 패턴을 통해 식별하는 방식
- 정확도 및 식별 범위도 김
서명
목소리
- 환경, 감정에 따라 변할 수 있어 보안 수준이 낮음
얼굴
뇌파
생체 인증의 성능 측정
FRR : 권한이 있는 사람이 인증을 시도했을 때 실패하는 비율
FAR : 권한이 없는 사람이 인증을 시도했을 때 성공하는 비율
EER : frr과 far이 그리는 곡선의 교차점
접근 통제
보안을 위한 첫 단게는 보호하려는 정보의 가치를 결정하는 것
DAC
- 임의적 접근 통제
- 정보 소유자가 정보의 보안 수준을 결정하고 그에 대한 접근 통제까지 설정
- 중앙 집중화된 정보 관리가 어려워 엄격한 정보에 대한 접근 통제 거의 불가
MAC
- 강제적 접근 통제
- Bell-LaPadula, Biba. RBAC 등의 모델이 있음
접근 통제 모델

Bell-LaPadula : 정보의 기밀성에 따라 상하 관계가 구별된 정보를 보호하기 위해 사용
- property
-> 자신의 권한보다 높은 보안 문서는 쓰기가 가능하나, 낮은 보안 문서는 쓰기 권한이 없음

Biba 모델
RBAC
접근 통제 구현 방법
관리적 접근 통제
- 정책 및 절차를 통해 조직이 보유한 주요 정보를 식별하고 그에 따른 통제 방안을 수립
- 구성원이 회사의 보안 정책을 준수하도록 직원 통제 활동이 필요
논리적 접근 통제
- 보호할 정보에 접근하는 것을 제한하기 위한 하드웨어와 소프트웨어 도구
- IP, MAC 주소에 따른 접근 통제
- 인터페이스 통제 : 필요한 기능만 사용하도록 메뉴, 셀의 형태로 제공
물리적 접근 통제
- 네트워크 분리, 경계선 보안, 전산실 통제, 데이터 백업 등
- 네트워크 장비에 임의로 접근하지 못하도록 잠금장치를 설치해야 함
입력 값 검증
SQL 인젝션
SQL 인젝션 공격 취약점을 제거하려면 Prepared statement 객체를 이용하여 데이터베이스에 컴파일된 쿼리문을 전달하는 방식이 가장 안전함
// 안전하지 않은 코드
String tableName = props.getProperty("jdbc.tableName");
String name = props.getProperty("jdbc.name");
String query = "SELECT * FROM" + tableName + "WHERE Name =" + name;
stmt = con.prepareStatement(query);
rs = stmt.executeQuery();
//안전한 코드
String tableName = props.getProperty("jdbc.tableName");
String name = props.getProperty("jdbc.name");
String query = "SELECT * FROM ? WHERE Name = ?";
stmt = con.prepareStatement(query);
stmt.setString(1, tableName);
stmt.setString(2, name);
rs = stmt.executeQuery();
크로스 사이트 스크립팅 공격 코드 입력 값 검증
스크립트 코드를 입력하지 못하도록 방어
스크립트를 입력하기 위한 문자열 <, >, &, "등을 <, > 등으로 치환하는 것이 유리
// 위험한 코드
<h1> XSS Vulnerability Sample </h1>
<%
String name = request.getParaemeter("name");
%>
<p> NAME: <% =name %> </p>
// 안전한 코드
<%
String name = request.getParameter("name");
if (name != null)
{
name = name.replaceAll("<", "<");
name = name.replaceAll(">", ">");
name = name.replaceAll("&", "&");
name = name.replaceAll("\"", """);
}
else { return; }
%>
악성 파일 업로드 공격 입력 값 검증
- 필요한 파일의 확장자만 업로드 허용
- 파일 저장시 문자열 값을 변경하여 파일명과 확장자를 추측하지 못하도록 변형
서버측과 클라이언트 측 필터링
- 입력값 검증을 위한 코드를 백엔드 or 프런트엔드 측에 포함할지에 따라 보안 수준이 달라짐
- 프런트엔드의 경우 값 변형이 쉬우므로 백엔드에서 구현하는 것이 좋음
필터링 방식
화이트 리스트 방식 필터링
- 필요한 특정 입력 값만 받아들이고 그외의 모든 값은 필터링
- 특정 파일의 확장자가 아닌 모든 값을 차단
블랙리스트 방식 필터링
- 악성 패턴에 한해서만 필터링
- 대부분의 입력값은 허용하고 일부 특정 입력값만 차단시 사용
아파치 웹 서버 보안
아파치 웹 서버 설정은 httpd.conf, apache2.conf 파일을 통해 이루어짐
10장 인터넷 해킹과 보안
보안 정책
security policy
- 조직의 상위 관리자가 만든 보안 활동에 대한 일반적인 사항을 기술한 문서
- 기록 내용
-> 보호하려는 자산, 정보소유자의 역할과 책임 정의. 관리되는 정보들의 분류와 기분 정의, 관리에 필요한 기본적인 통제 내용
standards
- 일반적으로 지켜야할 보안 사항에 대해 기술한 문서
- 일반적인 표준 절차만 담고 있음
Baselines
Guidelines
- 특정 상황에 대한 충고나 방향 등을 제시한 문서
procedures
- 가장 하위 문서로, 각각의 절차에 대한 세부 내용을 담고 있음
보안 정책의 주요 요소
정보 보호 관리 체계(ISO 270010
- 국제적으로 가장 널리 사용하는 정보보호 관리체계
개인정보보호
- 개인정보 보호법 : 고객의 개인 정보를 수집, 관리시 따라야할 내용
모바일 보안
- BYOD : 개인 소유의 휴대용 디바이스를 직장에서 사용시 회사의 기밀 정보와 어플리케이션에 접근하는 것을 허용하는 모바일 보안 정책
사이버 보안
보안 조직
CISO : 조직마다 임명하는 최고 정보보안 책임자
보안 업무의 역할과 책임
- 정보보안 기획
- 정보보안 전략/계획 수립
- 정보보안 정책/지침, 표준 제정 및 관리
- 정보보안 위험 관리
- 정보보안 관리
- 정보보안 운영
- 인프라 보안 운영 및 보안 장비 운영
- 위협 및 취약성 관리
- 보안 관제
- 보안 교육
- 정보보안 사고대응 관리
- 정보보안 모니터링
- 정보보안 성과 모니터링 및 성과 관리
- 정보보안 내부 감사
- 아웃소싱 보안 관리
- 컴플라이언스 관리
보안 솔루션
인트라넷
VPN
- 인터넷 회선을 전용선과 비슷한 용도로 사용하게 해줌
- 기밀성을 위해 암호화 처리가 필요
- 암호화 프로토콜로 PPTP, L2TF, SSL 등이 있음
VPN 이용사레
- 해외 전용 사이트 입장
- 집에서 회사 내부 시스템 접근
- 원격의 두 지점을 내부 네트워크 처럼 이용
-> 종류에 따라 인증없이 암호화 터널링도 제공
IPS
- 방화벽과 침입 탐지 시스템의 한계로 대두된 보안 솔루션
- 방화벽 다음에 설치
- 방화벽이 없을 경우, ASIC를 사용
스팸메일 차단 솔루션
- 프록시 메일 서버로 동작
- SMTP 프로토콜을 이용한 디도스, 폭탄 메일, 스팸 메일등을 차단
- 메일 내용과 첨부파일을 검사하여 정보 유출을 방지
스팸메일 차단 솔루션의 종류
- 메일 헤더 필터링 : 아이디, 수신자, 도메인등을 검사
- 제목, 본문, 첨부파일 필터링
PC 방화벽
- 후킹(Hooking) : 방화벽 드라이버 설치
백신
DRM(Digital Right Management)
- 문서 보안에 초점을 맞춘 보안 기술로, 문서를 열람하고 편집하고 프린트하는 것까지 접근 권한을 설정하여 통제
- MS 워드, HWP, TXT, PDF 등 업무에 사용하는 파일을 대부분 통제할 수 있음
ESM
- 여러 종류의 보안 솔루션을 중앙 집중화한 구조로 모니터링 하는 솔루션
- 보안, 관리 정책에 따른 사용자 및 접근 제어
- 네트워크, 시스템 취약점이나 위험 요소를 분석 및 모니터링하는 관리도구
SIEM
- 시스템에서 발생하는 로그를 분석하여 이상징후를 파악한 후 그 결과를 운영진에게 보고
- 실시간 위험 탐지를 위해 이벤트 로그 데이터를 실시간으로 수집 하고 분석
추가기능
- 공유 자원 접근 제어
- 패치 모니터링 및 설치
- 파일 암호 및 복호화
- 주변 기기 매체 제어
- 자산 및 IP 관리
- 모니터링