문서API 참조
Documentation

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-quit

sudo 구성에 사용자 추가

권한 상승을 위해 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을 저장합니다.

An image of adding a Sandfly credential for JunOS.

JunOS용 Credential 추가

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


이 페이지가 도움이 되었나요?