JunOS Evolved
Juniper의 JunOS Evolved는 Linux 기반 라우터 운영체제입니다. SSH를 통한 직접 shell 접근과 sudo 권한을 제공하는 Linux 시스템이므로, Sandfly가 스캔할 수 있습니다.
JunOS Evolved는 커널을 IMA(Integrity Measurement Architecture) 강제 모드로 부팅하며, 실행 가능한 바이너리와 라이브러리는 모두 커널에서 허용된 키로 서명되어야 합니다. Sandfly의 credential에 IMA 서명 키를 추가할 수 있으며, Sandfly는 제공한 키를 사용해 대상 호스트의 스캔 바이너리에 서명합니다.
설정
Sandfly로 JunOS Evolved 라우터를 스캔하려면 IMA 서명 키 쌍을 생성하고, 공개 키를 라우터에 신뢰된 IMA 키로 추가하며, 라우터에 sandfly 사용자를 생성하고, Sandfly에서 IMA 서명을 활성화한 credential을 생성해야 합니다.
서드파티 바이너리 서명 관련 문서는 https://www.juniper.net/documentation/us/en/software/junos/overview-evo/topics/topic-map/evo-signing-ima-key.html 를 참고하세요. 아래 절차는 해당 문서를 기반으로 구성되었습니다. 보호 대상 장치에 개인 키가 노출될 수 있으므로, 키 쌍을 라우터 자체에서 생성하는 것은 권장하지 않습니다.
IMA 키 쌍 생성
Linux 호스트에서 다음을 실행:
openssl req -new \
-newkey rsa:4096 \
-x509 -sha256 \
-days 3650 \
-out ima-cert.x509 -outform DER \
-keyout ima-cert.key“Enter PEM pass phrase” 프롬프트에서 개인 키 보호를 위한 비밀번호를 입력합니다.
인증서 상세 정보(country, location, company 등) 프롬프트에 응답합니다. 값 자체는 중요하지 않으며 생성된 인증서에 기록만 됩니다.
이렇게 하면 라우터에 설치할 공개 키 “ima-cert.x509”와 Sandfly에 로드할 개인 키 “ima-cert.key”가 생성됩니다.
라우터에 인증서 추가
JunOS Evolved 라우터에 인증서를 추가하려면 “ima-cert.x509” 인증서를 라우터의 /tmp/ima-cert.x509 같은 경로로 복사합니다(활성화된 경우 ftp, 또는 가능한 사용자로 scp 사용).
JunOS CLI(리눅스 shell 아님)에서 다음 명령을 실행합니다:
request security system-keystore import key-name sandfly-ima-key x509-cert /tmp/ima-cert.x509
키 이름은 “sandfly-ima-key” 대신 원하는 이름으로, 경로는 “/tmp/ima-cert.x509” 대신 인증서 파일을 복사한 경로로 바꿔서 사용합니다. 라우터가 키를 가져오면 다음과 같은 확인 정보가 표시됩니다:
sandfly@junosevo01> ...sandfly-ima-key x509-cert /tmp/ima-cert.x509
re0:
Key Name: sandfly-ima-key
X509 Cert Path: /etc/ima-ext/sandfly-ima-key/ima-cert.x509
Key SKI: 67240b6a100c0dd89c71873ca5082842fc36341a라우터에 사용자 추가
라우터를 스캔하려면 sandfly 사용자를 추가해야 합니다. Sandfly는 클래스가 “super-user”이고 shell이 “sh”로 설정된 사용자로 SSH 로그인할 수 있어야 합니다. JunOS Evolved는 인증에 SSH 키를 지원하며, 비밀번호 대신 SSH 키 사용을 권장합니다.
Sandfly 사용자에 대한 예시 구성은 다음과 같습니다:
system {
login {
user sandfly {
uid 2000;
class read-only;
shell sh;
authentication {
ssh-ed25519 "ssh-ed25519 AAAA...public key...GGVd0047";
}
}
}
}
위 구성을 생성하려면 다음 CLI 명령을 사용할 수 있습니다:
configure
edit system login user sandfly
set uid 2000
set class read-only
set shell sh
set authentication ssh-ed25519 "ssh-ed25519 AAAA...public key...GGVd0047"
commit and-quitsudo 구성에 사용자 추가
권한 상승을 위해 Sandfly는 “sudo” 사용이 가능해야 합니다. JunOS Evolved 시스템의 root 사용자로 shell에 접속한 후(예: CLI에서 start shell 실행, 또는 root 사용자가 shell로 로그인하는 경우 CLI 종료) 다음을 실행합니다:
echo "sandfly ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/sandfly
SSH 키 외에 Sandfly 사용자에 비밀번호를 설정했고 sudo 시 비밀번호를 요구하려면, 위 명령에서 “NOPASSWD:” 지시어를 제거하세요.
Sandfly에서 credential 생성
Sandfly에서 new credential을 생성합니다. 앞 단계에서 생성한 사용자명과 SSH 키(또는 라우터를 그렇게 구성한 경우 비밀번호)를 사용합니다.
“Enable Linux Integrity Measurement Architecture (IMA) signing” 토글을 활성화하고, IMA Signing Key 필드에 개인 키 데이터(“ima-cert.key” 파일의 내용)를 붙여넣고, IMA Signing Key Password 필드에 OpenSSL로 생성한 키 암호를 입력합니다.
credential을 저장합니다.

JunOS용 Credential 추가
마지막으로, 새로 생성한 IMA 서명 credential을 선택하여 JunOS Evolved 호스트를 Sandfly에 new host로 추가합니다.
Updated 7 days ago