Skip to main content

Security Auditing

grep is a foundational tool for DevSecOps. It allows security engineers to scan codebases and server filesystems for leaked secrets, misconfigurations, and vulnerable code patterns.

1. Hunting for Leaked Secrets​

Developers sometimes accidentally commit API keys, AWS credentials, or passwords into configuration files or source code.

We can use grep with Extended Regular Expressions (-E) to hunt for these patterns recursively (-r) across a project.

Finding AWS Access Keys​

AWS Access Key IDs typically start with AKIA followed by 16 alphanumeric characters.

# Scan the /var/www directory for AWS Keys
grep -r -E "AKIA[0-9A-Z]{16}" /var/www/

Finding Private SSH/RSA Keys​

Private keys have a very distinct header. We can search for this header across the entire filesystem to ensure no private keys are sitting in public directories.

# We use -l to just print the filename, as we don't want the key printed to our screen
grep -r -l "-----BEGIN RSA PRIVATE KEY-----" /home/

Finding Generic Passwords​

We can construct an OR query to look for common variable names associated with secrets. We use -i for case insensitivity (matching password, PASSWORD, PassWord).

grep -r -i -E "password|passwd|api_key|secret_key|token" /etc/

2. Auditing Configuration Files​

Security benchmarks (like CIS) require ensuring specific settings are enforced in configuration files.

Checking SSH Configurations​

Ensure that Root Login is disabled in the SSH daemon config.

# 1. Use -v to strip comments (^#) and empty lines (^$)
# 2. Use a second grep to look for the PermitRootLogin directive
grep -E -v "^#|^$" /etc/ssh/sshd_config | grep "PermitRootLogin"

(If the output is PermitRootLogin yes, the system fails the audit).

Checking for World-Writable Permissions in Code​

While find checks filesystem metadata, grep can check code. If a script executes chmod 777, it is a massive security risk.

# Look for any invocation of chmod that grants global write access
grep -r -E "chmod.*777" /projects/scripts/

3. Pre-Commit Hooks (Preventative Security)​

You can build a simple Git pre-commit hook using grep to prevent developers from committing files that contain the word "TODO" or "FIXME".

#!/bin/bash
# .git/hooks/pre-commit

# If grep finds a match, it returns 0.
# We use -q to silence the output.
if git diff --cached | grep -q -E "TODO|FIXME"; then
echo "Commit rejected: Remove TODOs before committing."
exit 1
fi