2022-01-31

0131 redis 다루기

 1. TTL (time to live) 지정가능 

- 데이터가 살아남는 시간을 지정하여, 해당 시간동안만 메모리에 존재하도록 지정할 수 있다

2. lpush, rpush

3. mget -> multiple get

4. string, hash, set등

5. smove기능

6. lpop, rpop기능

7. ltrim 이용해서 원하는 range의 데이터만 정제할 수 있다

8. 트랜잭션 기능 

1) error났을 경우 - 해당 트랜잭션 aborted되어 처리안됨

2) 다른 유저에 의해서 동시에 진행될 경우- aborted되어 처리안됨

9. .redis어쩌구~_history 파일에서 지금까지 친 명령어 확인가능

ex) tail -100 .redis해당파일이름

10. /var/log/redis안에 기본적으로 로그파일 저장되어서 들어감

11. /etc/redis의 redis.conf에서 포트번호 로그파일저장경로 등등 커스터마이징가능

0131 레디스 특징

 1. 빠르다

1) 인메모리 데이터베이스

2)C언어 기반

3)key-value store (자바의 map, 파이썬의 dict와 비슷)

2. 오픈소스이다 (무료)

3. 인메모리이면 -> 그럼 shutdown되면 어떻게 되는가 ? -> disk에도 저장하기 때문에 data persistence를 보장한다

4. 고가용성 

- 분산 노드 배치로 하나가 죽어도 다른애가 대신 service가능 ㅇㅇ

5. 확장성

- 노드의 추가 삭제가 자유롭다

6. 기타 

- 다양한 key를 지원하며 이 key로 value를 손쉽게 빠르게 찾아올 수 있다

7. 단점

- 인메모리기반이기때문에 저장될수있는 데이터의 양에 한계가 있을수있다(RAM사이즈에 따라서)

0131 대규모 트래픽 관리

 1. 확장성

- elastic

- 유연하게 추가/삭제가 가능해야한다

2. 장애회복성

- single point of failure가 없어야 한다.

- 최소 2개 이상. 이중화가 되어있어야 한다.

- 이중화의 대상? 웹서버, db서버는 물론

- 하드웨어 장비들 (라우터, 스위치) 도 이중화가 되어야 한다.

- 스위치의 bandwidth보다 많은양의 트래픽이 들어올 경우 장애가 발생할 수 있다.

3. 자동화

- automation

-사람이 수동으로 하는 부분에서는 실수가 발생할수있다.

- infrastructure as code 로서 , 모든것은 스크립트 하나로 복제가 가능하여 누구나가 손쉽게 동일한 환경을 구성할 수 있어야 한다.

- 이를 위한 다양한 툴이 존재한다 (ansible, terraform 등)

4. 모니터링

- 항시 모니터링 되어야 한다.

2022-01-30

0130 웹서버 보안 취약점 관리

 (apach서버를 기준으로 한다.)

1. root권한으로 운영되지 않도록 전용 데몬으로 구동

2. 관리서버 디렉토리 (/usr/local/apache)의 접근 권한 확인.

- 일반 사용자가 접근할 수 없도록한다 750이하

3. 설정파일 권한 확인

- apach설치 디렉터리/conf내 디렉토리의 *.conf파일 권한 설정 확인

- 설정 파일의 indexes옵션을 삭제한다 

- 디렉토리 검색기능 -> 해당 디렉토리에 존재하는 모든 파일이 리스팅 되므로 웹서버구조 노출 및 주요 설정파일의 내용이 유출될 가능성이 있다

4. 상위 디렉토리 이동제한 설정

- 상위 경로로 이동하는 것이 가능할 경우. 접근하고자 하는 디렉토리의 하위 경로에 접속하여 상위경로로 이동함으로써 악의적인 목적을 가진 사용자의 접근이 가능해짐

 5. 로그 디렉토리 권한 설정

- apache설치 디렉터리/logs/ 및의 파일들

- 톰캣의 경우

 catalina base디렉터리/conf/web.xml 에서 

<servlet> ...

<init-param>

    <param-name>listings</param-name>

    <param-value>flase</param-value>

</init-param>

</servlet>

설정한다!

(기본적으로 . 설치하게 되면 false설정이라고 한다)



6. 적절한 로그 포맷설정

- referer설정, user-agent설정, 등 공격자 위치를 파악할 수 있는 포맷설정을 해야 함

7. 헤더 정보 사용 불가능하도록 설정

- Server에 대한 정보가 헤더에 나타나지 않도록 설정해야 함


8. 불필요한 메서드 금지

9. 파일 업로드, 다운로드 용량 제한

10. DocumentRoot디렉토리 설정 변경

11. 세션 타임아웃 설정

