MulVAL 기반 멀티호스트 취약성 분석 시스템 구축

개요

MulVAL은 다중 호스트, 다단계 공격 경로를 모델링할 수 있는 자동 추론 기반 보안 분석 프레임워크입니다. Datalog 언어를 사용해 네트워크 구성, 취약점 정보, 권한 상승 조건 등을 표현하며, 이를 기반으로 XSB 추론 엔진을 통해 공격 그래프를 생성합니다. 본 문서는 Ubuntu 24.04 및 RHEL 환경에서 MulVAL의 설치 및 실전 활용 과정을 정리합니다.

분석 노드 설정 (Ubuntu 24.04)

분석 엔진이 실행될 메인 시스템으로, 다음과 같은 기본 패키지를 설치합니다:

sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential gcc make default-jdk flex bison graphviz \
                   texlive-font-utils xutils-dev libncurses-dev \
                   libreadline-dev libssl-dev libgmp-dev libx11-dev git

XSB 추론 엔진 설치

MulVAL의 핵심 의존성인 XSB를 소스에서 빌드합니다:

wget https://sourceforge.net/projects/xsb/files/xsb/5.0%20%28Green%20Tea%29/XSB-5.0.tar.gz/download -O XSB-5.0.tar.gz
tar -xzf XSB-5.0.tar.gz
cd XSB/build
./configure --prefix=/usr/local
make && sudo make install

설치 후 심볼릭 링크를 생성하여 실행 경로를 통일합니다:

sudo ln -s /usr/local/XSB-5.0 /usr/local/xsb

MulVAL 소스 가져오기 및 컴파일

GitHub 저장소에서 최신 코드를 복제합니다:

cd ~/Desktop
git clone https://github.com/risksense/mulval.git

환경 변수를 설정합니다:

export XSB_HOME=/usr/local/xsb
export MULVALROOT=/home/$USER/Desktop/mulval
export PATH=$PATH:$XSB_HOME/bin:$MULVALROOT/bin:$MULVALROOT/utils

.bashrc에 위 내용을 추가하고 로드합니다:

echo 'export XSB_HOME=/usr/local/xsb' >> ~/.bashrc
echo 'export MULVALROOT=/home/$USER/Desktop/mulval' >> ~/.bashrc
echo 'export PATH=$PATH:$XSB_HOME/bin:$MULVALROOT/bin:$MULVALROOT/utils' >> ~/.bashrc
source ~/.bashrc

컴파일 오류 해결

Java 버전 충돌 방지를 위해 JDK 17 사용을 권장합니다:

sudo apt install openjdk-17-jdk

필요한 Java 라이브러리를 수동으로 다운로드합니다:

cd $MULVALROOT/lib
wget https://repo1.maven.org/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar
wget https://repo1.maven.org/maven2/jaxen/jaxen/1.1.1/jaxen-1.1.1.jar
wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.3.0/mysql-connector-j-8.3.0.jar

C++ 소스 수정

Modern C++ 표준 호환성을 위해 일부 파일을 수정합니다.

$MULVALROOT/src/attack_graph/graphit.l:

/* 변경 전 */
YYSTYPE mylval;

/* 변경 후 */
YYSTYPE *mylval = (YYSTYPE *)&yylval;

$MULVALROOT/src/attack_graph/graphit.y:

/* 변경 전 */
extern graph_data data;
YYSTYPE* mylval = &yylval;

/* 변경 후 */
extern graph_data gdata;
extern YYSTYPE* mylval;

$MULVALROOT/src/attack_graph/attack_graph.cpp 내 반복문 조건 수정:

/* 변경 전 */
for (Fact *fa = c->factList.gethead(); fa > 0; fa = c->factList.getnext())

/* 변경 후 */
for (Fact *fa = c->factList.gethead(); fa != nullptr; fa = c->factList.getnext())

Yacc 출력 파일 이름 충돌 문제 해결:

cd $MULVALROOT/src/attack_graph
cp graphit.tab.c y.tab.cpp
cp graphit.tab.h y.tab.cpp.h

최종 빌드:

cd $MULVALROOT
make clean && make

기능 검증

테스트 케이스를 통해 작동 확인:

mkdir ~/test_mulval && cd ~/test_mulval
cp $MULVALROOT/testcases/3host/input.P .
graph_gen.sh input.P -v
evince AttackGraph.pdf

스캔 노드 설정 (RHEL 8)

실제 대상 시스템에서 취약점을 수집하는 역할을 수행합니다.

sudo dnf update -y
sudo dnf groupinstall "Development Tools" -y
sudo dnf install -y openscap openscap-utils scap-security-guide \
                    openssl-devel python3 python3-pip wget git

OVAL 기반 스캔 수행

RHEL 공식 OVAL 데이터베이스를 이용해 로컬 시스템을 평가합니다:

mkdir -p /root/scan_results && cd /root/scan_results
wget https://access.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2
bunzip2 rhel-9.oval.xml.bz2
oscap oval eval --results results.xml rhel-9.oval.xml

MulVAL 형식으로 변환

MulVAL 제공 스크립트로 결과를 Datalog 입력 형식으로 변환:

$MULVALROOT/bin/oval_adapter.sh results.xml

생성된 host_vulnerabilities.P 파일은 분석 노드로 전송됩니다.

Nessus 연동 (옵션)

Nessus를 사용할 경우 오프라인 플러그인 등록 절차를 거칩니다:

wget [Tenable-offline-plugin-url] -O all-2.0.tar.gz
/opt/nessus/sbin/nessuscli fetch --register-offline [activation-code]
/opt/nessus/sbin/nessuscli update ./all-2.0.tar.gz
systemctl restart nessusd

IP 제한 해제 (Nessus Essentials)

플러그인 피드 날짜를 조작하여 IP 제한을 우회할 수 있습니다:

systemctl stop nessusd
echo 'PLUGIN_SET = "202601041845";' > /opt/nessus/var/nessus/plugin_feed_info.inc
systemctl start nessusd

분석 통합 흐름

  1. RHEL 노드에서 oscap으로 OVAL 스캔 수행
  2. 결과 XML → oval_adapter.sh → host_vulnerabilities.P 변환
  3. SCP로 Ubuntu 분석 노드에 전송
  4. graph_gen.sh으로 공격 그래프 생성
  5. PDF 또는 PostScript 형식으로 시각화

결론

MulVAL은 고전적인 도구이지만, 정형화된 Datalog 기반 분석 접근법 덕분에 여전히 연구 및 사내 보안 감사에 유용합니다. 최신 OS 및 컴파일러 환경에서는 몇 가지 패치가 필요하지만, 전체 파이프라인을 정상화하면 대규모 네트워크의 잠재적 공격 경로를 효과적으로 시각화할 수 있습니다.

태그: mulval xsb datalog vulnerability-analysis attack-graph

6월 4일 18:33에 게시됨