/ nslookup # nslookup > server 192.168.111.101 > 알고싶은 도메인
- Non-authoritative answer : 윈도우에서의 권한없는 응답과 같다.
/ 마스터 DNS 서버 세팅 # vi /etc/named.conf - 제일 밑에 아래의 내용을 넣는다.
zone "john.com" IN {
type master;
file "john.com.db";
allow-update { any; };
};
- 이때 'systemctl restart named'를 하면 에러가 나는데 이것은 'systemctl status named -l'을 하면 알 수 있다.
- 위 설정파일에 적었던 'john.com.db'파일을 'var/named'밑에 만들어주어야 한다. # vi /var/named/john.com.db - TTL(time to live) : dns의 ttl은 dns의 정보를 가져와서 기억하고 있는 시간이라는 뜻 - 시간단위를 H로 시간형식으로 표현할 수 도 있고 초로 표현할수도 있다. - SOA(start of Authority) : 레코드는 해당 도메인에 대해 네임서버가 인증(authoritative)된 자료를 갖고 있음을 의미
- 호스트pc에서 tcping으로 확인 - cmd에서 'tcping 192.168.111.101 21'
/ vsftpd 설정파일 # rpm -qc vsftpd
# ls -al /etc/vsftpd/
- ftpusers : 무엇인지 조사
- user_list : 무엇인지 조사
# vi vsftpd.conf - anonymous_enable=YES : 익명으로 접근 할 수 있는지 여부(안할때는 주석처리 함) - local_enable=YES : 무엇인지 조사 - write_enable=YES : 무엇인지 조사 - local_umask=022 : 무엇인지 조사 - anon_upload_enable=YES : 무엇인지 조사 - anon_mkdir_write_enable=YES : 무엇인지 조사 - xferlog_enable=YES : fpt로그 기록 여부 - connect_from_port_20=YES
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
# When SELinux is enforcing check for SE bool ftp_home_dir
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
# When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/xferlog
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode. The vsftpd.conf(5) man page explains
# the behaviour when these options are disabled.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd/banned_emails
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# When "listen" directive is enabled, vsftpd runs in standalone mode and
# listens on IPv4 sockets. This directive cannot be used in conjunction
# with the listen_ipv6 directive.
listen=NO
#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
# Make sure, that one of the listen options is commented !!
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
- 설정파일을 수정 한 수 restart를 한번 해준다. # systemctl restart vsftpd
/ vsftpd의 설치 위치 # rpm -ql vsftpd
- pub폴더의 권한을 보면 other유저의 권한은 쓰기(r), 실행(x)권한만 있다. - 해서 쓰기 권한을 줘야만 ftp로 파일을 업로드할 수 있다.
/ 파일질라 실행 - 익명접속 시 로그인 유형을 '일반'으로 놓고 사용자에 'anonymous'으로 놓으면 된다.
- 확인
- 접속 성공
/ ftp 업로드 시도 - pub파일 안쪽으로는 파일을 업로드하거나 폴더를 생성할 수 있는데, 바깥쪽에는 업로드하거나 파일 생성이 되지 않는다. - pub폴더 안의 파일이나 폴더 삭제는 되지 않는다.
/ vsftpd 로그확인 - 위치 및 파일명 : /var/log/xferlog # cat /var/log/xferlog
- 파일명 뒤에 a : 전송모드가 아스키 모드였을 때(아스키는 cat으로 읽을 수 있는것, b는 바이너리 모드. 바이너리 모드는 cat으로 읽을 수 없다.) - '_'(언더바)뒤의 i : input의 i이다. 클라이언트에서 서버측으로 업로드 하였을때 - '_'(언더바)뒤의o : output의 o이다. 클라이언트에서 다운로드 받았을때 - 그 뒤의 알파벳 > a : 익명계정 > g : 패스워드 인증을 거친 익명계정 > r : 패스워드로 인증된 사용자 - 물음표 : 익명 - 물음표뒤의 ftp : ftp방식 - 그 뒤는 계정이름 - * 뒤의 i or c > i : 작업 미완료(Incomplete) > c : 작업완료(complete)
/ root 연결 시도 - 계정을 root / password로 입력하고 접속해보기
- 서버에서 설정을 다시 해줘야 한다. - ftpusers, user_list에서 root를 주석처리 해준다. # vi /etc/vsftpd/ftpusers # vi /etc/vsftpd/user_list # systemctl restart vsftpd
- 파일질라에서 다시 root / password로 접속해본다.
- root계정이기 때문에 업로드/다운로드가 자유롭게된다.
/ 로그확인 * w, who로는 보이지 않는다. * netstat에서는 접속을 확인할 수 있다. * ps -ef | grep vsftpd # cat /var/log/xferlog
/ FTP 모드(능동 vs 수동) - 능동모드의 주체는 서버이다. - 수동모드의 주체는 클라이언트다. - 방화벽이 있을때 수동모드를 쓴다.
/ 오라클 데이터 딕셔너리 - 전용 뷰(view) 접두어 : user_, all_, dba_
/ SQL, PL/SQL 풀네임 - SQL : Structured Query Language - PL/SQL :Procedural Language
/ 현재 계정의 모든 테이블 목록 쿼리 # select * from tab;
/ 테이블의 데이터 조회 쿼리 - SELECT 가져올항목(모두 가져올 경우 *) FROM 테이블이름 WHERE 조건; - ex) SELECT * FROM EMPLOYEES WHERE first_name = 'Steven'; - EMPLOYEE테이블에서 first_name이 'Steven'인 데이터를 모두 가져와라
/ 조건절 LIKE - ex) SELECT * FROM EMPLOYEES WHERE first_name LIKE 'St%'; - 'St'로 시작하는 문자열 검색 -ex)SELECT * FROM EMPLOYEES WHERE first_name LIKE '%St'; - 'St'로 끝나는 문자열 검색 -ex)SELECT * FROM EMPLOYEES WHERE first_name LIKE '%St%'; - 'St'문자열이 들어가는(St로 시작하고 끝나는) 문자열 검색
/ USER_CONSTRAINTS 데이터 딕셔너리 - 제약조건을 위배하면 오류 메시지에 제약 조건명만 출력되는데, 이때 오라클이 부여한 제약 조건명으로는 어떤 제약 조건을 위반했는지 알 수 없다. - 이때 USER_CONSTRAINTS를 검색하면 확인할 수 있다. # DESC USER_CONSTRAINTS; - TABLE_NAME : 테이블명 - CONSTRAINT_NAME : 제약조건명 - CONSTRAINT_TYPE : 기본키/외래키 정보 - R_CONSTRAINT_NAME : 외래키인 경우 PRIMARY KEY를 참조했는지 - STATUS : 제약조건 활성화 정보 - SEARCH_CONDITION : 검사 제약 조건으로 지정된 조건
/ 특정 테이블에 지정된 제약조건 검색 # SELECT 컬럼명 FROM USER_CONSTRAINTS WHERE TABLE_NAME='테이블명';
/ 테이블 예명(alias) - 쿼리 작성 시 테이블 이름이 너무 길 경우 예명을 줄 수 있다. - 사용법 : 테이블 이름 뒤에 예명을 따로 적어준다. - ex) SELECT * FROM USER_CONSTRAINTS C1 WHERE TABLE_NAME='EMPLOYEES';
/ 수업 때 진행 한 쿼리 - USER_CONSTRAINS : 유저가 소유한 모든 제약 조건을 볼 수 있다. - USER_CONS_COLUMNS : 컬럼에 할당된 제약 조건을 볼 수 있다. - 아래는 EMPLOYEES테이블의 제약조건을 검색하는 쿼리이다.
SELECT
c2.column_name, -- 컬럼명
c1.constraint_name, -- 제약조건명
c1.constraint_type, -- 기본키/외래키 정보
c1.search_condition, -- 검사 제약 조건으로 지정된 조건
c1.r_constraint_name -- 외래키인 경우 PRIMARY KEY를 참조했는지
FROM
user_constraints c1,
user_cons_columns c2
WHERE
c1.constraint_name = c2.constraint_name
AND c1.table_name = 'EMPLOYEES'
ORDER BY 1;
- 결과
/ 실습 문제 - USER_TABLES를 통해 'employees'테이블의 테이블스페이스 및 레코드 건수, 몇 개의 block으로 이루어 졌는지, 평군 row size, 최근 통계정보 생성일자를 조회하시오. - 참고 : USER_TABLES(사용자가 작성한 테이블 확인하는 뷰), USER_TAB_COLUMNS
select tablespace_name, num_rows, blocks, last_analyzed from user_tables where table_name = 'EMPLOYEES';
- 아래의 쿼리로도 확인가능하다.
SELECT TABLESPACE_NAME, NUM_ROWS, BLOCKS, last_analyzed FROM ALL_TABLES WHERE TABLE_NAME='EMPLOYEES';
SELECT RESOURCE_NAME, RESOURCE_TYPE, LIMIT FROM DBA_PROFILES;
- 비밀번호 기한을 제한없음으로 변경
ALTER PROFILE default LIMIT PASSWORD_LIFE_TIME UNLIMITED;
- 결과
/ DBA_PROFILES 테이블 뷰 - PASSWORD_LIFE_TIME : 비밀번호 유효 기간 - PASSWORD_REUSE_TIME : 암호가 재사용 될 때까지의 날 수 - PASSWORD_REUSE_MAX : 암호가 재사용 될 때까지의 날 수 - PASSWORD_VERIFY_FUNCTION : 비밀번호 복합성 검사를 수행할 PL/SQL - PASSWORD_LOCK_TIME : 암호가 기간만료되어 계정이 잠겨진 채로 남아 있었던 일수 - PASSWORD_GRACE_TIME : 유예기간 - 참고 링크
/ 프로파일 만들기 실습
CREATE PROFILE KIMYJ limit
FAILED_LOGIN_ATTEMPTS 5 -- 로그인 실패 횟수
PASSWORD_LOCK_TIME 3 -- 암호가 기간 만료되어 계정이 잠겨진 채로 남아 있었던 날 수
PASSWORD_LIFE_TIME 20 -- 날 수로 표시한 암호의 수명으로 이 기간이 지나면 기간 만료됨
CPU_PER_SESSION 2000 -- 1/100 초 단위로 측정한 총 CPU이용시간
;
- 결과 확인
[4,5교시 - 시스템 보안]
/ cron.daily # cd /etc/cron.daily
/ at - 사용법 : at 옵션 시간 - 사용법 : at 시간 날짜 -f test.sh - ex) at 1410 21122021 : 2021년 12월 21일 오후2시 10분 - t옵션을 사용하는 경우 # at -t 202112211410 : 2021년 12월 21일 오후2시 10분 - 지금부터 1분후에 실행 : at now+1 minutes
/ at 실습 1 # at -t 202205191800 --2022년 5월 19일 오후6시에 한번 실행 # echo "Hello!" # mkdir at_test
/ at 실습 2 # at now+2 minutes
/ at 생성 목록 # at -l
/ at 실행 예정 항목 삭제 # at -d 항목번호
/ crontab 실습 - 매월 28일 15시 00분에 user이름 'wednesday'를 만들기 # 0 15 28 * * root useradd wednesday - '/home'디렉토리 밑에 생긴 'wednesday'디렉토리를 매월 28일 15시 01분에 'wednesday'디렉토리가 '/backup'디렉토리에 백업되도록 하여라 # 1 15 28 * * root cp /home/wednesday /backup - 매일 새벽3시에 'rdate -s time.bora.net'이 실행되게 하여라 # 0 3 * * * rdate -s time.bora.net - 매시 1분에 시간별 액션을 실행한다. # 1 * * * 8 액션 - 매주 월~금 11:59에 백업 스크립트를 실행하게끔한다. # 59 11 * * 1-5 백업스크립트 - 9시~17시 사이에 매 15분 마다 프로그램 실행된다. # */15 9-17 * * * 프로그램 - 매월 1~15일 정오와 20~25일 정보, 그리고 17일의 정보에 실행된다. # 0 12 1-15,20-25,17 * * 프로그램 - 1분마다 시간별 액션을 실행한다. # * * * * * 액션
/ at 실습 - 현재 시점에서 1분후에 mkdir 명령어를 실행해서 testdir이 만들어지도록 # at now+1 minutes [엔터] mkdir testdir [엔터] 컨트롤+D - 2022년 5월 19일 오후7시에 testfile이 만들어지도록 하여라 # at -t 202205191900 [엔터] touch testfile [엔터] 컨트롤+D
/ 복습 - dns - dns가 설치되어 있는지 # rpm -qa | grep bind - yum 설치가 가능한지 # yum list bind bind-chroot - 시작, 활성화, 활성여부확인 # systemctl start named # systemctl enable named # systemctl status named - 53포트를 사용하는 네트워크 인터페이스를 확인하여라 # netstat -antup | grep 53 - dns 설정파일 위치 확인 # rpm -qc bind - name편집(13, 14, 21번째 줄) # vi /etc/named.conf # listen-on port 53 { any; }; # listen-on-v6 port 53 { none; }; # allow-query { any; }; - 편집 후 conf파일에 문제가 없는지 체크(똑 떨어지면 문제가 없는것) # named-checkconf - DNS 서버 재시작 # systemctl restart named - nslookup, dig 확인 # nslookup www.naver.com 192.168.111.150 # dig @192.168.111.150 www.naver.com - netstat으로 LISTEN확인 # netstat -antu | grep 53 - 방화벽 설정 - firewall-config > 영구적 > 서비스의 dns체크 > 옵션에서 Firewalld 리로드 - 방화벽 확인 # firewall-cmd --list-all - 호스트pc에서 nslookup확인 - cmd에서 nslookup www.google.com 192.168.111.150
/ 실습대비 - CLI 모드 서버 설치 : 최소설치, net-tools와 bind-utils를 설치하여 ifconfig와 nslookup이 실행되도록 한다. - yum -y install net-tools bind-utils로 설치해준다.
/ 데이터베이스 보안 설계 - 데이터베스 보안 : 내부 및 외부자가 데이터베이스 내에 저장된 조직의 주요 기밀 정보에 불법적으로 접근하는 것을 막는 것 - 보안 설계 : 데이터베이스에 저장된 데이터 보호를 위한 설계에 초점을 맞춘 것 - 보안 위협들은 사용자의 실수나 오용, 내부 사용자의 권한 남용, 비정상적인 접근, 취약점들로부터 시작
/ 주요 위협 요소 - 일반적인 데이터베이스 위협 > SQL Injection > 악성 프로그램 삽입 - 사용자에 대한 식별 및 인증 위협 > 사전 공격, 무작위 대입공격, 사회 공학적 기법 - 데이터 유출 위협 > 암호화 되지 않은 데이터 > 안전성이 확인되지 않은 암호 모듈을 사용하는 경우 - 권한 오남용 위협 > 허용된 권한보다 더 많이 부여된 접근 권한 > 악의적인 목적으로 허용된 권한 범위를 벗어나는 경우 - 암호 모듈 오용 위협 > 안전성이 검증되지 않은 암호 모듈 사용 > 적합하지 않은 암호 모드 사용 - 암복호화 키 및 마스터 키 노출 위협 > 데이터 암호화 시 키 노출 - 프로젝트 수행과정에서의 데이터베이스 접근 허용 위협 > 외부 작업자가 자사의 데이터에 접근할 수 있는 권한을 부여 - 운영과정에서 권한에 대한 관리 소흘로 인한 침해 발생 위협 > 개발자에게 DBA 권한을 설정함 - 접근통제 우회 > 디폴트계정 또는 단순 계정 등 계정번호와 비밀번호가 동일할 경우 > 계정 및 패스워드의 정책 설정이 미흡한 경우 - 데이터베이스 정보의 불법 열람 및 변조/삭제 위협 > 데이터베이스에 저장된 주요 정보에 대해 암ㅎ화가 미흡한 경우
/ 데이터베이스 보안 설계하기 1. 접근제어 설계 1) 정보 식별(right information) - 데이터베이스, 계정, 테이블/뷰, 컬럼 2) 사용자 식별(right people) 3) 접근 방법(right form) 4) 접근 시간(right time) 2. 암호화를 설계 - 데이터베이스에 접속할 수 있는 사용자에 대한 정의 - 데이터베이스에 접속하는 사용자 식별에 대한 방법 - 암호화 대상 컬럼의 범위 정의 - 암호화 컬럼에 대한 복호화 권한 통제 수행 - 암호화 키를 위한 알고리즘과 대상 정의 - 암호화 키 사용에 대한 로깅 수행 1) 복호화 권한 통제 - 사용자 식별, 암호화 대상 컬럼, 암호화 컬럼에 대한 복호화 권한 통제, 비인가 사용자에 대한 통제 2) 암호화 키 및 알고리즘을 이용하여 구현 - 암호화 키 : 암호화 알고리즘 + 파라미터 키 - 암호화 방식 : 대칭형(암호화 키와 복호와 키 동일), 비대칭형(암호화 키와 복호화 키 다름) - 대칭형 알고리즘 : DES, 3-DES, AES, SEED, ARIA, MASK - 비대칭형 알고리즘 : RSA, DSA 3. 작업 결재를 설계 1) 결재 대상을 정의 - 사용자 중심, 정보 중심, SQL 중심 2) 결재자를 정의 3) 결재 사용자 관리 4) 결재자 관리 4. 취약점을 분석/설계 1) 데이터베이스 환경을 적정하게 구축 2) 계정 관리를 한다. 3) 패스워드 관리 4) 권한 관리 5) 인증 관리 6) 원격접속 관리 - 방화벽 구축 - 기본 서비스 포트 사용 자제 - 네트워크 트래픽 암호화 - 데이터베이스 서버가 있는 시스템의 운영체제 강화 - 보안 패치의 적용
/ 딕셔너리 조회 쿼리 SELECT * FROM DICTIONARY WHERE table_name LIKE 'USER_T%' AND ROWNUM < 10;
[학습내용] • 데이터베이스 사용 용도 분석 • 사용자 요구사항 분석 • 사용자 요구사항 명세서 작성
1. 데이터베이스 사용 용도 분석은 - 데이터베이스 보안 설계 이전에 가장 먼저 파악하여야 하는 작업이 사용하는 데이터베이스의 사용 용도를 분석하는 일임
2. 사용자 요구사항 분석 - 데이터베이스 사용자 요구사항을 분석하는 과정을 숙지하고 단계별 역할과 산출물을 숙지해야 함 - 사용자 요구사항 도출 → 사용자 요구사항 분석 → 사용자요구사항 기록
3. 사용자 요구사항 명세서 작성 - 데이터베이스 구축을 위하여 요구된 사용자 요구사항을 분석하여 최종적으로 사용자 요구사항 명세서를 작성해야 함 - 사용자 요구사항 분석 → 메타데이터 수집 → 사용자 뷰 자료 수집 → 자료 사전 작성 → 자료량과 패턴 조사 → 사용자 요구사항 명세서 작성
데이터베이스 보안 위협 분석
1. 데이터베이스 보안 위협 2. 데이터베이스 보안 목적 3. 데이터베이스 보안 필요성
1. 데이터베이스 보안 위협 - 데이터베이스 보안은 내부 및 외부자가 데이터베이스내에 저장된 조직의 주요 기밀 정보에 불법적으로 접근하는 것을 막는 것임
2. 데이터베이스 보안 목적 - 데이터베이스 보안의 목적은 위협 요소 식별·분석 및 적절한 통제를 통해 불확실한 이벤트의 발생 위험을 감소시키고 수용 가능한 수준(Acceptable Level)으로 최소화하는 것
3. 데이터베이스 보안 필요성 - 권한이 없는 사용자의 부적절한 접근을 막는 동시에 정당한 권한을 갖고 있는 사용자는 정보시스템이 서비스 요구를 거부하지 않도록 보호할 필요가 있음
[데이터베이스 보안 위협]
1. DB 보안 위협 개요
1) 데이터베이스 보안 - 데이터베이스 내에 저장된 조직의 주요 기밀 정보에 내부 및 외부자가 불법적으로 접근하는 것을 막는 것. - 데이터베이스에 저장된 데이터를 인가하지 않은 변경·파괴·노출·비일관성 등을 발생시키는 외부 위협들로부터 보호하는 것
2) 데이터베이스 보안 설계 정보보안의 범주에서도 데이터베이스에 저장된 데이터 보호를 위한 설계에 초점을 맞춘 것
3) 데이터베이스의 보안 위협 발생 요인 - 사용자의 실수 및 오용 - 내부 사용자의 권한 남용 및 비정상적인 접근 - 데이터베이스에 대한 알려진 취약점들
2. 일반적인 데이터베이스 위협
1) 악의적 목적을 가진 외부의 비인가 사용자, 악성 프로그램 삽입 데이터베이스의 중요 정보 유출
2) SQL injection 공격 - 입력 값에 대한 검증 미비로 인한 위협 - 로그인 인증 우회를 통해 데이터베이스 데이터 열람·유출 및 데이터베이스 - 서버에 시스템 명령 실행 - 파일 업로드에 대한 취약점이 존재할 경우 웹 쉘(web shell) 등을 실행하여 - 데이터베이스의 데이터에 접근
3. 케이스별 데이터베이스 위협
1) 사용자에 대한 식별 및 인증 위협 (1) 사용자 식별 및 인증 - 데이터베이스에 접근하기 위한 가장 기본적인 단계 (2) 보안 위협 요인 - 취약한 인증 수준 - 추측하기 쉬운 비밀번호의 사용 (3) 보안 위협 형태 - 사전 공격(dictionary attack) - 무작위 대입 공격(brute force attack) - 사회 공학적 기법(social engineering)
2) 데이터 유출 위협 (1) 암호화되지 않은 데이터 - 네트워크 도청, 파일 백업, 정당한 사용자 및 미인가 사용자에 의한 데이터베이스 검색 등을 통하여 데이터 유출 가능
(2) 암호화된 데이터 - 안전성이 확인되지 않은 암호 모듈을 사용하는 경우 악의적인 사용자에 의하여 암호문 해독 가능
3) 권한 오남용 위협 (1) 권한 오·남용 - 데이터베이스의 데이터 접근 권한이 업무 사용을 위해 허용된 권한보다 더 많이 부여 - 정당한 사용자가 악의적인 목적으로 허용된 범위를 넘어서 인가되지 않은 작업 수행 (2) 시스템의 취약성 - 시스템의 취약점을 이용하여 불법 권한 상승 및 계정 정보 획득
4) 암호 모듈 오용 위협
- 데이터베이스의 데이터를 암호화하기 위해 안전성이 검증되지 않은 암호 모듈을 사용하거나, 적합하지 않은 암호 모드를 사용하는 경우 암호문 해독 가능 - 데이터가 한 블록 이상의 크기를 가지는 경우 블록 암호 알고리즘을 적용하면 사전 공격에 의해 해독 가능 - 동일 평문에 대하여 동일 암호문이 생성되면 암호문을 통해 암호 키 추측 가능
5) 암·복호화 키 및 마스터 키 노출 위협 (1) 암·복호화 키 안전 관리 - 데이터 암호화 시 사용되는 키가 노출되면 암호화된 데이터를 복호화 할 수 있기 때문에 키의 안전 관리는 매우 중요 - 데이터를 암호화하는 경우 키가 인가되지 않은 제3자에게 노출되지 않도록 안전하게 보관 필요
(2) 암·복호화 키 사용법 - 마스터 키를 통하여 암호화 - 실제 사용 시점에만 임시로 복호화 하여 사용
(3) 암·복호화 키 노출 시 대처 방안 - 키 변경 : 신규 데이터는 변경된 키를 사용하여 암호화 : 기존 암호문은 마이그레이션 작업을 통하여 신규 암호문으로 변경
6) 프로젝트 수행과정에서의 데이터베이스 접근 허용 위협 - 프로젝트에 참여한 외부 작업자가 자사의 데이터에 접근할 수 있는 권한을 부여함으로써 데이터 유출이 발생함 - 프로젝트 목적상 데이터베이스를 사용해야 하는 경우, 보안서약서를 작성하게 하고 추가적인 물리적인 보안 통제를 적용함으로써 정보 유출을 방지하는 절차가 있어야 함
7) 운영과정에서 권한에 대한 관리 소홀로 인한 침해 발생 위협 - 개발자에게 DBA 권한을 설정함으로써 개발자가 직접 데이터베이스에 접근하여 정보 유출 가능 - 잘못된 사용자 권한 설정으로 비정상적인 데이터 노출 및 외부 유출 발생
8) 접근 통제 우회 위협 (1) 디폴트 계정 및 패스워드 동일 - 공급자에 의해 출하 시 설정되는 디폴트(default) 계정 또는 단순 계정 등 계정번호(ID)와 비밀번호 동일 : 암호 추측 공격, 사전 공격 등을 통해 계정 확인 가능 : 데이터베이스의 자료 유출 및 변조 등 발생 (2) 계정 및 패스워드 정책 미흡 - 계정 및 패스워드의 정책 설정이 미흡한 경우 무차별 공격에 의해 패스워드 크래킹 가능
9) 데이터베이스 정보의 불법 열람 및 변조·삭제 위협 (1) 보안 위협 요인 - 데이터베이스에 저장된 주요 정보에 대해 암호화가 미흡한 경우 비인가자에 의해 정보 노출 또는 변조 가능 (2) 보안 니즈 현황 - 데이터베이스에 저장된 개인정보, 금융 관련 정보, 게임 관련 정보 탈취 시도 증가 : 데이터베이스 보안에 대한 요구사항 증가
(3) 보안 방법 - 공개키(PKI: Public Key Infrastructure) 기반의 강력한 암호화 기능 및 검증 기능 제공 : 기존 데이터베이스에 대한 불법적 접근 방지 - 사용자가 데이터베이스의 내용을 추출하여도 암호화된 상태의 데이터베이스 기밀성이 유지되는 시스템 구축
[데이터베이스 보안 목적]
1. 개요
1) 명심해야 될 사항 (1) “보안에 100%는 없다!” (2) “관리 범위 100% 충족하는 기술적 대안은 없다!” (3) “방화벽 구축으로 완벽히 보호되지 않는다!” (4) “보안은 기술만으로 해결되지 않는다!”
2) 데이터베이스 보안 (1) 정보보안의 3요소 정보보안의 목적은 기밀성, 무결성, 가용성 등을 유지하는 것 (2) DB보안의 목적 DB에 저장된 데이터를 공개·노출, 변조·파괴·훼손, 재해·재난 등의 위협으로부터 보호하여 기밀성, 무결성, 가용성 등을 확보하는 것
[3,4,5교시 - 시스템 보안]
/ 리눅스 bind, bind-chroot란 - bind서비스의 최상위경로가 바뀌지 않게 해주는 패키지
/ bind 설치 정보
/ bind, bind-chroot 설치 # yum -y install bind bind-chroot # systemctl restart named # systemctl enable named # systemctl status named (옵션 -l : 상태확인 메시지 확인가능)
/ vi /etc/named.conf
- listen-on port 53 { any; }; 모든 포트 외부 접근 허용 - listen-on-v6 port 53 { none }; 모든 포트 외부 접근 비허용 - allow-query { any; }; 외부에서 오는 query를 허용할 IP 혹은 IP대역 설정 - 저장 후 'named-checkconf'로 확인 : 똑 떨어지면 이상X - 저장 후 'systemctl restart named' - 계속 대기중인 'standalone'방식이다.(systemctl로 하는 애들은 대부분 standalone이다.)
/ DNS 질의 순서 - 리눅스에서는 $ -> /etc/host.conf -> /etc/hosts -> DNS 순으로 찾는다. - 윈도우에서는 $ -> hosts.ics -> hosts -> DNS
/ [여담] CEO, CFO, CCO, CIO, 각 풀네임 알아두기 - CEO : - CFO : - CCO : - CIO : - CISO : 정보보호 최고 책임자 > 1) 정보보호 관리체계의 수립 및 관리, 운영 > 2) 정보보호 취약점 분석, 평가 및 개선 > 3) 침해사고의 예방 및 대응 > 4) 정보보호 사전 보안성 검토
/ bind의 설정파일 확인 # rpm -qc bind # ps -ef | grep named
* rndc 원격제어 : 953/tcp 포트
/ dns 방화벽 설정 # firewall-config - 영구적 > 체크 DNS > 옵션에서 firewalld 다시 불러오기 or # firewall-cmd --permanent --add-port=53/tcp # firewall-cmd --permanent --add-port=53/udp # firewall-cmd --permanent --add-service=dns # firewall-cmd --reload # firewall-cmd --list-all - 확인 'firewall-cmd --list-all'
/ nslookup으로 확인 - 빨간색으로 표시한 부분은 처음 다녀오는 것이라 조금 느리게 응답이 되었던 부분이다. - 두번째로 질의를 하면 바로 응답이 온다.
proxy
/ 나중에 실습할 것 - 취약점분석도구 OWASP_ZAP, BurpSuite - CentOS7 , squid (서버, client)
/ squid - 설치되어있는지 확인 및 설치 가능한지 확인 # rpm -qa squid # rpm -qa | grep squid # yum list squid
* 설치할때는 install, 삭제할때는 remove또는 erase
- 설치 # yum -y install squid
- config파일 찾기
* 리눅스 마스터 시험에서 아래 빨간 부분에 들어갈 문자열이 무엇인지 찾는 문제가 종종나온다.