레이블이 security인 게시물을 표시합니다. 모든 게시물 표시
레이블이 security인 게시물을 표시합니다. 모든 게시물 표시

kerberos keychain 등록

# 커버로스 mac keychain 등록하기, 암호변경되면 keychain 에서 변경
# Usage: add-generic-password [-a account] [-s service] [-w password] [options...] [-A|-T appPath] [keychain]
# -l  Specify label (if omitted, service name is used as default label)
# -c  Specify item creator (optional four-character code)

security add-generic-password -a "ysoftman" -l "lemon.com (ysoftman)" -s "lemon.com" -w 'password123' -c "aapl" -T "/usr/bin/kinit"

firefox esni, trr 기능

# https 암호화 전 접속 호스트명 SNI(Server Name Indication)가
# 암호화 되지 않아 ISP 에서 차단하는 사이트가 많은데,
# ESNI(Encrypted SNI)와
# TRR(Trusted Recursive Resolver)를 사용할 수 있는
# firefox 를 사용하면 차단 없이 접속 가능하다.

# firefox about 프로토콜에서 다음과 같이 설정한다.
about:config -> network.security.esni.enabled -> true
about:config -> network.trr.bootstrapAddress -> 1.1.1.1
about:config -> network.trr.uri -> https://mozilla.cloudflare-dns.com/dns-query
about:config -> network.dns.echconfig.enabled -> true
about:config -> network.trr.mode -> 3

# trr.bootstrapAddress(1.1.1.1) 로 trr.uri 주소를 파악하게 된다.
# trr.mode
# 0: native resolver (default)
# 1: native resolver, trr 중 응답 빠른것을 사용
# 2: trr 시도 후 안돼면 native resolver 사용
# 3: trr 만 사용
# 4: reserved(shadow mode 로 추가될 예정)

# firefox about 프로토콜 설명
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/The_about_protocol

# 85버전 부터는 ESNI 대신 보안이 더 강화된 ECH(Encrypted Client Hello)를 사용한다.
# ECH 모드를 활성화 하려면 다음 2개 설정을 활성화 해야 한다.
about:config -> network.dns.echconfig.enabled -> true
about:config -> network.dns.use_https_rr_as_altsvc -> true

# ESNI -> ECH 설명에서 설정 방법 참고
https://blog.mozilla.org/security/2021/01/07/encrypted-client-hello-the-future-of-esni-in-firefox/

nginx 홈디렉토리의 정적 리소스 접속 403 에러

nginx 를 사용자 홈디렉토리(/home/ysoftman/nginx) 에 설치하였다.
보안상의 이유로 nobody 계정으로 nginx 를 시작하였다.
그리고 index.html favicon.ico  check.txt(헬스체크를 위한)등의 정적 리소스도 /home/ysoftman/nginx/html/으로 서비스를 할때

http://localhost/check.txt 접속을하면 403 에러가 발생한다.

원인은 /home/ysoftman 의 other 권한에 x(실행)권한이 없어서다.
실행 권한을 주면 된다.
r(읽기) 권한만 줘면 안된다.
/home 의 other 에도 x권한이 있어야 한다.
즉 nginx static 절대 경로의 모든 other +x 가 있어야 한다.


보안상의 이유로 other 권한에 실행권한을 줄수 없다면

# 방법1
# 루트 경로나 /home 아래에 html 디렉토리를 옮기고 이쪽으로 정적 리소스를 서빙한다.
# nginx.conf 설정에서 /check.txt 의 루트 디렉토리를 다음처럼 변경한다.
location /check.txt {
    allow all;
    root   /home/html;
}

# /home/html other 권한에 +x 추가한다.
sudo chmod -R +x /home/html

# 방법2
# nobody 계정의 그룹에 ysoftman 그룹을 추가한다.
sudo groupadd ysoftman

# 그룹확인
groups nobody

cpu meltdown, spectre 취약점

인텔 CPU 멜트다운(meltdown) 과 스펙터(spectre) 취약점(vulnerability)이 이슈인데, 왜 문제인지 대략적으로 알아보자.

참고 http://blog.alyac.co.kr/1472

우선 CPU 는 명령 처리를 위해 L1 과 같은 cpu 캐시에 명령관련 데이터를 로딩(준비)해두어야 한다. 단순히 cpu 가 들어오는 명령어만 그때 그때 처리 한다면 다음 명령이 왔을때 필요한 데이터를 캐시로 로딩하는 시간에 cpu 는 놀고 있게 된다. 그래서 cpu 는 다음 실행할 명령을 예측하고 예측된 명령어 관련된 데이터를 cpu 캐시인 L1 미리 로딩을 해둔다고 한다.
예측 명령이 맞다면 캐시에 로딩된 데이터와 함께 검증되고 이 캐시데이터는 보호받게 되는데 예측한 명령이 실패(맞지 않는다면)한다면 어떻게 될까? 이미 캐시에 로딩된 데이터는 그대로 남아 있는 상태가 되고 이 캐시의 데이터는 누구나 접근할 수 있다.
예측 실패할때 meltdown 은 OS 커널 영역의 메모리 데이터가 캐싱되어 있었다면 보호되지 못하고 사용자 영역의 프로세스(해커의 프로세스)에서 커널 메모리를 파악하게 되는 경우다.

예측 명령 실패 cpu L1(OS 커널 메모리 올라와 있는 상태) <-- user level 프로세스에서 접근

spectre 의 경우는 원래 OS 가 사용자 레벨의 프로세스들은 결리 되어 다른 프로세스의 메모리에는 접근 못하게 하는데, A라는 프로세스의 어떤 명령이 예측되어 cpu 캐시되어 있는데 실패된 예측이라 해커의 B라는 프로세스가 캐싱 데이터에 접근하게되어 결국 B가 A 프로세스의 메모리를 엿보게 되는 꼴이 된다.

예측 명령 실패 cpu L1(A 프로세스 메모리 올라와 있는 상태) <-- B 프로세스에서 접근

자세한 내용을 좀더 알아봐야겠지만 결론적으로 meltdown, spectre 모두 cpu 예측 명령 실패로 인해 캐싱 데이터가 보호되지 못해서 발생되는 kernel / user 레벨간,  user process 간의 격리되지 못하고 침범되는 문제이다.
cpu 의 하드웨어적 설계 결합이라 쉽게 고칠수가 없을것 같은데, 역시 아직까지 나온 OS 등의 소프트웨어 패치들은 cpu 성능이 아주 저하된다고 한다. 안정된 버전의 패치나 해결방법이 나오기 까진 좀더 시간이 걸릴것으로 보인다. 흠...