12. 관리자 콘솔 접근 통제 : 

- 불필요한 경우 프로세스 종료

- 필요한경우 어려운 port로 변경

13. 관리자 디폴트 계정 명 변경

- 기본유저, 패스워드를 삭제하거나 주석으로 처리하여 기본유저로의 로그인이 불가능하도록 설정한다. 

- 톰캣디렉터리/conf/tomcat-users.xml설정에서 변경

- 유추하기 쉬운 계정명 사용시 brute - forth공격에 노출되기 쉽다

14. 복잡한 패스워드 설정

- 공통기준)

- 길이: 9자리 이상, 3종류의 문자이상

- 변경주기: 3개월/ 중요 시스템의 경우 1개월

- 재사용 금지: 직전 1개 패스워드

- 계정 잠금 : 10회 실패시 .

- null패스워드 사용금지, 문자또는 숫자만으로 구성 금지, 사용자 id와 동일한 패스워드 금지, 연속적인 문자 사용금지(1111, abcd, 1234등) 

- 주기적인 패스워드 재사용 금지

- 전화번호, 생일같이 추측하기 쉬운 개인정보를 패스워드로 사용 금지

- 초기 패스워드는 사용자에게 부여한 후 최초 접속시 반드시 변경하도록 설계

- 패스워드는 마스킹 처리하여 화면상에서 읽을수없도록 표시

- 패스워드 관리기능)

- 패스워드 분실로 인한 신규 패스워드 발급 절차 적용

- 패스워드 분실시 패스워드 초기화 처리후 로그인하여 패스워드 변경을 유도 한다. 

- tomcat-users.xml파일 의 권한 설정 확인(600)




0130 dbms보안 취약점 관리

 1. 디폴트 계정,scott계정등 불필요한 계정 삭제

2. 원격에서 db서버로의 접속 제한

- 지정된 ip주소에서만 접근 가능하도록 제한해야 하고, 비인가자가 내부망에 접근할수있는 위험을 없애야 함.

3. mysql명령 히스토리 검사

- 로컬시스템에서 mysql명령을 사용하여 db에 접근할때 명령어 행에 계정 및 패스워드를 붙여서 사용하는 경우 쉘 히스토리 (.history/.sh_history)파일에 기록이 남는다.

- history파일의 권한설정(600이하)를 확인하고,

- mysql명령어 사용시 명령어 사용시 계정/패스워드 입력하지 말고 mysql -u 계정명 -p명령만 입력한후 패스워드를 개별적으로 입력할 수 있도록 한다.

4. mysql 실행파일, 데이터 파일에 대한 권한 확인

5. 개발시스템, 운영시스템의 분리 확인

- 하드웨어적으로 분리되어있어야 하며. 원칙적으로 개발자와 운영자가 분리되어야 함. 개발자의 운영시스템으로의 접근을 제한

6. 패스워드 정책 확인

7. GRANT_OPTION이 일반사용자에게 설정되어있지 않은지 점검

0130 OS 보안 취약점 고려사항들


 1. root계정으로 telnet, ssh서비스에 직접 접근이 가능한지 점검

- root계정으로 직접 접근하여 사용 x, 일반계정으로 접속후에 루트계정으로 전환하여 (su) 사용할것

2. 패스워드 복잡성 설정 여부 확인

3. 로그인 실패 임계값을 설정하여 -> 잠금이 되도록 계정 보호

4. 패스워드 파일 보호

-> etc/password가 아니라 shadow 파일에저장되고있는지 확인.

etc/password에는 평문으로 저장되기도..

반드시 암호화하여 shadow파일에 저장한다

5. root이외의 uid가 0인 다른 계정이 있는지 점검

-> 해킹의 위협으로 심어진 다른 계정일수도 있고.

"/etc/passwd" 파일 내 UID 확인 (세 번째 필드 값)

루트 이외의 사용자가 슈퍼유저 권한을 가지고 있으면 권한이 중복되기도 하고 감사가 어려워지므로, 삭제하거나 적절한 uid를 100이상의 번호로 등록한다.

6. su권한 제한

- 그룹별로 권한을 제한하여. su명령어를 사용할수있는 그룹을 제한한다

7. 패스워드 최소길이 설정

- 8자 이상으로 설정되어있는지 점검

8. 패스워드 최소 사용기간 설정 여부 확인

- 패스워드 최대 사용기간 지난 후 패스워드 변경, 이후 다시 바로 이전패스워드로 변경하는 것을 방지하기 위한 설정이 필요함. 최소사용기간은 1일 이상으로.

9. 불필요한 계정 제거

- 퇴직자, 휴직자, 계약 해지자 등의 불필요한 계정, 미사용 계정 삭제

