Pre-Audit Preparation
Pre-Audit Preparation
Before beginning an SSH security audit, proper preparation ensures comprehensive coverage and accurate results. Gathering information about the environment, understanding baseline configurations, and having the right tools ready streamlines the audit process and improves effectiveness.
Establish the audit scope by identifying all systems running SSH services, documenting network segments where SSH is permitted, and understanding business requirements for remote access. Create an inventory of SSH servers including version information, operating systems, and criticality levels. Document any exceptions or special configurations that might affect audit results.
Prepare your audit toolkit:
#!/bin/bash
# ssh-audit-toolkit.sh
# Prepare comprehensive SSH audit environment
# Create audit directory structure
AUDIT_BASE="/opt/ssh-audit"
AUDIT_DATE=$(date +%Y%m%d-%H%M%S)
AUDIT_DIR="${AUDIT_BASE}/${AUDIT_DATE}"
mkdir -p "${AUDIT_DIR}"/{configs,results,evidence,reports}
# Install audit tools
install_audit_tools() {
echo "Installing SSH audit tools..."
# SSH-audit tool
cd /tmp
git clone https://github.com/jtesta/ssh-audit.git
cp ssh-audit/ssh-audit.py ${AUDIT_BASE}/bin/
# Lynis security auditing
wget https://downloads.cisofy.com/lynis/lynis-3.0.8.tar.gz
tar xzf lynis-3.0.8.tar.gz
mv lynis ${AUDIT_BASE}/
# Custom audit scripts
cat > ${AUDIT_BASE}/bin/collect-ssh-configs.sh << 'EOF'
#!/bin/bash
# Collect SSH configurations from target systems
TARGET_LIST=$1
OUTPUT_DIR=$2
while read -r host; do
echo "Collecting from $host..."
# Create host directory
mkdir -p "$OUTPUT_DIR/$host"
# Collect sshd configuration
scp root@$host:/etc/ssh/sshd_config "$OUTPUT_DIR/$host/" 2>/dev/null
# Collect SSH version
ssh root@$host "ssh -V" > "$OUTPUT_DIR/$host/ssh_version.txt" 2>&1
# Collect system information
ssh root@$host "uname -a; cat /etc/os-release" > "$OUTPUT_DIR/$host/system_info.txt" 2>&1
# Collect active configuration
ssh root@$host "sshd -T" > "$OUTPUT_DIR/$host/sshd_effective_config.txt" 2>&1
# Collect host keys
ssh root@$host "ls -la /etc/ssh/ssh_host_*" > "$OUTPUT_DIR/$host/host_keys.txt" 2>&1
done < "$TARGET_LIST"
EOF
chmod +x ${AUDIT_BASE}/bin/*.sh
}
# Create audit checklist template
create_audit_template() {
cat > ${AUDIT_DIR}/audit_checklist.md << 'EOF'
# SSH Security Audit Checklist