HTTP Method
- GET: 서버에 데이터 요청
- PUT: 리소스를 생성/수정하기 위해 서버에 데이터 전송, 요청시 식별자 필요, 멱등성(Idempotent)
- POST: 리소스를 생성하기 위해 서버에 데이터 전송, 요청시 식별자 필요 없음(데이터가 바디에 포함)
※ PUT vs POST
- PUT으로 생성 요청을 2번 하면, 1개가 생성되고, 2번째는 수정 작업으로 됨
- POST로 생성 요청을 2번 하면, 2개가 생성됨
※ GET vs POST
- GET: HTTP 요청URL의 끝에 데이터를 추가하여 전달, URL에 데이터가 담기기 때문에 중요 정보가 노출
- POST: HTTP 요청 메시지 바디에 데이터를 추가하여 전달, GET 방식에 비해 상대적으로 안전
HTTP 헤더
- Set-cookie: 서버에서 사용자 브라우저에게 쿠키를 전송하기 위해 사용
- Cookie: 사용자 브라우저에서 서버에게 쿠키를 회신하기 위해 사용
쿠키 옵션
- httponly: 클라이언트측 스크립트를 사용하여 쿠키에 액세스할 수 있는지 여부, False로 설정할 경우 HTTP 외의 스크립트 요청에 의해 쿠키에 접근하거나 쿠키를 조작할 수 있음
robots.txt
- 웹 사이트에 웹 크롤러와 같은 로봇이 접근하는 것을 제어하기 위한 파일
웹 로그 보안
- 클라이언트 IP, 접속시간, 요청방식, 요청내용, 상태코드 정보 확인 가능
- 로그 파일이 너무 커지는 것에 대비하여 Log Rotate 기능을 사용할 수 있음
PHP 보안
- allow_url_fopen: OFF로 설정하여 원격지 파일의 명령 실행을 방지해야 함
Oauth
- 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준
주요 HTTP 응답코드
- 1xx (조건부 응답)
100 |
계속 |
요청자는 요청을 계속해야 한다. 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸다. |
- 2xx (성공)
200 |
성공 |
서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다. |
201 |
작성됨 |
성공적으로 요청되었으며 서버가 새 리소스를 작성했다. |
202 |
허용됨 |
서버가 요청을 접수했지만 아직 처리하지 않았다. |
203 |
신뢰할 수 없는 정보 |
서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공하고 있다. |
204 |
콘텐츠 없음 |
서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다. |
- 3xx (리다이렉션 완료)
300 |
여러 선택항목 |
서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다. |
301 |
영구 이동 |
요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다. |
302 |
임시 이동 |
현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다. |
- 4xx (클라이언트 오류)
400 |
잘못된 요청 |
서버가 요청의 구문을 인식하지 못했다. |
401 |
권한 없음 |
이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음 |
403 |
Forbidden |
서버가 요청을 거부하고 있다. 예를 들자면, 사용자가 리소스에 대한 필요 권한을 갖고 있지 않다. |
404 |
Not Found |
서버가 요청한 페이지(Resource)를 찾을 수 없다. 예를 들어 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다. |
- 5xx (서버 오류)
500 |
내부 서버 오류 |
서버에 오류가 발생하여 요청을 수행할 수 없다. |
501 |
구현되지 않음 |
서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어 서버가 요청 메소드를 인식하지 못할 때 이 코드를 표시한다. |
502 |
Bad Gateway |
서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 잘못된 응답을 받았다. |
503 |
서비스를 사용할 수 없음 |
서버가 오버로드되었거나 유지관리를 위해 다운되었기 때문에 현재 서버를 사용할 수 없다. 이는 대개 일시적인 상태이다. |
504 |
게이트웨이 시간 초과 |
서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 제때 요청을 받지 못했다. |
https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
XML
- W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어
- 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어짐
- SGML과 HTML의 장점을 모두 가지고 있음
DNSSEC
- 공개키 암호화방식의 전자서명 메커니즘을 DNS 체계에 도입하여 적용
- DNS의 데이터 위-변조 취약점 보강
- DNS 캐시 포이즈닝(Pharming) 공격에 대응 가능
- 대응 불가능한 공격 유형: 피싱, DDoS, 웜바이러스에 의한 호스트 정보 변조
DNS
- DNS Record 종류
DNS Record |
설명 |
A |
- 호스트 이름을 IPv4 주소에 매핑 |
AAAA |
- 호스트 이름을 IPv6 주소에 매핑 |
PTR |
- Reverse DNS라고도 불림 - IP주소를 기반으로 도메인명 매칭 |
NS |
- DNS 서버 지정 |
MX |
- 메일 서버 지정 |
CNAME |
- 호스트 별칭 정의 |
SOA |
- DNS 영역에 대한 정보 저장 |
AXFR |
- 전체 DNS 영역 전달에 대한 요청 |
- DNS Zone
Zone |
설명 |
주 영역 |
읽기 및 쓰기 가능 |
보조 영역 |
읽기 전용 |
Stub 영역 |
Name Server의 위치만 저장하며, Name Server로 연결시켜주는 영역 |
- DNS Zone Transfer
1) Master DNS와 Slave DNS 간의 Zone 파일 동기화
2) 기본 설정 시 모든 IP에 대해 허용
3) Zone Transfer 공격: 악의적인 목적으로 지속적인 Zone Transfer를 시도하는 DoS 공격. Zone Transfer를 사용하지 않거나 특정 Slave Server만 지정하여 Zone Transfer를 허용하여 방어 (allow-transfer 옵션)
IMAP vs POP3
- IMAP: 온라인 모드와 오프라인 모드를 모두 지원하기 때문에 이메일 메시지를 서버에 남겨두었다가 나중에 지울 수 있음, 메일의 기본 헤더를 먼저 보고 본문 다운로드 여부 결정 가능
- POP3: 서버에서 이메일을 가져온 후 서버에서 삭제
SMTP
- SMTP 구성요소
1) MUA (Mail User Agent): 사용자의 메일을 관리하는 프로그램 (아웃룩 등)
2) MSA (Mail Submission Agent): MUA로부터 이메일 메시지를 받아 MTA에게 전달
3) MTA (Mail Transfer Agent): 전달받은 이메일 메시지를 MDA로 전달, 자신의 메일서버에서 호스팅하는 주소가 아니면 다른 메일 서버의 MTA로 이메일 메시지 전달 (Ex. Sendmail)
4) MDA (Mail Delivery Agent): 이메일 메시지를 수신자의 메일 박스로 전달, LDA(Local Delivery Agent)라고도 부름
5) MRA (Mail Retrieval Agent): 원격 메일 서버에서 이메일 메시지를 수신자의 메일 박스로 전달, MUA에 포함되기도 하고 별도의 외부 어플리케이션을 두기도 함
https://en.wikipedia.org/wiki/Email_agent_(infrastructure)
PGP
- 기밀성 + 무결성 + 인증 + 전자 서명을 활용한 송신 부인 방지
- 수신 부인 방지 제공하지 않음
- 메시지 부인 방지 제공하지 않음
PEM
- 기밀성 + 무결성 + 인증 + 송수신 부인 방지
- 높은 보안 (메일 유출 시에도 내용 확인 불가)
- 중앙집중식 키 관리 (구현이 어려움)
S/MIME
- 봉인된 데이터 + 서명 데이터 + 순수한 서명 + 전자메시지 인증 + 사용자 인증 + 메시지 무결성 + 송신자 부인방지
- S/MIME 구성요소
1) 공개키 암호화: RSA, DSA, Diffie-Hellman
2) 비밀키 암호화: 3DES, RC4, IDEA, DES, RC2
3) 인증서: X.509 ver3
4) PKI
이메일 헤더
- Received: 직접 메일을 보낸 발송 서버 및 발송자 전자우편 주소를 파악 가능
- From: 발송자의 전자우편 주소를 나타냅니다.
메일 서버 관리 (sendmail)
- /etc/mail/access 파일 option
1) OK : 무조건 수신 허용
2) RELAY : 메일 릴레이 허용
3) REJECT : 메일 수신/발신 거부
4) DISCARD : 메일 폐기
- /etc/aliases 파일: 메일을 지정된 사용자에게 전달
1) 예시: webmaster 계정으로 들어오는 메일은 user1, user2에게 전달
webmaster: user1, user2
2) /etc/aliases 파일 내용 변경 후 newaliases (또는 sendmail -bi) 명령어 실행 필요
- /etc/mail/local-host-names: Sendmail 설정 관련 파일 중 최종 수신지 도메인 설정 파일
- /etc/mail/virtusertable: 가상 메일 설정을 통해 여러 명의 User가 서로 같은 계정을 요구할 때의 곤란함을 해결
1) virtusertable 파일 내용 변경 후 makemap hash virtusertable < virtusertable 명령어 실행 필요
URL 메타 문자
? |
피라미터 구분자 |
& |
각각의 인자를 구분 |
= |
인자값을 인자로 전달 |
% |
16진수값 표현 |
+ |
공백 문자 표현 |
DRM 구성 요소
- 패키저: 컨텐츠를 메타데이터와 함께 배포 가능한 단위로 패키징
- DRM 컨트롤러: 배포된 컨텐츠의 이용권한 통제
- 클리어링 하우스- 컨텐츠 배포정책, 라이선스 및 요금 관리
DOI (Digital Object Identifier, 디지털 객체 식별자)
- “디지털 객체의 식별자(identifier of a digital object)”가 아니라 “객체의 디지털 식별자(digital identifier of an object)”를 의미
- 객체에 URL, 이메일 주소, 다른 식별자 및 설명 메타데이터 등의 식별 정보를 영구적으로 부여
- 객체의 데이터는 변할 수 있지만 DOI는 변하지 않음
- DOI 어플리케이션의 네트워크 내에서 고유한 식별성을 위해 항구성, 해석가능성, 메타데이터와 의미적 상호운용성 제공
https://www.doi.or.kr/wordpress/about_doi/
RDBMS 용어
- 릴레이션: 2차원 구조의 테이블
- 튜플: 행
- 속성(Attribute): 열
- 도메인: 속성이 가질 수 있는 값의 집합
- 스키마: DB에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조
- 차수(Degree): 속성의 수
- 카디널리티(Cardinality): 튜플의 수
전자화폐
- 인출 프로토콜: 은행이 사용자에게 전자화폐를 발급해 주는 절차
- 지불 프로토콜: 사용자가 자신의 전자화폐를 사용하여 상점에 지불
- 예치 프로토콜: 상점이 사용자로부터 받은 전자화폐를 은행이 결제
카드의 보안 코드를 칭하는 용어
- CVC(마스터카드), CID(아메리칸 익스프레스), CVV(비자카드)
Apache 보안 설정
- DocumentRoot 디렉터리를 별도의 파일 시스템으로 사용
1) DocumentRoot 디렉터리는 모든 웹 컨텐츠가 저장될 디렉터리 구조이므로, 이 컨텐츠는 웹을 통해 공개됨. 따라서 별도의 파일 시스템을 사용할 것을 권고
- /etc/httpd/conf/httpd.conf 파일 수정 (기본값: /var/www/html)
DocumentRoot “<디렉터리 경로>”
2) 웹 서버의 데몬은 chroot에 설치하여, 웹서버 데몬이 공격당했다고 하더라도 피해를 최소화
- 디렉터리 리스팅 방지
1) 웹 브라우저에서 사용자가 URL을 입력했을 때, 웹 컨텐츠가 없을 경우, 기본적으로 디렉터리 리스트를 보여주는 것을 방지
- /etc/httpd/conf/httpd.conf 파일 수정 (아래와 같이 Options 지시자에서 Indexes 옵션 제거)
<Directory "/var/www/html">
Options Indexes FollowSymLinks
</Directory>
- 심볼릭 링크 사용 방지
1) 심볼릭 링크를 사용하여 다른 중요한 디렉터리(Ex. root)에 접근할 수도 있으므로, 이를 방지
- /etc/httpd/conf/httpd.conf 파일 수정 (아래와 같이 Options 지시자에서 FollowSymLinks 옵션 제거)
<Directory "/var/www/html">
Options Indexes FollowSymLinks
</Directory>
- CGI 실행 디렉터리 제한
1) 사용자들이 CGI 스크립트를 어디에서든 실행할 수 있도록 할 경우, 악의적인 CGI를 업로드하여 임의의 명령을 실행시킬 수 있음
※ CGI(Common Gateway Interface): 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약. 즉, 사용자의 요청에 의한 서버의 응답
- /etc/httpd/conf/httpd.conf 파일 수정 (아래와 같이 ScriptAlias 지시자에서 지정)
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
- 아파치 및 OS 정보의 공개 수준 설정
1) 404 not found 페이지에서 아파치 버전과 OS 버전이 노출될 수 있으므로 공개 수준을 설정해야 함
- /etc/httpd/conf/httpd.conf 파일 수정
ServerTokens [설정값]
※ 설정값 종류
ProductOnly: 웹서버 종류만
Min: 웹서버 종류, 버전
OS: 웹서버 종류, OS
Full: 모든 정보와 사용된 모듈까지
- 파일 업로드 취약점 방지
1) AddType 설정으로 특정 확장자의 파일만 허용
AddType .html .php
- 기타 httpd.conf 옵션
1) KeepAlive On/Off: 특정 사용자의 지속적 작업 허용 여부 (On: 속도 개선 / Off: 동시접속량 증가)
2) MaxKeepAliveRequests 횟수: KeepAlive On 일 경우, 특정 사용자의 최대 요청 가능 수
3) KeepAliveTimeout 시간: KeepAlive On 일 경우, 타임 아웃 설정 시간
4) DirectoryIndex [경로/파일명]: 초기 페이지 문서 사용 순서
5) CustomLog [경로/파일명] [로그형식]: 로그 파일 경로
- 로그 형식: common, combined 등
MySQL 보안
- 외부 네트워크 사용자 접근 차단 방법
: my.cnf 파일에 bind-address=127.0.0.1 설정 (즉, 로컬 접속만 허용)
SQL Injection 방어 방법
- addslashes()
: 데이터베이스 질의 등에서 처리할 필요가 있는 문자 앞에 백슬래시를 붙인 문자열을 반환
- magic_quotes_gpc
: 모든 get, post, cookie 데이터에 자동적으로 addslashes() 실행
- mysql_real_escape_string()
: addslashes()의 확장 버전으로 볼 수 있으며, 기능은 동일하지만, 처리하는 문자가 더 많아짐
※ 기존 처리 문자열: 따옴표, 쌍따옴표, 백슬래시, NULL바이트
※ 추가 처리 문자열: \x00, \n, \r, \, \x1a
- Prepared Statement 사용
// This should REALLY be validated too
String custname = request.getParameter("customerName");
// Perform input validation to detect attacks
String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";
PreparedStatement pstmt = connection.prepareStatement( query );
pstmt.setString( 1, custname);
ResultSet results = pstmt.executeQuery( );
SQL Injection Prevention - OWASP Cheat Sheet Series
DB 권한 부여/회수 방법
- 권한 부여: GRANT (Ex. GRANT CREATE TABLE TO USER1)
- 권한 회수: REVOKE (Ex. REVOKE CREATE SESSION,ALTER USER TO USER1)
데이터베이스 보안 통제 방법
- 접근제어: 인증된 사용자에게 허가된 범위 내에서 시스템 내부의 정보에 대한 접근을 허용하는 기술적인 방법
- 추론통제: 간접적으로 노출된 데이터를 통해 다른 데이터를 추론하여 다른 데이터가 공개되는 것을 방지
- 흐름통제: 보안 등급이 높은 객체에서 낮은 객체로의 정보흐름을 제어
http://itwiki.kr/w/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EB%B3%B4%EC%95%88
'정보보안' 카테고리의 다른 글
정보보안(산업)기사 정리 - 시스템 보안 (0) | 2020.11.25 |
---|---|
정보보안(산업)기사 정리 - 취약점/공격기법 (1) | 2020.11.06 |
정보보안(산업)기사 정리 - 정보보안 일반 (0) | 2020.11.06 |
정보보안(산업)기사 정리 - 네트워크 보안 (0) | 2020.11.06 |
암호학 기본 개념 (0) | 2020.11.04 |