From dda1f84f6704855b2dddd919d9e74d9dc29b130b Mon Sep 17 00:00:00 2001 From: jdh8d <jdh8d@git.zephyr-software.com> Date: Tue, 30 Sep 2014 16:55:54 +0000 Subject: [PATCH] Merged trunk, added CGC spawner to open files for Strata, as necessary. Won't be useful for competition, but useful for analysis Former-commit-id: 21066cf2f6eb7a1f43226c8e83d027db5c8918c8 --- .gitattributes | 11 +++ Makefile | 2 + cgc_spri/Makefile | 7 ++ cgc_spri/spawn_with_spri_open.c | 33 +++++++ tools/add_ifunc_attr.sh | 10 ++ tools/db/job.create.tbl | 23 +++++ tools/db/job.drop.tbl | 2 + tools/db/job_spec_register.sh | 9 ++ tools/db/job_spec_update.sh | 14 +++ tools/db/job_status_report.sh | 66 +++++++++++++ tools/db/pdb.drop.tbl | 4 +- tools/db/pdb_setup.sh | 1 + tools/db/pdb_teardown.sh | 1 + tools/do_appfw.sh | 4 +- tools/do_rss.sh | 15 +++ tools/do_spawner.sh | 4 + tools/ps_analyze.sh | 167 +++++++++++++++++++++++++++----- tools/ps_analyze_cgc.sh | 7 ++ tools/ps_run.sh | 4 +- 19 files changed, 354 insertions(+), 30 deletions(-) create mode 100644 cgc_spri/Makefile create mode 100644 cgc_spri/spawn_with_spri_open.c create mode 100755 tools/add_ifunc_attr.sh create mode 100644 tools/db/job.create.tbl create mode 100644 tools/db/job.drop.tbl create mode 100755 tools/db/job_spec_register.sh create mode 100755 tools/db/job_spec_update.sh create mode 100755 tools/db/job_status_report.sh create mode 100755 tools/do_rss.sh create mode 100644 tools/do_spawner.sh create mode 100755 tools/ps_analyze_cgc.sh diff --git a/.gitattributes b/.gitattributes index 863fc9504..4d9118074 100644 --- a/.gitattributes +++ b/.gitattributes @@ -17,6 +17,8 @@ c++_examples/newdelete4.cpp -text c++_examples/newdelete5.cpp -text c++_examples/newdelete6.cpp -text c++_examples/throw.cpp -text +cgc_spri/Makefile -text +cgc_spri/spawn_with_spri_open.c -text chopzero_src/Makefile -text chopzero_src/chopzero.c -text demos/Makefile -text @@ -388,11 +390,17 @@ tests/zsh/tests/test3.sh -text tests/zsh/tests/test4.sh -text tests/zsh/tests/test5.sh -text tests/zsh/tests/test6.sh -text +tools/add_ifunc_attr.sh -text tools/bed.sh -text tools/bed_blackbox.sh -text tools/bed_manual.sh -text tools/cover.sh -text tools/db/drop_my_tables.sh -text +tools/db/job.create.tbl -text +tools/db/job.drop.tbl -text +tools/db/job_spec_register.sh -text +tools/db/job_spec_update.sh -text +tools/db/job_status_report.sh -text tools/db/pdb.create.tbl -text tools/db/pdb.createprogram.tbl -text tools/db/pdb.drop.tbl -text @@ -3177,6 +3185,8 @@ tools/do_makepeasoupbinary.sh -text tools/do_manual_cover.sh -text tools/do_manualtests.sh -text tools/do_p1transform.sh -text +tools/do_rss.sh -text +tools/do_spawner.sh -text tools/empty.json -text tools/fast_annot.sh -text tools/fast_spri.sh -text @@ -6312,6 +6322,7 @@ tools/ps_analyze-lib.sh -text tools/ps_analyze.sh -text tools/ps_analyze4.sh -text tools/ps_analyze64.sh -text +tools/ps_analyze_cgc.sh -text tools/ps_comp++.sh -text tools/ps_comp.sh -text tools/ps_create_installer.sh -text diff --git a/Makefile b/Makefile index 97d44bec5..30e93ab3e 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ all: cd chopzero_src; make + cd cgc_spri; make #cd tools/pin; make clean: cd chopzero_src; make clean cd examples; make clean cd demos; make clean + cd cgc_spri; make clean diff --git a/cgc_spri/Makefile b/cgc_spri/Makefile new file mode 100644 index 000000000..9798a2ec3 --- /dev/null +++ b/cgc_spri/Makefile @@ -0,0 +1,7 @@ + + +spawner: *.c + gcc *.c -o $@ + +clean: + rm -f *.o spawner diff --git a/cgc_spri/spawn_with_spri_open.c b/cgc_spri/spawn_with_spri_open.c new file mode 100644 index 000000000..1ffad3741 --- /dev/null +++ b/cgc_spri/spawn_with_spri_open.c @@ -0,0 +1,33 @@ +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> + + + +int main( int argc, char* argv[]) +{ + char* spri_file=getenv("STRATA_SPRI_FILE"); + if(spri_file) + { + int fd=open(spri_file, O_RDONLY); + if(fd==-1) + { + perror(__FUNCTION__); + } + int fd2=dup2(fd,990); + if(fd2==-1) + { + perror(__FUNCTION__); + } + close(fd); + } + char* exe=getenv("SPAWNER_EXE_FILE"); + if(!exe) + { + fprintf(stderr,"Cannot find file to spawn."); + } + execvp(exe, argv); +} diff --git a/tools/add_ifunc_attr.sh b/tools/add_ifunc_attr.sh new file mode 100755 index 000000000..564f51653 --- /dev/null +++ b/tools/add_ifunc_attr.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +infile=$1 +annotfile=$2 + +for ifunc in `nm $infile|grep " i "|cut -f3 -d" "` +do + cat $annotfile|sed "s/ FUNC GLOBAL $ifunc / FUNC GLOBAL $ifunc IFUNC /" > $annotfile.tmp.$$ + mv $annotfile.tmp.$$ $annotfile +done diff --git a/tools/db/job.create.tbl b/tools/db/job.create.tbl new file mode 100644 index 000000000..97bca29e6 --- /dev/null +++ b/tools/db/job.create.tbl @@ -0,0 +1,23 @@ +CREATE TABLE job_spec +( + job_id text PRIMARY KEY, + job_name text, + variant_id integer DEFAULT -1, + submitted_ts timestamp, + start_ts timestamp, + stop_ts timestamp, + configuration text, + status text, + installer text +); + +CREATE TABLE job_status +( + job_id text, + step text, + step_num integer DEFAULT -1, + log text, + start_ts timestamp, + stop_ts timestamp, + status text +); diff --git a/tools/db/job.drop.tbl b/tools/db/job.drop.tbl new file mode 100644 index 000000000..e2c7e0320 --- /dev/null +++ b/tools/db/job.drop.tbl @@ -0,0 +1,2 @@ +DROP TABLE job_spec; +DROP TABLE job_status; diff --git a/tools/db/job_spec_register.sh b/tools/db/job_spec_register.sh new file mode 100755 index 000000000..b9466d96b --- /dev/null +++ b/tools/db/job_spec_register.sh @@ -0,0 +1,9 @@ +#!/bin/sh -x + +JOB_ID=$1 +NAME=$2 +VARIANT_ID=$3 +STATUS=$4 +SUBMITTED_TS=$5 + +psql -q -t -c "INSERT INTO job_spec (job_id, job_name, variant_id, status, submitted_ts) VALUES ('$JOB_ID', '$NAME', '$VARIANT_ID', '$STATUS', '$SUBMITTED_TS')" diff --git a/tools/db/job_spec_update.sh b/tools/db/job_spec_update.sh new file mode 100755 index 000000000..6c6b4b3ad --- /dev/null +++ b/tools/db/job_spec_update.sh @@ -0,0 +1,14 @@ +#!/bin/sh -x + +JOB_ID=$1 +STATUS=$2 +TIMESTAMP=$3 +INSTALLER=$4 + +if [ $STATUS = 'pending' ]; then + psql -q -t -c "UPDATE job_spec SET status='$STATUS', start_ts='$TIMESTAMP' WHERE job_id='$JOB_ID'" +elif [ $STATUS = 'error' ]; then + psql -q -t -c "UPDATE job_spec SET status='$STATUS', stop_ts='$TIMESTAMP' WHERE job_id='$JOB_ID'" +else + psql -q -t -c "UPDATE job_spec SET status='$STATUS', stop_ts='$TIMESTAMP', installer='$INSTALLER' WHERE job_id='$JOB_ID'" +fi diff --git a/tools/db/job_status_report.sh b/tools/db/job_status_report.sh new file mode 100755 index 000000000..a77f6cc6a --- /dev/null +++ b/tools/db/job_status_report.sh @@ -0,0 +1,66 @@ +#!/bin/sh -x + +JOB_ID=$1 +STEP=$2 +STEP_NUM=$3 +STATE=$4 +TIMESTAMP=$5 +STATUS=$6 +LOGFILE=$7 + +##################################################### + +usage() +{ + echo "report_job_status <job_id> <step_name> <step_num> [ started | completed ] <timestamp> <status> <logFile>" +} + +log_error() +{ + echo "report_job_status: ERROR: $1" + exit -1 +} + +log_message() +{ + echo "report_job_status: MESSAGE: $1" +} + +##################################################### + +if [ -z $JOB_ID ]; then + usage +fi + +if [ -z $STEP ]; then + usage +fi + +if [ -z $STEP_NUM ]; then + usage +fi + +if [ -z $TIMESTAMP ]; then + usage +fi + +if [ -z $STATUS ]; then + usage +fi + +if [ $STATE = "started" ]; then + psql -q -t -c "INSERT INTO job_status (job_id, step, step_num, status, start_ts) VALUES ('$JOB_ID', '$STEP', '$STEP_NUM', '$STATUS', '$TIMESTAMP')" +else + if [ -z $LOGFILE ]; then + psql -q -t -c "UPDATE job_status SET status='$STATUS', stop_ts='$TIMESTAMP' WHERE job_id = '$JOB_ID' AND step='$STEP'" + else + attributes=$(grep ATTRIBUTE $LOGFILE | cut -d' ' -f3-) + psql -q -t -c "UPDATE job_status SET status='$STATUS', stop_ts='$TIMESTAMP', log='$attributes' WHERE job_id = '$JOB_ID' AND step='$STEP'" + fi +fi + +if [ ! $? -eq 0 ]; then + log_error "Failed to register job status" +fi + +exit 0 diff --git a/tools/db/pdb.drop.tbl b/tools/db/pdb.drop.tbl index e75fc9e4c..b42f9199e 100644 --- a/tools/db/pdb.drop.tbl +++ b/tools/db/pdb.drop.tbl @@ -1,3 +1,3 @@ -DROP TABLE program_dependency; -DROP TABLE program_info; +DROP TABLE variant_dependency; +DROP TABLE variant_info; DROP TABLE file_info; diff --git a/tools/db/pdb_setup.sh b/tools/db/pdb_setup.sh index 7d489a046..5aadc308a 100755 --- a/tools/db/pdb_setup.sh +++ b/tools/db/pdb_setup.sh @@ -1,3 +1,4 @@ #!/bin/sh psql -f $PEASOUP_HOME/tools/db/pdb.create.tbl +psql -f $PEASOUP_HOME/tools/db/job.create.tbl diff --git a/tools/db/pdb_teardown.sh b/tools/db/pdb_teardown.sh index 4c48331df..5ebe4aa2b 100755 --- a/tools/db/pdb_teardown.sh +++ b/tools/db/pdb_teardown.sh @@ -1,3 +1,4 @@ #!/bin/sh psql -f $PEASOUP_HOME/tools/db/pdb.drop.tbl +psql -f $PEASOUP_HOME/tools/db/job.drop.tbl diff --git a/tools/do_appfw.sh b/tools/do_appfw.sh index 889aa6cca..ab0e196ec 100755 --- a/tools/do_appfw.sh +++ b/tools/do_appfw.sh @@ -11,7 +11,7 @@ $PEASOUP_HOME/tools/generate_string_signatures.sh "$program" "$program.sigs" $fi cp $program.sigs $program.sigs.orig # copy application firewall library -# for now, it's only SQL -cp $SECURITY_TRANSFORMS_HOME/appfw/lib/libappfw.so${bits} libappfw.so +cp $SECURITY_TRANSFORMS_HOME/appfw/lib/${bits}/libappfw.so libappfw.so +#cp $SECURITY_TRANSFORMS_HOME/appfw/lib/${bits}/libappfw.so libappfw.so $PEASOUP_HOME/tools/update_env_var.sh DO_APPFW 1 diff --git a/tools/do_rss.sh b/tools/do_rss.sh new file mode 100755 index 000000000..22b9bb8b2 --- /dev/null +++ b/tools/do_rss.sh @@ -0,0 +1,15 @@ +#!/bin/bash -x + + +# +# This env. var tells Strata to insert RSS-ing. +# However, we're doing the RSSing via SPRI/IRDB. +# So we need to leave this env. var off. +# +# $PEASOUP_HOME/tools/update_env_var.sh STRATA_SHADOW_STACK 1 + +$SECURITY_TRANSFORMS_HOME/tools/ret_shadow_stack/ret_shadow_stack.exe $* + + + + diff --git a/tools/do_spawner.sh b/tools/do_spawner.sh new file mode 100644 index 000000000..b45b4196e --- /dev/null +++ b/tools/do_spawner.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +mv a.stratafied spawned +cp $PEASOUP_HOME/cgc_spri/spawner a.stratafied diff --git a/tools/ps_analyze.sh b/tools/ps_analyze.sh index 28e9f3f30..ba083b073 100755 --- a/tools/ps_analyze.sh +++ b/tools/ps_analyze.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash # # ps_analyze.sh - analyze a program and transform it for peasoupification to prevent exploit. # @@ -14,12 +14,20 @@ ulimit -s unlimited watchdog_val=30 errors=0 +# record statistics in database? +record_stats=0 + # DEFAULT TIMEOUT VALUE INTEGER_TRANSFORM_TIMEOUT_VALUE=1800 TWITCHER_TRANSFORM_TIMEOUT_VALUE=1800 # Setting PN timeout to 6 hours for TNE. PN_TIMEOUT_VALUE=21600 +# +# set default values for +# +initial_off_phases="isr ret_shadow_stack determine_program stats spawner" + #non-zero to use canaries in PN/P1, 0 to turn off canaries #DO_CANARIES=1 #on for on and off for off @@ -31,6 +39,9 @@ intxform_detect_fp=1 # default: detect benign false positives is on # but if determine_program is off, it's a no-op intxform_instrument_idioms=0 # default: do not instrument instructions marked as IDIOM by STARS +# JOBID + +JOBID="$(basename $1)-$$" # # By default, big data approach is off @@ -153,7 +164,7 @@ check_options() # Note that we use `"$@"' to let each command-line parameter expand to a # separate word. The quotes around `$@' are essential! # We need TEMP as the `eval set --' would nuke the return value of getopt. - TEMP=`getopt -o s:t:w: --long step-option: --long integer_warnings_only --long integer_instrument_idioms --long integer_detect_fp --long no_integer_detect_fp --long step: --long timeout: --long manual_test_script: --long manual_test_coverage_file: --long watchdog: -n 'ps_analyze.sh' -- "$@"` + TEMP=`getopt -o s:t:w: --long step-option: --long integer_warnings_only --long integer_instrument_idioms --long integer_detect_fp --long no_integer_detect_fp --long step: --long timeout: --long id: --long manual_test_script: --long manual_test_coverage_file: --long watchdog: -n 'ps_analyze.sh' -- "$@"` # error check # if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit -1 ; fi @@ -209,6 +220,10 @@ check_options() set_timer $2 & TIMER_PID=$! shift 2 ;; + --id) + JOBID=$2 + shift 2 + ;; --) shift break ;; @@ -233,24 +248,33 @@ check_options() exit -3; fi - # --step determine_program=(on|off) not specified on the command line - # default policy is off - # to make the default policy on, get rid of this block of code - echo $phases_off|egrep "determine_program" > /dev/null - if [ ! $? -eq 0 ]; - then - # by default it's off - phases_off="$phases_off determine_program=off" - fi + for phase in $initial_off_phases + do - # turn off isr - phases_off="$phases_off isr=off" + # --step $phase=(on|off) not specified on the command line + # default policy is off + # to make the default policy on, get rid of this block of code + echo $phases_off|egrep "$phase=" > /dev/null + if [ ! $? -eq 0 ]; + then + # by default it's off + phases_off="$phases_off $phase=off" + fi + done # turn off heaprand and double_free if twitcher is on for now is_step_on twitchertransform if [[ $? = 1 && "$TWITCHER_HOME" != "" ]]; then phases_off="$phases_off heaprand=off double_free=off" fi + + # + # turn on/off recording of statistics + # + is_step_on stats + if [[ $? = 1 ]]; then + record_stats=1 + fi } @@ -259,7 +283,7 @@ check_options() # is_step_on() { - step=$1 + local step=$1 echo $phases_off|egrep "$step=off" > /dev/null if [ $? -eq 0 ] ; then @@ -314,6 +338,29 @@ stop_if_error() esac } +# +# Check dependencies +# +check_dependencies() +{ + # format is: step1,step2,step3 + local dependency_list=$1 + + # extract each step, make sure step is turned on + local steps=$(echo $dependency_list | tr "," "\n") + for s in $steps + do + if [[ "$s" != "none" && "$s" != "mandatory" ]]; then + is_step_on $s + if [ $? -eq 0 ]; then + return 0 + fi + fi + done + + return 1 +} + # # Detect if this step of the computation is on, and execute it. # @@ -325,16 +372,33 @@ perform_step() shift command="$*" + logfile=logs/$step.log + is_step_on $step if [ $? -eq 0 ]; then echo Skipping step $step. [dependencies=$mandatory] return 0 fi - logfile=logs/$step.log + starttime=`date --iso-8601=seconds` + + # optionally record stats + if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_status_report.sh "$JOBID" "$step" "$stepnum" started "$starttime" inprogress + fi + + if [[ "$mandatory" != "none" && "$mandatory" != "mandatory" ]]; then + check_dependencies $mandatory + if [ $? -eq 0 ]; then + echo Skipping step $step because of failed dependencies. [dependencies=$mandatory] + if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_status_report.sh "$JOBID" "$step" "$stepnum" completed "$starttime" error + fi + return 0 + fi + fi echo -n Performing step "$step" [dependencies=$mandatory] ... - starttime=`date --iso-8601=seconds` # If verbose is on, tee to a file if [ ! -z "$DEBUG_STEPS" ]; then @@ -347,14 +411,27 @@ perform_step() $command > $logfile 2>&1 command_exit=$? fi + + endtime=`date --iso-8601=seconds` echo "# ATTRIBUTE start_time=$starttime" >> $logfile - echo "# ATTRIBUTE end_time=`date --iso-8601=seconds`" >> $logfile + echo "# ATTRIBUTE end_time=$endtime" >> $logfile echo "# ATTRIBUTE peasoup_step_name=$step" >> $logfile echo "# ATTRIBUTE peasoup_step_number=$stepnum" >> $logfile echo "# ATTRIBUTE peasoup_step_command=$command " >> $logfile echo "# ATTRIBUTE peasoup_step_exitcode=$command_exit" >> $logfile + # report job status + if [ $command_exit -eq 0 ]; then + if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_status_report.sh "$JOBID" "$step" "$stepnum" completed "$endtime" success $logfile + fi + else + if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_status_report.sh "$JOBID" "$step" "$stepnum" completed "$endtime" error $logfile + fi + fi + is_step_error $step $command_exit if [ $? -ne 0 ]; then echo "Done. Command failed! ***************************************" @@ -387,7 +464,7 @@ report_logs() logfile=logs/ps_analyze.log echo "# ATTRIBUTE start_time=$ps_starttime" >> $logfile - echo "# ATTRIBUTE end_time=`date --iso-8601=seconds`" >> $logfile + echo "# ATTRIBUTE end_time=$ps_endtime" >> $logfile echo "# ATTRIBUTE peasoup_step_name=all_peasoup" >> $logfile for i in $all_logs @@ -569,10 +646,12 @@ fi # setup libstrata.so. We'll setup two versions, one with symbols so we can debug, and a stripped, faster-loading version. # by default, use the faster version. copy in the .symbosl version for debugging # -cp $STRATA_HOME/lib/libstrata.so $newdir/libstrata.so.symbols -cp $STRATA_HOME/lib/libstrata.so $newdir/libstrata.so.nosymbols -strip $newdir/libstrata.so.nosymbols -cp $newdir/libstrata.so.nosymbols $newdir/libstrata.so +if [ -f $STRATA_HOME/lib/libstrata.so ]; then + cp $STRATA_HOME/lib/libstrata.so $newdir/libstrata.so.symbols + cp $STRATA_HOME/lib/libstrata.so $newdir/libstrata.so.nosymbols + strip $newdir/libstrata.so.nosymbols + cp $newdir/libstrata.so.nosymbols $newdir/libstrata.so +fi adjust_lib_path @@ -660,6 +739,8 @@ DB_PROGRAM_NAME=`basename $orig_exe.$$ | sed "s/[^a-zA-Z0-9]/_/g"` DB_PROGRAM_NAME="psprog_$DB_PROGRAM_NAME" MD5HASH=`md5sum $newname.ncexe | cut -f1 -d' '` +INSTALLER=`pwd` + # # register the program # @@ -669,6 +750,15 @@ if [ ! $varid -gt 0 ]; then fail_gracefully "Failed to write Variant into database. Exiting early. Is postgres running? Can $PGUSER access the db?" fi +if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_spec_register.sh "$JOBID" "$DB_PROGRAM_NAME" "$varid" 'submitted' "$ps_starttime" +fi + + +if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_spec_update.sh "$JOBID" 'pending' "$ps_starttime" +fi + # build basic IR perform_step fill_in_cfg mandatory $SECURITY_TRANSFORMS_HOME/libIRDB/test/fill_in_cfg.exe $varid perform_step fill_in_indtargs mandatory $SECURITY_TRANSFORMS_HOME/libIRDB/test/fill_in_indtargs.exe $varid @@ -695,7 +785,7 @@ perform_step find_strings none $SECURITY_TRANSFORMS_HOME/libIRDB/test/find_strin # # analyze binary for string signatures # -perform_step appfw none $PEASOUP_HOME/tools/do_appfw.sh $arch_bits $newname.ncexe logs/find_strings.log +perform_step appfw find_strings $PEASOUP_HOME/tools/do_appfw.sh $arch_bits $newname.ncexe logs/find_strings.log # # check signatures to determine if we know which program this is. @@ -753,7 +843,7 @@ perform_step fast_annot preLoaded_ILR2 $PEASOUP_HOME/tools/fast_annot.sh # # Do P1/Pn transform. # -perform_step p1transform none $PEASOUP_HOME/tools/do_p1transform.sh $cloneid $newname.ncexe $newname.ncexe.annot $PEASOUP_HOME/tools/bed.sh $PN_TIMEOUT_VALUE $DO_CANARIES +perform_step p1transform meds_static,clone $PEASOUP_HOME/tools/do_p1transform.sh $cloneid $newname.ncexe $newname.ncexe.annot $PEASOUP_HOME/tools/bed.sh $PN_TIMEOUT_VALUE $DO_CANARIES # @@ -762,9 +852,18 @@ perform_step p1transform none $PEASOUP_HOME/tools/do_p1transform.sh $cloneid $ne if [ -z "$program" ]; then program="unknown" fi -perform_step integertransform none $PEASOUP_HOME/tools/do_integertransform.sh $cloneid $program $CONCOLIC_DIR $INTEGER_TRANSFORM_TIMEOUT_VALUE $intxform_warnings_only $intxform_detect_fp $intxform_instrument_idioms +perform_step integertransform meds_static,clone $PEASOUP_HOME/tools/do_integertransform.sh $cloneid $program $CONCOLIC_DIR $INTEGER_TRANSFORM_TIMEOUT_VALUE $intxform_warnings_only $intxform_detect_fp $intxform_instrument_idioms + +# +# perform_calc -- get some stats about the DB +# #perform_step calc_conflicts none $SECURITY_TRANSFORMS_HOME/libIRDB/test/calc_conflicts.exe $cloneid a.ncexe +# +# perform step to instrument pgm with return shadow stack +# +perform_step ret_shadow_stack meds_static,clone $PEASOUP_HOME/tools/do_rss.sh $cloneid + # # Do Twitcher transform step if twitcher is present # @@ -787,6 +886,11 @@ perform_step fast_spri spasm $PEASOUP_HOME/tools/fast_spri.sh a.irdb.bspri a.ird perform_step preLoaded_ILR1 fast_spri $STRATA_HOME/tools/preLoaded_ILR/generate_hashfiles.exe a.irdb.fbspri perform_step preLoaded_ILR2 preLoaded_ILR1 $PEASOUP_HOME/tools/generate_relocfile.sh a.irdb.fbspri + +# put a front end in front of a.stratafied which opens file 990 for strata to read. +perform_step spawner stratafy_with_pc_confine $PEASOUP_HOME/tools/do_spawner.sh + + # copy TOCTOU tool here if it exists is_step_on toctou if [[ $? -eq 1 && -e $GRACE_HOME/ps_concurrency/toctou_tool/libtoctou_tool.so ]]; @@ -798,8 +902,10 @@ fi # # create a report for all of ps_analyze. # +ps_endtime=`date --iso-8601=seconds` report_logs + # go back to original directory cd - > /dev/null 2>&1 @@ -818,8 +924,19 @@ if [ -f $stratafied_exe ]; then echo "*****************************" echo "*Warning: Some steps failed!*" echo "*****************************" + if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_spec_update.sh "$JOBID" 'partial' "$ps_endtime" "$INSTALLER" + fi + else + if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_spec_update.sh "$JOBID" 'success' "$ps_endtime" "$INSTALLER" + fi fi + exit 0; else + if [ $record_stats -eq 1 ]; then + $PEASOUP_HOME/tools/db/job_spec_update.sh "$JOBID" 'error' "$ps_endtime" + fi exit 255; fi diff --git a/tools/ps_analyze_cgc.sh b/tools/ps_analyze_cgc.sh new file mode 100755 index 000000000..47a2b892d --- /dev/null +++ b/tools/ps_analyze_cgc.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +$PEASOUP_HOME/tools/ps_analyze.sh $* \ + --step spawner=on \ + --step appfw=off \ + --step find_strings=off + diff --git a/tools/ps_run.sh b/tools/ps_run.sh index f07eb4f79..c24f37a99 100755 --- a/tools/ps_run.sh +++ b/tools/ps_run.sh @@ -44,7 +44,7 @@ fi DO_TWITCHER=0 if [ "$DO_TWITCHER" = "1" ]; then - APP_LD_PRELOAD=$BOOST_HOME/lib/libboost_system.so:$BOOST_HOME/lib/libboost_thread.so:$datapath/libtwitcher_malloc.so:$APP_LD_PRELOAD + APP_LD_PRELOAD=$datapath/libtwitcher.so:$APP_LD_PRELOAD fi DO_TOCTOU=0 @@ -67,6 +67,7 @@ STRATA_WATCHDOG=0 STRATA_NUM_HANDLE=0 STRATA_DOUBLE_FREE=0 STRATA_HEAPRAND=0 +STRATA_SHADOW_STACK=0 STRATA_CONTROLLED_EXIT=0 STRATA_DETECT_SERVERS=0 STRATA_PC_CONFINE=0 @@ -76,6 +77,7 @@ STRATA_PC_CONFINE_XOR_KEY_LENGTH=1024 STRATA_ANNOT_FILE=$datapath/a.ncexe.annot STRATA_IS_SO=0 STRATA_EXE_FILE=$datapath/a.stratafied +SPAWNER_EXE_FILE=$datapath/spawned STRATA_MAX_WARNINGS=500000 exec -a $origbinpath $datapath/a.stratafied \"\$@\"" -- GitLab