From 742283a6a3a7ad3393f18201e7489115f65434f6 Mon Sep 17 00:00:00 2001 From: cristian-vences <156953308+cristian-vences@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:25:08 -0500 Subject: [PATCH 01/12] Updated license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index e425265..1cff752 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 River Loop Security LLC +Copyright (c) 2024 Cristian Vences Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From e2017e241ed2f92e1fbb0ed936c55d4ce312feb8 Mon Sep 17 00:00:00 2001 From: cristian-vences <156953308+cristian-vences@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:29:30 -0500 Subject: [PATCH 02/12] Reverted license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 1cff752..e425265 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Cristian Vences +Copyright (c) 2020 River Loop Security LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 4615d9a0ddad2e3a40e9f283cf071dbe705fe9e3 Mon Sep 17 00:00:00 2001 From: cristian-vences <156953308+cristian-vences@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:12:40 -0500 Subject: [PATCH 03/12] updated to pigpio library from wiringPi since it was deprecated/ --- Makefile | 2 +- README.md | 14 +- src/flash_bash.c | 380 ++++++++++++++++++++++++++++++++++------------- 3 files changed, 288 insertions(+), 108 deletions(-) diff --git a/Makefile b/Makefile index 5083edd..c8e2804 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ all: src/flash_bash.c - gcc -g -lwiringPi -Wall -o flash_bash src/flash_bash.c + gcc -Wall -pthread -o flash_bash src/flash_bash.c -lpigpio -lrt clean: rm -rf flash_bash flash_bash.dSYM/ \ No newline at end of file diff --git a/README.md b/README.md index 010fda0..db090a0 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,27 @@ # Flash-BASH -Flash-BASH is a Raspberry Pi based tool that uses a multiplexer to "glitch" a target device into a privileged open state. +Flash-BASH is a Raspberry Pi based tool that uses a multiplexer to "glitch" a target device into a privileged open shell. ## Usage See our blog post at https://www.riverloopsecurity.com/blog/2021/09/introducing-flash-bash/ for information on usage. ## Install/Compile -The easiest way to use this tool without any tweaks is with a Raspberry Pi Model 3 B+. +The easiest way to use this tool without any tweaks is with a Raspberry Pi Model Type 3 (Model A+, B+, Pi Zero, Pi Zero W, Pi2B, Pi3B, Pi4B). However, with minor tweaks to the code, any Raspberry Pi, Arduino, or micro-controller should work fine. -Secondly, this tool is based on the dependency Wiring Pi which you can install like so: +Secondly, this tool is based on the dependency pigpio which should be automatically installed on latest version of Raspberry Pi but can be installed with: ``` -sudo apt-get install wiringpi +sudo apt-get install pigpio python-pigpio python3-pigpio ``` +Please visit https://abyz.me.uk/rpi/pigpio for more information on the library. -Third, you will need the Pi Hat and components that are included in the CAD folder in this repository. You could also wire this with jumpers and a breadboard or a prototype-hat, but it will not be as organized! +Third, you will need the Pi Hat and components that are included in the CAD folder in this repository. You could also wire this with jumpers and a breadboard or a prototype-hat. Last, you will need to compile this pointing to the Wiring Pi library like this ``` -gcc -o flash_bash flash_bash.c -lwiringPi +gcc -Wall -pthread -o flash_bash flash_bash.c -lpigpio -lrt ``` +or you can just run make in this directory. That should get you started all you have to do now is run the program! ``` diff --git a/src/flash_bash.c b/src/flash_bash.c index 1b80e2e..ff98b6d 100755 --- a/src/flash_bash.c +++ b/src/flash_bash.c @@ -1,7 +1,12 @@ /* * flash_bash.c * - * Author: Cristian + * Flash BASH is a Raspberry Pi based tool to automate glitching into privileged shells like bootloader shells. + * This code utilizes the pigpio library to interface with the RPi's GPIO pins that will be used either as an input trigger or output trigger to initiate glitching. + * Please visit https://github.com/cristian-vences/flash-bash for more detail. + * + * Author: Cristian Vences + * Updated September 2024 */ #include //getchar,printf @@ -10,14 +15,11 @@ #include //strlen #include //strerror -#include //wiringPi -#include //serialOpen +#include //pigpio library -#define PIN7 7 //pin for glitching -#define PIN11 0 //pin for glitching +#define PIN7 4 //pin for glitching, broadcom number 4 +#define PIN11 17 //pin for glitching, broadcom number 17 -#define FLAT_LINE 1 //number definition -#define MORSE_CODE 2 //number definition #define TIMED 1 //number definition #define SERIAL 2 //number definition @@ -26,30 +28,56 @@ int main(void) { - int fd; //file descriptor - char start_trigger[100]; //glitch start trigger - char stop_trigger[100]; //glitch stop trigger - char buff[100]; //buffer for incoming serial - char device[100]; //device name from /dev - int i, n, n2, in; //for loops, for stringlength, for storing incoming serial - int choice; //for choosing glitch style - int baud; //stores baud rate - int val = 1; //value from string comparison - int count = 0; //simple count for how many times buff has been changed - int attack_type = 0; //attack style - int start_time = 0; //time for startup before glitching - int stop_time = 0; //time for tool to stop glitching + // Initialization variables + unsigned version; //store pigpio version + unsigned int hwRevision; //store hardware revision + char hwBuff[32]; //buffer for formatting unsigned int in hex + int gpioResult = 0; //store result from pigpio calls + + // Configuration variables + int choice; //for choosing glitch style + int attackType = 0; //attack style + + // Serial attack variables + int fd; //file descriptor + char startTrigger[100]; //glitch start trigger string + char stopTrigger[100]; //glitch stop trigger string + char buff[100]; //buffer for incoming serial characters + char device[100]; //device name from /dev + int i, n, n2, in; //for loops, for stringlength, for storing incoming serial + int baud; //stores baud rate + int val = 1; //value from string comparison + int count = 0; //simple count for how many times buff has been changed + + // Time attack variables + int startTime = 0; //time for startup before glitching + int stopTime = 0; //time for tool to stop glitching // Welcome printf("Welcome to Flash BASH!\n\n"); - printf("****CONFIGURATION*****\n\n"); - - // Initialize WiringPi - if (wiringPiSetup() == -1) - { - fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno)); - return 1; - } + + // Print versions + version = gpioVersion(); //call for pigpio version + printf("Using pigpio version: %u\n", version); + + hwRevision = gpioHardwareRevision(); //call for hardware revision https://abyz.me.uk/rpi/pigpio/cif.html#gpioHardwareRevision + snprintf(hwBuff, sizeof(hwBuff), "%x", hwRevision); //securely format the hardware revision as a hex string + printf("Running on: %s\n", hwBuff); + + // Initialize pigpio + printf("Initializing pigpio. . ."); + gpioResult = gpioInitialise(); + + if (gpioResult == PI_INIT_FAILED) { + printf("ERROR\n Unable to initialize pigpio.\n"); + printf("Error value = %d\n", gpioResult); + return -1; // Return -1 value to indicate an error + } + + printf(" SUCCESS\n"); + + // Begin configuration + printf("\n****CONFIGURATION*****\n\n"); // Get attack style selection from user printf("What type of attack? TIMED [1] or SERIAL [2]: "); @@ -57,33 +85,57 @@ int main(void) if ((choice != 1) && (choice != 2)) { printf("Invalid selection, expect 1 or 2.\n"); - return 1; + return -1; } else if (choice == 1) { - attack_type = TIMED; + attackType = TIMED; printf("Attack style: TIMED\n\n"); } else { - attack_type = SERIAL; + attackType = SERIAL; printf("Attack style: SERIAL\n\n"); } - // Go through set up for serial attack - if (attack_type == SERIAL) + // Configure the GPIO pin attached to the MUX as an output pin + // PI_OUTPUT is defined within the pigpio library + gpioResult = gpioSetMode(PIN7, PI_OUTPUT); + + // Check the result to ensure the GPIO pin could be properly configured + if (gpioResult != 0) // A value of 0 = OK { - // Initialize wiringPi - pinMode(PIN7, OUTPUT); //sets pin mode to output - digitalWrite(PIN7, HIGH); //initially sets it to high + // Error handling + switch (gpioResult) + { + case PI_BAD_GPIO: + printf("%d is a bad gpio pin\n", PIN7); + return -1; + case PI_BAD_MODE: + printf("Bad mode specified for gpio pin %d\n", PIN7); + return -1; + + default: + printf("Unexpected error encountered when setting mode specified for gpio pin %d\n", PIN7); + printf("Result = %d\n", gpioResult); + return -1; + } + } + + // Initially set PIN7 to high + gpioWrite(PIN7, PI_ON); + + // Go through set up for serial attack + if (attackType == SERIAL) + { // Get Baud rate from user printf("What BAUD (9600, 115200, 38400, etc): "); scanf("%d", &baud); if ((baud <= 0) && (baud >= 250001)) { printf("Invalid baud rate entry (expects 1 to 250000 baud).\n"); - return 1; + return -1; } else { @@ -91,168 +143,294 @@ int main(void) } // Get serial device from user - printf("Enter serial device descriptor:\n"); + printf("Enter serial device descriptor:"); scanf("%99s", device); printf("Device descriptor = `%s`\n\n", device); // Initialize serial communication - if ((fd = serialOpen(device, baud)) == -1) + if ((fd = serOpen(device, baud, 0)) < 0) // A value of 0 >= OK { - fprintf(stderr, "Unable to open serial devices: %s\n", strerror(errno)); - return 1; + // Error handling + switch (fd) + { + case PI_NO_HANDLE: + printf("No handle available: %d\n", fd); + return -1; + + case PI_SER_OPEN_FAILED: + printf("Can't open serial device: %d\n", fd); + return -1; + + default: + printf("Unexpected error encountered when setting mode specified for gpio pin %d\n", fd); + printf("Result = %d\n", gpioResult); + return -1; + } } - // Obtain glitch trigger 1 from user + // Obtain start trigger for glitching from user printf("What phrase would you like to start glitching on? (no longer than 99 characters):\n"); - scanf("%99s", start_trigger); - n = strlen(start_trigger); + scanf("%99s", startTrigger); + n = strlen(startTrigger); printf("Trigger string length = %d\n", n); - printf("Glitch string = %s\n\n", start_trigger); + printf("Glitch string = '%s'\n\n", startTrigger); - // Obtain glitch trigger 2 from user + // Obtain stop trigger for glitching from user printf("What phrase would you like to stop glitching on? (no longer than 99 characters):\n"); - scanf("%99s", stop_trigger); - n2 = strlen(stop_trigger); - printf("Stirng length = %d\n", n2); - printf("Glitch string = %s\n", stop_trigger); + scanf("%99s", stopTrigger); + n2 = strlen(stopTrigger); + printf("Trigger tirng length = %d\n", n2); + printf("Glitch string = '%s'\n", stopTrigger); // This buffer is filled by the serial output from target device. - // The buffer is compared to start_trigger and stop_trigger. All 3 are of size 100. + // The buffer is compared to startTrigger and stopTrigger. All 3 are of size 100. // Once buffer is equal to a trigger it either grounds the pin or releases // Fill in buffer once from serial for (i = 0; i < n; i++) { - in = serialGetchar(fd); - serialPutchar(fd, in); - buff[i] = in; + // Begin reading from serial input + if ((in = serReadByte(fd)) < 0) // A value of 0 >= is a legit character + { + // Error handling + switch (in) + { + case PI_BAD_HANDLE: + printf("Bad handle provided: %d\n", in); + return -1; + + case PI_SER_READ_FAILED: + printf("Serial read failed: %d\n", in); + return -1; + + case PI_SER_READ_NO_DATA: + break; + + default: + printf("Unexpected error encountered when reading byte: %d\n", in); + return -1; + } + } else { + buff[i] = in; + } } buff[i] = '\0'; #ifdef SHOW_OUTPUT printf("%d: buff = %s\n", count, buff); #endif - val = strcmp(buff, start_trigger); //compare the buffer to the trigger + val = strcmp(buff, startTrigger); //compare the buffer to the trigger // Start loop to compare strings // NOTE: This code could be made faster for efficiency and accuracy of // triggering, however in basic glitching scenarios this is good enough. while (val != 0) { //run loop until buff and trigger are the same - in = serialGetchar(fd); - fflush(stdout); - // This loop 'shifts' the buffer down to make space for the incoming - // byte, as we do a rolling comparison byte-by-byte. - for (i = 0; i < n - 1; i++) + if ((in = serReadByte(fd)) < 0) // A value of 0 >= is a legit character { - buff[i] = buff[i + 1]; - } - buff[i] = in; - buff[i + 1] = '\0'; - count++; + // Error handling + switch (in) + { + case PI_BAD_HANDLE: + printf("Bad handle provided: %d\n", in); + return -1; + + case PI_SER_READ_FAILED: + printf("Serial read failed: %d\n", in); + return -1; + + case PI_SER_READ_NO_DATA: + break; + + default: + printf("Unexpected error encountered when reading byte: %d\n", in); + return -1; + } + } else { + fflush(stdout); + // This loop 'shifts' the buffer down to make space for the incoming + // byte, as we do a rolling comparison byte-by-byte. + for (i = 0; i < n - 1; i++) + { + buff[i] = buff[i + 1]; + } + buff[i] = in; + buff[i + 1] = '\0'; + count++; #ifdef SHOW_OUTPUT printf("%d: buff = %s\n", count, buff); #endif - // If start_trigger == buff, break out of this loop: - val = strcmp(buff, start_trigger); + // If startTrigger == buff, break out of this loop: + val = strcmp(buff, startTrigger); + } } // Print success statement and trigger glitching printf("\n\n\n\n\nGLITCHING INITIATED!\n\n\n\n\n"); //buff and trigger == - digitalWrite(PIN7, LOW); //tigger MUX + gpioWrite(PIN7, PI_OFF); //trigger MUX val = 1; //reset loop breaker count = 0; //reset buffer count + // Begin comparing target output to stopTrigger to cease glitching // Fill in buffer once from serial for (i = 0; i < n2; i++) { - in = serialGetchar(fd); - serialPutchar(fd, in); - buff[i] = in; + if ((in = serReadByte(fd)) < 0) // A value of 0 >= is a legit character + { + // Error handling + switch (in) + { + case PI_BAD_HANDLE: + printf("Bad handle provided: %d\n", in); + return -1; + + case PI_SER_READ_FAILED: + printf("Serial read failed: %d\n", in); + return -1; + + case PI_SER_READ_NO_DATA: + break; + + default: + printf("Unexpected error encountered when reading byte: %d\n", in); + return -1; + } + } else { + buff[i] = in; + } } buff[i] = '\0'; #ifdef SHOW_OUTPUT printf("%d: buff = %s\n", count, buff); #endif - val = strcmp(buff, stop_trigger); //compare the buffer to the trigger + val = strcmp(buff, stopTrigger); //compare the buffer to the trigger // Start loop to compare strings while (val != 0) - { - //run loop until buff and trigger are the same - in = serialGetchar(fd); - fflush(stdout); - for (i = 0; i < n2 - 1; i++) + { //run loop until buff and trigger are the same + if ((in = serReadByte(fd)) < 0) // A value of 0 >= is a legit character { - buff[i] = buff[i + 1]; - } - buff[i] = in; - buff[i + 1] = '\0'; - count++; + switch (in) + { + case PI_BAD_HANDLE: + printf("Bad handle provided: %d\n", in); + return -1; + + case PI_SER_READ_FAILED: + printf("Serial read failed: %d\n", in); + return -1; + + case PI_SER_READ_NO_DATA: + break; + + default: + printf("Unexpected error encountered when reading byte: %d\n", in); + return -1; + } + } else { + fflush(stdout); + // This loop 'shifts' the buffer down to make space for the incoming + // byte, as we do a rolling comparison byte-by-byte. + for (i = 0; i < n2 - 1; i++) + { + buff[i] = buff[i + 1]; + } + buff[i] = in; + buff[i + 1] = '\0'; + count++; #ifdef SHOW_OUTPUT printf("%d: buff = %s\n", count, buff); #endif - val = strcmp(buff, stop_trigger); + // If stopTrigger == buff, break out of this loop: + val = strcmp(buff, stopTrigger); + } } // Print success statement and trigger glitching printf("\n\n\n\nGLITCHED\n\n\n\n"); //buff and trigger == - digitalWrite(PIN7, HIGH); //tigger MUX + gpioWrite(PIN7, PI_ON); //trigger MUX val = 1; count = 0; // Close serial port - serialClose(fd); + serClose(fd); } else { // Set up timed glitch attack - pinMode(PIN11, INPUT); //sets pin mode to INPUT + + // Configure the GPIO pin attached to the target VCC as an input pin + // PI_INPUT is defined within the pigpio library + gpioResult = gpioSetMode(PIN11, PI_INPUT); + + // Check the result to ensure the GPIO pin could be properly configured + if (gpioResult != 0) // A value of 0 = OK + { + // Error handling + switch (gpioResult) + { + case PI_BAD_GPIO: + printf("%d is a bad gpio pin\n", PIN11); + return -1; + + case PI_BAD_MODE: + printf("Bad mode specified for gpio pin %d\n", PIN11); + return -1; + + default: + printf("Unexpected error encountered when setting mode specified for gpio pin %d\n", PIN11); + printf("Result = %d\n", gpioResult); + return -1; + } + } // Get time variable from user printf("How long after boot to start glitching (1 - 300 secs): "); - scanf("%d", &start_time); - if ((start_time <= 0) && (start_time >= 301)) + scanf("%d", &startTime); + if ((startTime <= 0) && (startTime >= 301)) { printf("Invalid time entry (expects 1 to 300 secs).\n"); - return 1; + return -1; } else { - printf("start_time = %d\n\n", start_time); + printf("startTime = %d\n\n", startTime); } printf("How long after glitching has started to stop (1 - 300 secs): "); - scanf("%d", &stop_time); - if ((stop_time <= 0) && (stop_time >= 301)) + scanf("%d", &stopTime); + if ((stopTime <= 0) && (stopTime >= 301)) { printf("Invalid time entry (expects 1 to 300 secs).\n"); - return 1; + return -1; } else { - printf("stop_time = %d\n\n", stop_time); + printf("stopTime = %d\n\n", stopTime); } printf("Please turn on target device now!\n\n"); - while (digitalRead(PIN11) != 1) + while (gpioRead(PIN11) != 1) { // Wait for device to turn on, as PIN11 is sensing device VCC. } - // NOTE: Percision of this is not optimal as OS may not give us accurate timing, + // NOTE: Precision of this is not optimal as OS may not give us accurate timing, // users who need more precision should update this. - sleep(start_time); + sleep(startTime); - digitalWrite(PIN7, LOW); //tigger MUX + gpioWrite(PIN7, PI_OFF); //trigger MUX printf("\n\n\n\n\nGLITCHING INITIATED!\n\n\n\n\n"); //buff and trigger == // NOTE: See above (lack of) precision note. - sleep(stop_time); + sleep(stopTime); - digitalWrite(PIN7, HIGH); //tigger MUX + gpioWrite(PIN7, PI_ON); //trigger MUX printf("\n\n\n\nGLITCHING CEASED\n\n\n\n"); //time elapsed } + // Terminate the pigpio library to clean up + gpioTerminate(); + return 0; -} +} \ No newline at end of file From fa99381ed0d75d6a857a46c91e0368f0f9c9226d Mon Sep 17 00:00:00 2001 From: cristian-vences <156953308+cristian-vences@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:15:32 -0500 Subject: [PATCH 04/12] updated readme, minor tweaks --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index db090a0..866a3fd 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ Flash-BASH is a Raspberry Pi based tool that uses a multiplexer to "glitch" a ta See our blog post at https://www.riverloopsecurity.com/blog/2021/09/introducing-flash-bash/ for information on usage. ## Install/Compile -The easiest way to use this tool without any tweaks is with a Raspberry Pi Model Type 3 (Model A+, B+, Pi Zero, Pi Zero W, Pi2B, Pi3B, Pi4B). +The easiest way to use this tool without any tweaks is with a Raspberry Pi Type 3 (Model A+, B+, Pi Zero, Pi Zero W, Pi2B, Pi3B, Pi4B). However, with minor tweaks to the code, any Raspberry Pi, Arduino, or micro-controller should work fine. -Secondly, this tool is based on the dependency pigpio which should be automatically installed on latest version of Raspberry Pi but can be installed with: +Secondly, this tool is based on the dependency pigpio which should be automatically installed on latest version of Raspberry Pi OS but can be installed with: ``` sudo apt-get install pigpio python-pigpio python3-pigpio ``` From 484c99f9d51a1c361dea0a7b3294d1b7a0f2b79e Mon Sep 17 00:00:00 2001 From: cristian-vences <156953308+cristian-vences@users.noreply.github.com> Date: Thu, 12 Sep 2024 14:39:14 -0500 Subject: [PATCH 05/12] Updated the PCB to use an active multiplexer and switched over to KiCAD 8.0.4. Also included multiplexer footprint and symbol --- cad/BOM | 6 + cad/CAMOutputs.zip | Bin 58501 -> 0 bytes cad/FAB.zip | Bin 0 -> 47525 bytes cad/FlashBash.zip | Bin 0 -> 105170 bytes cad/README.md | 2 +- cad/RasPi-BplusHAT.brd | 1135 -------- cad/RasPi-BplusHAT.sch | 5830 ---------------------------------------- cad/TMUX1133PWR.zip | Bin 0 -> 4857 bytes 8 files changed, 7 insertions(+), 6966 deletions(-) create mode 100644 cad/BOM delete mode 100755 cad/CAMOutputs.zip create mode 100644 cad/FAB.zip create mode 100644 cad/FlashBash.zip delete mode 100755 cad/RasPi-BplusHAT.brd delete mode 100755 cad/RasPi-BplusHAT.sch create mode 100644 cad/TMUX1133PWR.zip diff --git a/cad/BOM b/cad/BOM new file mode 100644 index 0000000..c023be7 --- /dev/null +++ b/cad/BOM @@ -0,0 +1,6 @@ +"Reference","Value","Datasheet","Footprint","Qty","DNP" +"C1","1uF","~","Capacitor_SMD:C_0805_2012Metric","1","" +"J1","GPIO","","Connector_PinSocket_2.54mm:PinSocket_2x20_P2.54mm_Vertical","1","" +"J2,J3,J5","Conn_01x03","~","Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical","3","" +"J4","Conn_02x03_Odd_Even","~","Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical","1","" +"U1","TMUX1133PWR","TMUX1133PWR","TMUX1133PWR:PW0016A-MFG","1","" diff --git a/cad/CAMOutputs.zip b/cad/CAMOutputs.zip deleted file mode 100755 index 5ce6b2e672306eb27307c8a77f2d219e7f0a64b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58501 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