about summary refs log tree commit diff
path: root/afl-persistent-config
diff options
context:
space:
mode:
Diffstat (limited to 'afl-persistent-config')
-rwxr-xr-xafl-persistent-config153
1 files changed, 113 insertions, 40 deletions
diff --git a/afl-persistent-config b/afl-persistent-config
index 3c280e55..a6b05e07 100755
--- a/afl-persistent-config
+++ b/afl-persistent-config
@@ -2,58 +2,131 @@
 # written by jhertz
 # 
 
-PLATFORM=`uname -s`
+test "$1" = "-h" -o "$1" = "-hh" && {
+  echo 'afl-persistent-config'
+  echo
+  echo $0
+  echo
+  echo afl-persistent-config has no command line options
+  echo
+  echo afl-persistent-config permanently reconfigures the system to a high performance fuzzing state.
+  echo "WARNING: this reduces the security of the system!"
+  echo
+  echo Note that there is also afl-system-config which sets additional runtime
+  echo configuration options.
+  exit 0
+}
 
+echo
+echo "WARNING: This scripts makes permanent configuration changes to the system to"
+echo "         increase the performance for fuzzing. As a result, the system also"
+echo "         becomes less secure against attacks! If you use this script, setup"
+echo "         strong firewall rules and only make SSH available as a network"
+echo "         service!"
+echo
+echo -n "Type \"YES\" to continue: "
+read ANSWER
+if [[ "$ANSWER" != "YES" ]]; then
+  echo Input was not YES, aborting ...
+  exit 1
+fi
+
+echo
+PLATFORM=`uname -s`
 
 # check that we're on Mac
-if [[ ! "$PLATFORM" = "Darwin" ]] ; then
-   echo "This script is for Mac OS"
-   exit 1
-fi
+if [[ "$PLATFORM" = "Darwin" ]] ; then
 
-# check if UID == 0
-if [[ $EUID -ne 0 ]]; then
-   echo "You really should be root to do this"
-   exit 1
-fi
+  # check if UID == 0
+  if [[ "$EUID" -ne 0 ]]; then
+    echo "You need to be root to do this. E.g. use \"sudo\""
+    exit 1
+  fi
 
-# check if SIP is disabled
-if [[ ! $(csrutil status | grep "disabled") ]]; then
-   echo "SIP needs to be disabled"
-   exit 1
-fi
+  # check if SIP is disabled
+  if [[ ! $(csrutil status | grep "disabled") ]]; then
+    echo "SIP needs to be disabled. Restart and press Command-R at reboot, Utilities => Terminal => enter \"csrutil disable\""
+    exit 1
+  fi
 
-echo "Okay cool, checks passed"
+  echo "Checks passed."
 
-echo "Installing plist"
+  echo "Installing /Library/LaunchDaemons/shm_setup.plist"
 
-cat << EOF > /Library/LaunchDaemons/shm_setup.plist
+  cat << EOF > /Library/LaunchDaemons/shm_setup.plist
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-<dict>
- <key>Label</key>
- <string>shmemsetup</string>
- <key>UserName</key>
- <string>root</string>
- <key>GroupName</key>
- <string>wheel</string>
- <key>ProgramArguments</key>
- <array>
- <string>/usr/sbin/sysctl</string>
- <string>-w</string>
- <string>kern.sysv.shmmax=268435456</string>
- <string>kern.sysv.shmmni=128</string>
- <string>kern.sysv.shmseg=32</string>
- <string>kern.sysv.shmall=65536</string>
-  </array>
- <key>KeepAlive</key>
- <false/>
- <key>RunAtLoad</key>
- <true/>
-</dict>
+  <dict>
+    <key>Label</key>
+    <string>shmemsetup</string>
+    <key>UserName</key>
+    <string>root</string>
+    <key>GroupName</key>
+    <string>wheel</string>
+    <key>ProgramArguments</key>
+    <array>
+      <string>/usr/sbin/sysctl</string>
+      <string>-w</string>
+      <string>kern.sysv.shmmax=268435456</string>
+      <string>kern.sysv.shmmni=128</string>
+      <string>kern.sysv.shmseg=32</string>
+      <string>kern.sysv.shmall=65536</string>
+    </array>
+    <key>KeepAlive</key>
+    <false/>
+    <key>RunAtLoad</key>
+    <true/>
+  </dict>
 </plist>
 EOF
 
-echo "Reboot and enjoy your fuzzing"
+  echo
+  echo "Reboot and enjoy your fuzzing"
+  exit 0
+fi
+
+if [[ "$PLATFORM" = "Linux" ]] ; then
+
+  # check if UID == 0
+  if [[ "$EUID" -ne 0 ]]; then
+    echo "You need to be root to do this. E.g. use \"sudo\""
+    exit 1
+  fi
+
+  echo "Checks passed."
+
+  test -d /etc/sysctl.d || echo Error: /etc/sysctl.d directory not found, cannot install shmem config
+  test -d /etc/sysctl.d -a '!' -e /etc/sysctl.d/99-fuzzing && {
+    echo "Installing /etc/sysctl.d/99-fuzzing"
+    cat << EOF > /etc/sysctl.d/99-fuzzing
+kernel.core_uses_pid=0
+kernel.core_pattern=core
+kernel.randomize_va_space=0
+kernel.sched_child_runs_first=1
+kernel.sched_autogroup_enabled=1
+kernel.sched_migration_cost_ns=50000000
+kernel.sched_latency_ns=250000000
+EOF
+  }
+
+  egrep -q '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub 2>/dev/null || echo Error: /etc/default/grub with GRUB_CMDLINE_LINUX_DEFAULT is not present, cannot set boot options
+  egrep -q '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub 2>/dev/null && {
+    egrep '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub | egrep -q hardened_usercopy=off || {
+      echo "Configuring performance boot options"
+      LINE=`egrep '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub | sed 's/^GRUB_CMDLINE_LINUX_DEFAULT=//' | tr -d '"'`
+      OPTIONS="$LINE ibpb=off ibrs=off kpti=off l1tf=off mds=off mitigations=off no_stf_barrier noibpb noibrs nopcid nopti nospec_store_bypass_disable nospectre_v1 nospectre_v2 pcid=off pti=off spec_store_bypass_disable=off spectre_v2=off stf_barrier=off srbds=off noexec=off noexec32=off tsx=on tsx=on tsx_async_abort=off mitigations=off audit=0 hardened_usercopy=off ssbd=force-off"
+      echo Setting boot options in /etc/default/grub to GRUB_CMDLINE_LINUX_DEFAULT=\"$OPTIONS\"
+      sed -i "s|^GRUB_CMDLINE_LINUX_DEFAULT=.*|GRUB_CMDLINE_LINUX_DEFAULT=\"$OPTIONS\"|" /etc/default/grub
+    }
+  }
+
+  echo
+  echo "Reboot and enjoy your fuzzing"
+  exit 0
+fi
+
+
 
+echo "Error: Unknown platform \"$PLATFORM\", currently supported are Linux and MacOS."
+exit 1