- 템플릿 부분을 # $template TmplMsg,"/var/log/rsyslog/%hostname%_%fromhost-ip%__messages_%$YEAR%-%$MONTH%-%$DAY%.log" - 로 하게되면 호스트네임과 from아이피가 같이 나오게 된다.
swatch
/ swatch - 로그를 분석해주는 솔루션 - 원격서버 로그분석도 가능(rsyslog) - Simple Log Watcher - 로컬 로그도 볼 수 있고 원격 로그도 볼 수 있다. - swatch를 실행한 다음부터 설정한 내용들을 검출할 수 있다. (이전것은 검출이 안된다.)
/ 설치 확인 # rpm -qa swatch # rpm -qa | grep swatch
/ 설치 # yum list swatch - 위의 명령어를 날리면 못 불러온다. - 레포지토리 확인 # yum repolist
- 레포를 더 추가해줘야 한다. # yum -y install epel-release
- 여담 : noarch -> 설치할때 32bit/64bit 상관 안한다.
# yum repolist - 하면 에러난다.
- yum 관련된 파일이 있는 곳으로 이동 # cd /etc/yum.repos.d/
/ 수정 # vi epel.repo
- 위의 내용을 - baseurl앞의 #을 지우고, metalink에 #을 추가한다.
- 이후 다시 yum repolist를 해본다. - 증설된것을 확인할 수 있다.
- 이제 yum에서 확인할 수 있다.
- 설치 # yum -y install swatch perl-File-Tail
/ swatch는 설정파일을 만들어야 줘야 한다. # cd ~ # touch ./.swatchrc : '.swatchrc'파일 만들기 # ls -al
/ 압축 - xz > bzip2 > gzip2 > zip > compress > tar 순으로 압축률이 좋다. - tar, compress는 용량압축을 하지 않는다. - 한개 파일에 대해서만 용량을 줄일 수 있다. - 압축 해제 > xz -d 파일명 > unxz 파일명 > bzip2 -d 파일명 > gunzip -d 파일명 > zip -d 파일명 > unzip 파일명
- file.tar.xz > 1. unxz, xz -d > 2. tar -xvf > tar -Jxvf : 1,2번을 한번에 한다.
- file.tar.bz2 > 1. bunzip2, bzip2 -d > 2. tar -xvf > tar -jxvf : 1,2번을 한번에 한다.
- file.tar.gz > 1. gunzip, gzip -d > 2. tar -xvf > tar -zxvf : 1,2번을 한번에 한다.
/ 데이터베이스 취약점 분석 - 모의 해킹을 실시한다. > 데이터베이스 서비스 프로세스의 여부 점검 > 데이터베이스의 패스워드를 브루트포스, 딕셔너리 어택 등 패스워드 크래킹 기법을 통해 안전하지 못한 데이터베이스 패스워드를 추출여부 점검 > 버퍼 오버플로어 공격에 대한 데이터베이스 서비스 오동작 여부 점검 > DoS공격에 대한 데이터베이스 다운이나 서비스 불가 여부 점검 - 내부 보안감사를 실시한다. > 패스워드를 포함하는 데이터베이스 사용자 계정 정보 > 모든 프로파일과 각 프로파일의 지원 정보 > 데이터베이스 사용자의 다른 역활에 부여된 역활 정보 > 데이터베이스 내의 모든 역활에 대한 상세 정보 > 데이터베이스 사용자의 다른 역활에 대한 상세 정보 > 데이터베이스 사용자의 다른 역활에 부여된 시스템 역활 정보 > 데이터베이스 사용자에게 부여된 시스템 권한 정보 > 데이터베이스 프로세스와 세션 정보
/ 데이터베이스 취약점 체크리스트를 점검한다.
/ 오라클 현재 접속한 SESSION 정보 조회
select sid, serial# from v$session where audsid = sys_context('USERENV','SESSIONID');
/ 시스템 리소스 사용현황 조회
select * from v$resource_limit where
resource_name in ('processes','sessions','transactions');
/ 현재 실행중인 세션이 날리는 쿼리를 조회
SELECT
a.sid, -- SID
a.serial#, -- 시리얼번호
a.status, -- 상태정보
a.process, -- 프로세스정보
a.username, -- 유저
a.osuser, -- 접속자의 OS 사용자 정보
b.sql_text, -- sql
c.program -- 접속 프로그램
FROM
v$session a,
v$sqlarea b,
v$process c
WHERE
a.sql_hash_value=b.hash_value
AND a.sql_address=b.address
AND a.paddr=c.addr
AND a.status='ACTIVE';
/ 보안 데이터베이스의 테스트 및 점검 - 데이터베이스 접근제어 보안적용을 시험한다. > 로그인 제어 > SQL 통제 > 로깅(감사) > 경보 > SQL 마스킹 > 모니터링 > 보안 정책 관리 > 보고서 > 장애 대응 > 로그 관리 - 패킷 손실 시험을 실시한다. - Long SQL 시험 - 성능 시험
- 데이터베이스 작업결재 보안 적용을 시험한다. - 시험 항목 > 결재 시스템 > 작업 결재 통제 > 로깅(감사) > 모니터링 > 보안 정책 관리 > 보고서 > 로그 관리
Q. 데이터베이스 작업결재 테스트 항목 중 보안 정책 관리에 대한 사항으로 옳지 않은 것은 무엇인가? 1) 장기 미사용 정책, 미사용 사용자를 식별할 수 있는 기능이 있는지 여부 2) 감사 정보에 대하여 백업 및 복구가 가능한지 여부 3) 작업결재 정책에 대한 변경 이력을 관리하는지 여부 4) 작업결재 정책에 대한 백업 및 복구가 가능한지 여부
답 : 2번 해설 : 2번은로그관리에 대한 내용이다.
[3,4,5교시 - 시스템 보안 구축]
잠깐 log
/ /var/log의 하위 파일 및 폴더 - boot.log: 부팅이 되면서 데몬들이 잘 올라왔나 기록 - dmesg > 리눅스 부팅 메시지, 리눅스 부팅 로그 > 부팅시 드라이버 오류 등을 확인할 수 있다. > 커널 관련된 로그도 기록된다. - glusterfs(GFS) : 서버 여러개를 묶는것 - messages : 해당 운영체제가 돌고 있는 온갖 정보를 기록 - samba : 리눅스 서버와 윈도우 서버간의 디렉토리 자원을 공유(nfs는 리눅스들 끼리) - secure : 보안인증/권한에 대한 기록
- btmp : cat으로 읽을 수 없다. Data파일, 바이너리 파일이기 때문, 명령어로 읽어야 한다. > 명령어 : lastb, 로그인 실패 이력 - lastlog : cat으로 읽을 수 없다.Data파일,바이너리 파일이기 때문, 명령어로 읽어야 한다. > 명령어 : lastlog, 마지막 로그인 기록 > lastlog -t 7 : 7일동안 로그인한 기록을 보여줘 - wtmp : cat으로 읽을 수 없다. Data파일,바이너리 파일이기 때문, 명령어로 읽어야 한다. > 명령어 : last, 로그인/로그아웃/리부팅 기록, 옵션으로 '-n 숫자'를 하면 최근 몇건의 행적을 알 수 있다. * /var/run/utmp : cat으로 읽을 수 없다. Data파일,바이너리 파일이기 때문, 명령어로 읽어야 한다. > 명령어 : who, w, finger, 현재 로그인 이력
* 각 명령어와, 결과화면, 사용방법, 파일이 어디에 있는지 등등을 잘 알고 있어야 한다.
/ pts - Pseudo terminal Server
/ 히스토리 파일(history) - /root/.bash_history에 있다. - 바로 저장을 하진 않고 메모리에 저장했다가 나중에 반영된다. - 'history -a'를 하면 메모리에 있던 내용이 .bash_history에 저장된다.
/ 어카운트의 프로세스와 관련된 로그 - /var/account/pacct - 활성화를 시켜줘야 파일에 로그가 쌓인다. - 활성화 명령어 : accton /var/account/pacct - pacct도 Data파일이라 읽는 명령어가 따로 있다. - 읽는 명령어 : lastcomm, acctcom(centos에서는 되지 않는다..)
/ sulog - 위치 : /var/log/sulog - 먼저 활성화를 시켜야 파일이 있다. - 활성화 시키기 # vi /etc/login.defs - 아래 이미지는 중요한 부분
- 맨 밑에 내용을 적을것이다. # SULOG_FILE /var/log/sulog - 확인
- /etc/rsyslog.conf을 수정해준다. # vim /etc/rsyslog.conf - RULE 쪽에 수정해준다. - info 이상 레벨일때 저장하도록 세팅한다.
- 작업 후 'systemctl restart rsyslog'를 해준다. - 확인 (sulog가 생겼다.)
- 테스트 # su - centos 했다가 #exit - cat /var/log/sulog
* 여담 : Ctrl+f - 한페이지 앞으로 / Ctrl+b - 한페이지 뒤로
다시 rsyslog
/ rsyslog.conf 수정 # vi /etc/rsyslog.conf - ModLoad immark부분의 #지우기
/ 잠시 RULES 부분설명 - 작성 규칙 > 점(.)으로 구분되어 있다. > 점(.)앞에는 파실리티(facility)라고 한다. 서비스, 메시지의 종류이다. ex) mail.none에서 mail / authpriv.*에서 authpriv > auth : 사용자 인증(로그인) > authpriv : 인증(보안, 승인, 권한) > 파실리티 중에 local은 0~7까지 있다. > 점(.)뒤에는 로그 우선순위의 이름이 들어간다. (*은 모든 로그를 다 포함한다는 뜻이다.) > *.info 라면 info레벨 부터 쌓으라는 말이다. > mail.none이라면 쌓지 말라는 뜻이다. > 따라서 *.info;mail.none;authpriv.none;cron.none는 모든것에 대해 info이상 다 쌓되, mail/authprivcron는 제외라는 뜻 > omusermsg : 사용자에게 보내는 메시지
/ local 로그가 기록되는 레벨 - local0 : 로그를 작성하지 않음 - local1 : FATAL - local2 : ERROR - local3 : WARN - local4 : INFO - local5 : DEBUG - local6 : TRACE - local7 : ALL
-- 테이블 생성
create table case_hp(hp varchar2(16));
commit;
-- 확인
select * from case_hp;
-- 데이터 삽입
insert into case_hp values ('010-1111-1111');
insert into case_hp values ('010-2222-2222');
insert into case_hp values ('010-3333-3333');
insert into case_hp values ('010-444-4444');
commit;
-- substr로 010-****-0000 형태로 표시하기
select hp, substr(hp,1,4)||'****'||substr(hp,-5) as "masking" from case_hp;
[3,4,5교시 - 시스템 보안 운영]
rsyslog
- CentOS 5.6 에 syslog라는것이 있었다. 로그관리를 하는 것. initd > 이때쓰던 명령어 'service snmpd restart' > /etc/syslog.conf - CentOS 7에서는 rsyslog를 쓴다. systemd > 지금쓰는 명령어 'systemctl restart snmpd' > /etc/rsyslog.conf - 로그관리 : 어떤 내용이 어디에 저장될지 정해주는게 rsyslog이다. - 보통 소규모에서는 로그 서버를 구축하지는 않고, 수천대의 장비를 운영하는 회사에서 로그서버를 구축한다. - 네트워크 장비, 보안장비 등 장비를 가리지 않는다. - 로그서버에서 로그 관리를 받는다.
/ 준비 - 101번 : 로그 수집서버 - 클라이언트 : 로그 수집 대상서버 - 실습 > Messages : 리눅스 커널 로그 및 기본 로그 > secure : 원격으로 로그인할때 성공실패여부, su를 할때도 저장된다.
/ 패키지 설치 - 기본으로 설치되어 있다. # rpm -qa | grep rsyslog
- 더 높은 패키지 버전이 있나 확인 # yum list rsyslog * 버전정보 : (8.24.0-57)주.부.패치-릴리즈
- 업데이트 # yum -y update rsyslog * install과 update의 차이점 : install은 이전에 설정했던 설정파일이 다 날라간다.
/ /var/log로 이동 #cd /var/log - 백업관리를 해주는 프로세스 : logrotate(/etc/logrotate.conf)
/ 설정파일 확인 # rpm -qc rsyslog
/ /etc/rsyslog.conf 파일 변경 - 크게 3부분으로 나뉘어 진다. - 모듈, GLOBAL DIRECTIVES, RULES - ROLES 부분은 시험에 짱 많이 나옴
- authpriv : 인증 권한에 관련된 모든 내용 - authpriv.* ?TmplAuth : 인증관련된 내용은 TmpAuth에 남겨라 - *.info : info보다 상위 개념 내용들 - mail.none : 메일에 관련된 내용은 남기지마라 - authpriv.none: 인증에 관련된 내용은 남기지 마라 - cron.none : 크론과 관련된 내용도 남기지 마 - ?TmplMsg : 여기에다가.
/ 설정파일을 수정하였으니 restart를 한다. # systemctl restart rsyslog
- 네트워크 장비의 성능과 핵심 기능의 현 상태, 기능 정보를 수집하고 관리, 저장할 수 있는 프로토콜 - 관리자는 SNMP를 통해 수집한 정보를 바탕으로 네트워크 장비의 현재 기능 상태와 성능 정보, 장애 발생 부분을 확인하고 대처할 수 있다. - 162/udp 사용 - Agent는 161/udp 사용 - Manager와 Agent간 SNMP 버전이 일치해야 한다. 참고링크2
/ snmp가 설치되어 있는지 확인 # rpm -qa | grep net-snmp
/ ps -ef 확인 # ps -ef | grep snmpd
/ netstat 확인 # netstat -antup | grep snmpd
- udp쪽에는 LISTEN이 붙지 않는다.
/ SNMP 통신방식(polling) - 161/udp - agent랑 Manager랑 왔다갔다하는것 - 폴링의 반대말의 인터럽트이다. 근데 snmp에서는 폴링의 반대말을 trap으로 사용한다. - 정기적으로 신호를 주고 받는다.
/ SNMP 통신방식(trap) - 162/udp - Event Reporting - agent가 Manager한테 일방적으로 전달 - 요청이 없어도 이벤트가 발생하면 내용을 전달한다. - polling때문에 간섭이 생기지 않도록 trap을 이용한다.
/ 신호를 주고 받는 체계 - 4가지 신호체계라고 한다. - GET : 매니저가 요청을 하면 에이전트의 정보를 긁어오는데 요청을 하는것 - GET Next : 정보를 받아오는 것 - SET : 관리자가 에이전트한테 세팅을 하는것 - Trap : 비정기적인 이슈가 발생했을때 관리자에게 이벤트를 전달하기 위한 신호
/ 설정파일 찾기 # rpm -qc net-snmp
/ 설정파일 수정 # cp /etc/snmp/snmpd.conf /etc/snmp/snmpd_bk.conf : 복사 # vim snmpd.conf - 크게 4부분으로 나뉘어져 있다. - 문서구조를 어느정도 파악하는것이 필요하고, 실습에서는 63행을 넘어가지 않으니 유의하자.
/먼저 First - com2sec : snmp 문법 중 일부. 항상 들어가 있어야 한다. - sec name : 임의의 값. 이름 - source : 대역 - community : 문자열
- 밑에 복사해서 편집한다. - sec name을 snmpsec준다. - source : 192.168.111.0/24로 대역을 준다. - community : monday로 문자열을 준다.
/ Second - 이것도 위에꺼 복사해서 써보겠다. - 퍼스트에서 지정했던 보안이름을 넣어 그룹이름을 지정한다.
- groupName : snmpsecGroup (위에서 지정한 sec name에 Group을 붙임) - securityName : snmpsec(위에서 지정한 sec name으로 지정)
/ Third - snmp과 관련한 가상의 뷰를 만든다. - 읽을 수 있는 권한을 주는 가상의 뷰를 만든다.
- name : all (모두 읽기로 권한을 주겠다.) - subree : .1 (모든것..? 맨위에 값만 사용을 하겠다.) - mask : 80(그 뒤의 것들은 80으로 덮어버려)
/ Finally
- group : snmpsecGroup (위에 지정한 그룹 이름으로 설정) - read : all (모두 읽기로 함) - write : none - notif : none
- 전체 코드
####
# First, map the community name "public" into a "security name"
# sec.name source community
com2sec notConfigUser default public
com2sec snmpsec 192.168.111.0/24 monday
####
# Second, map the security name into a group name:
# groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
group snmpsecGroup v2c snmpsec
####
# Third, create a view for us to let the group have rights to:
# Make at least snmpwalk -v 1 localhost -c public system fast again.
# name incl/excl subtree mask(optional)
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view all included .1 80
####
# Finally, grant the group read-only access to the systemview view.
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact systemview none none
access snmpsecGroup "" any noauth exact all none none
- 수정 후 시스템을 재시작한다. # systemctl restart snmpd # systemctl status snmpd
/ 방화벽 열기 # firewall-config - 런타임을 영구적으로 변경 - 지금 현재 리눅스 버전에서는 서비스가 안보인다. - 해서 포트로 추가해야 한다.
- 작업 후 옵션에서 파이어월d 다시 불러오기 - firewall-cmd로 하는 코드는 아래와 같다.
/ snmp walk - snmp utils를 설치하면서 같이 설치된 녀석 - 여기에서는 버전1을 사용한다고 했는데 우리는 버전2를 사용해야한다. - 커뮤니티 스트링이 public으로 되어 있는데 우리는 monday로 지정했었다.
- 사용 명령어 # snmpwalk -v 2c 192.168.111.101 -c monday system - 버전은 2c를 많이 쓴다. (3은 호환이 안된다.) - 101 아이피는 111.0/24대역에 포함이 된다. - 커뮤니티 스트링은 monday로 지정한다. - 맨끝의 system은 그냥 문법이다.
/ MID, OID - MID는 뽑아낼 수 있는 정보 - OID : MID에 포함되어 있는 오브젝트 정보, 구별된 개체값
/ 클라이언트에 net-snmp-utils 설치 후 snmpwalk 실행 # yum -y install net-snmp-utils # snmpwalk -v 2c 192.168.111.101 -c monday system - 버전을 1이나 3으로 주면 확인이 되지 않는것을 확인할 수 있다. - 커뮤니티 이름을 monday로 넣지 않으면 확인이 되지 않는다.
- 만약 커뮤니티 스트링을 다른것도 쓰고 싶다면 서버에서 First부분에 항목을 추가해주면 된다. # vim /etc/snmp/snmpd.conf
- 만약 버전도 특정 버전을 추가하고 싶다면 Second부분에 항목을 추가해주면 된다. # vim /etc/snmp/snmpd.conf
- conf파일 수정 후 서버를 재시작해준다.
- 이후 커뮤니티 스트링을 추가로 설정했던 것으로 지정하거나 버전도 따로 지정했던것으로 호출하면 확인이 되는것을 확인할 수 있다.
/ snmptest프로그램 실습 - 버전을 바꿔가며 테스트 해본다. - 커뮤니티 스트링을 바꿔가며 테스트해본다.
- 근데 지금 네트워크 매니저를 죽였기때문에 우측상단의 네트워크 아이콘을 누르면 에러메시지가 나온다.
- 네트워크 설정을 자주 하지 않는, 본딩 서비스가 더 중요한 서버들은 이렇게 설정을 한다.
/ 본딩모드
0 : 라운드 로빈 방식 1 : 두개중에 하나만 사용 2 : 맥주소를 xor연산해서 결정 3 : 전방위 다 뿌리는거 4, 5, 6 : 그런게 있구나 - 0,1,2,3와 4,5,6이 다른점은 결함이 발생했을때 견딜 수 있는지가 있는지 : 폴트 톨로런스(Faulttolerant) - 0,12,,3이 있고 4,5,6이 없음
SNMP(Simple Network Management Protocol)
- 161/udp, 162/udp - 모니터링 대상 161/udp polling, trap 162/udp - 설정 : /etc/snmpd.conf -> 문자열 커뮤니티 스트링 - RO public을 주로 쓰고, RW private는 잘 안쓴다. - 근데 또 RO도 너무 널리 알려져있어서 임의값으로 변경해서 쓴다. - snmptester라는 툴을 이용한다.
/ 버전 - v1 : 32bit, 암호화 안됨 - v2 : v2c, 64bit, 초기 암호화있었다가 성능이 떨어져서 기능이 빠졌음, 제일 많이 쓰인다. - v3 : 64bit, 암호화 기능, 원격 설정, 인증, 기밀성, 무결성, 너무 무거워서 잘 안씀
/ 리눅스에서 nmspd통신이 잘 되는지 확인 - snmpwalk명령어로 확인한다. - ex) snmpwalk -v 2c -c 문자열 이름 | ip system : 버전 2c
/ snmptester 실행화면 - local ip : 구동하는 쪽 ip, VMware가 돌아가는 호스트 pc - Device ip : VMware의 서버 - SNMP Version : 버전2부터 c가 붙는다. - 커뮤니티 : 관리자가 변경할 수 있다.
/ 프로세스 이름 및 패키지 이름 - 프로세스 이름 : snmpd - 패키지 이름 : net-snmp
/ 설치 및 실행 # yum -y install net-snmp, net-snmp-utils # systemctl start snmpd # systemctl enable snmpd