- 프로그램 설치시 디폴트로 생성되는 계정들 삭제

10. 관리자 그룹에는 최소한의 계정만 포함

11. 동일한 uid로 설정된 계정이 존재하는지 확인

- 동일한 uid를 쓰는 계정이 존재하는 경우. 타계정 소유의 파일 및 디렉터리에 접근이 가능하게 되어 침해사고가 발생할 수 있음

12. 로그인이 필요하지 않은 계정에 로그인권한이 있는지 점검.

- uid가 100dlgkdlrjsk 60000이상인 시스템계정 -> nologin설정

13. 세션 타임아웃 설정

- 5분 이내로 설정 권고.

14. root 홈, PATH 디렉터리 권한 및 PATH 설정

PATH환경변수에 .(현재디렉토리)있을경우 root계정으로 su 해서 사용할 때 비의도적으로 현재 디렉토리에 위치하고 있는 명령어가 실행될 수 있다

15. etc/passwd , etc/shadow파일의 소유자 설정 확인

- etc/passwd에서 두번째 필드가 x여야함. 

- etc/shadow파일은 root계정만 읽을수있어야 함.

16. /etc/hosts파일 소유자 및 권한 설정

- /etc/hosts파일의 권한이 600인지 확인

- 소유자가 root인지 확인

- ip 주소와 hostname을 맵핑하는데 사용되는 파일. 이 파일의 접근권한 설정이 잘못되어있을 경우 악의적인 시스템을 신뢰할 수 있어 쓰기 권한을 제거해야 한다.


17. 인터넷 슈퍼데몬 서비스 설정파일 (/etc/(x)inetd.conf)파일 소유자 및 권한 설정

- 쓰기 권한 없도록 600,

- 소유자 root인지 확인

18. /etc/syslog.conf파일 소유자 및 권한 설정

- 설정 변조를 통해 침입자의 흔적 또는 시스템 오류를 방지하기 힘들게 만들 수 있다. 644이하 및 소유자 root확인


19. etc/services 파일 권한 확인

- 설정 변조를 통해 운영 포트 번호를 변경하여 불필요한 서비스 혹은 악성 서비스를 실행할 수 있다. 644이하 및 root소유자 확인

20. setuid, setguid설정 확인

21. 환경변수 파일 소유자 및 권한 설정 

- .profile , .bashrc, .bash_profile등 환경변수 설정 파일의 타사용자 쓰기 권한을 제거

22. /dev디렉토리 내 불필요한 device존재 여부 점검

23. 접속을 허용할 ssh의. ip주소 및 포트 점검 (telnet과 같은 서비스를 사용하여 접근할 수 없도록 제한)

24. umask설정값 확인 . 022를 권장

25. finger서비스 이용가능한지 확인

- etc/passwd파일을 조회가능한 명령어. 사용 불가능하도록 설정

26. anonymous FTP사용중인지 점검

인터넷에서 FTP를 사용할 때 anonymous FTP는 사용자들이 서버에 자신을 식별시키지 않고서도 파일에 접근할 수 있는 방법을 제공한다. 보통의 FTP 사이트들은 오직 적법한 사용자 아이디와 패스워드를 가진 사람만이 이용할 수 있는데 반해, anonymous FTP는 파일을 보거나 다운로드하기 위해 해당 서버에서 부여된 사용자 아이디나 패스워드가 없더라도 작업이 가능하기 때문에 anonymous 라고 부른다.

Anonymous FTP 서버에 접속한 뒤 사용자 아이디로 "anonymous" 라고 입력하고, 패스워드에는 자신의 이메일 주소를 입력하면 로그인이 허용된다 (이때, 패스워드를 넣지 않거나 어떤 내용을 넣더라도 로그인 하는데 문제가 없지만, 대개 자신의 이메일 주소를 쳐 넣는 것이 통신상의 예의로 되어있다).


- 불필요한 사용자, 악의적인 사용자가 시스템에 대한 정보를 획득하게 되는 것을 방지한다. 

27. Cron관련 파일들의 권한이 640이하인지 확인

28. dos공격에 취약한 명령어 사용하지 않도록 제한

- echo

-chargen

- finger 

- nntp

- ntalk 등.

29. nts서비스 확인

30. 불필요한 rpc서비스 사용하고 있는지 점검

31.ftp서비스 사용하고 있는지 점검 , 불가능하도록 한다 (sftp를 이용)




















2022-01-28

01/28 nginx 로 allow method 설정하기

 - 설정이전. curl 메소드로 확인한다.

Allow 헤더 출력되지 않고 있다.





nginx에 설정을 추가하고
다시 확인해보자





이번에는 forbidden 으로 바뀌어있음을 확인할 수 있다!!!

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...