Serverless.com Security

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Basic Information

Organization

Μια Οργάνωση είναι η υψηλότερη οντότητα μέσα στο οικοσύστημα του Serverless Framework. Αντιπροσωπεύει μια συλλογική ομάδα, όπως μια εταιρεία, τμήμα ή οποιαδήποτε μεγάλη οντότητα, που περιλαμβάνει πολλά έργα, ομάδες και εφαρμογές.

Team

Η Ομάδα είναι οι χρήστες με πρόσβαση μέσα στην οργάνωση. Οι ομάδες βοηθούν στην οργάνωση των μελών με βάση τους ρόλους. Οι Συνεργάτες μπορούν να δουν και να αναπτύξουν υπάρχουσες εφαρμογές, ενώ οι Διαχειριστές μπορούν να δημιουργήσουν νέες εφαρμογές και να διαχειριστούν τις ρυθμίσεις της οργάνωσης.

Application

Μια Εφαρμογή είναι μια λογική ομαδοποίηση σχετικών υπηρεσιών μέσα σε μια Οργάνωση. Αντιπροσωπεύει μια ολοκληρωμένη εφαρμογή που αποτελείται από πολλές serverless υπηρεσίες που συνεργάζονται για να παρέχουν μια συνεκτική λειτουργικότητα.

Services

Μια Υπηρεσία είναι το βασικό συστατικό μιας serverless εφαρμογής. Αντιπροσωπεύει ολόκληρο το serverless έργο σας, περιλαμβάνοντας όλες τις λειτουργίες, ρυθμίσεις και πόρους που απαιτούνται. Συνήθως ορίζεται σε ένα αρχείο serverless.yml, μια υπηρεσία περιλαμβάνει μεταδεδομένα όπως το όνομα της υπηρεσίας, ρυθμίσεις παρόχου, λειτουργίες, γεγονότα, πόρους, πρόσθετα και προσαρμοσμένες μεταβλητές.

service: my-service
provider:
name: aws
runtime: nodejs14.x
functions:
hello:
handler: handler.hello
Λειτουργία

Μια Λειτουργία αντιπροσωπεύει μια μοναδική serverless λειτουργία, όπως μια AWS Lambda λειτουργία. Περιέχει τον κώδικα που εκτελείται ως απάντηση σε γεγονότα.

Ορίζεται στην ενότητα functions στο serverless.yml, καθορίζοντας τον χειριστή, το runtime, τα γεγονότα, τις μεταβλητές περιβάλλοντος και άλλες ρυθμίσεις.

functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
Συμβάν

Συμβάντα είναι οι ενεργοποιήσεις που καλούν τις serverless λειτουργίες σας. Ορίζουν πώς και πότε θα πρέπει να εκτελείται μια λειτουργία.

Κοινές τύποι συμβάντων περιλαμβάνουν αιτήματα HTTP, προγραμματισμένα συμβάντα (cron jobs), συμβάντα βάσης δεδομένων, μεταφορτώσεις αρχείων και άλλα.

functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
- schedule:
rate: rate(10 minutes)
Πόρος

Πόροι σας επιτρέπουν να ορίσετε επιπλέον πόρους cloud στους οποίους εξαρτάται η υπηρεσία σας, όπως βάσεις δεδομένων, αποθηκευτικούς κάδους ή ρόλους IAM.

Ορίζονται στην ενότητα resources, συχνά χρησιμοποιώντας τη σύνταξη CloudFormation για το AWS.

resources:
Resources:
MyDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: my-table
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
Πάροχος

Το Provider αντικείμενο καθορίζει τον πάροχο υπηρεσιών cloud (π.χ., AWS, Azure, Google Cloud) και περιέχει ρυθμίσεις διαμόρφωσης σχετικές με αυτόν τον πάροχο.

Περιλαμβάνει λεπτομέρειες όπως το runtime, η περιοχή, το στάδιο και τα διαπιστευτήρια.

yamlCopy codeprovider:
name: aws
runtime: nodejs14.x
region: us-east-1
stage: dev
Στάδιο και Περιοχή

Το στάδιο αντιπροσωπεύει διαφορετικά περιβάλλοντα (π.χ., ανάπτυξη, προετοιμασία, παραγωγή) όπου η υπηρεσία σας μπορεί να αναπτυχθεί. Επιτρέπει συγκεκριμένες ρυθμίσεις και αναπτύξεις ανά περιβάλλον.

provider:
stage: dev

Η περιοχή καθορίζει την γεωγραφική περιοχή όπου θα αναπτυχθούν οι πόροι σας. Είναι σημαντική για ζητήματα καθυστέρησης, συμμόρφωσης και διαθεσιμότητας.

provider:
region: us-west-2
Πρόσθετα

Πρόσθετα επεκτείνουν τη λειτουργικότητα του Serverless Framework προσθέτοντας νέες δυνατότητες ή ενσωματώνοντας άλλα εργαλεία και υπηρεσίες. Ορίζονται στην ενότητα plugins και εγκαθίστανται μέσω του npm.

plugins:
- serverless-offline
- serverless-webpack
Επίπεδα

Επίπεδα σας επιτρέπουν να συσκευάζετε και να διαχειρίζεστε κοινό κώδικα ή εξαρτήσεις ξεχωριστά από τις λειτουργίες σας. Αυτό προάγει την επαναχρησιμοποίηση και μειώνει το μέγεθος των πακέτων ανάπτυξης. Ορίζονται στην ενότητα layers και αναφέρονται από τις λειτουργίες.

layers:
commonLibs:
path: layer-common
functions:
hello:
handler: handler.hello
layers:
- { Ref: CommonLibsLambdaLayer }
Μεταβλητές και Προσαρμοσμένες Μεταβλητές

Μεταβλητές επιτρέπουν τη δυναμική διαμόρφωση επιτρέποντας τη χρήση θέσεων κράτησης που επιλύονται κατά την ώρα ανάπτυξης.

  • Σύνταξη: Η σύνταξη ${variable} μπορεί να αναφέρεται σε μεταβλητές περιβάλλοντος, περιεχόμενα αρχείων ή άλλες παραμέτρους διαμόρφωσης.
functions:
hello:
handler: handler.hello
environment:
TABLE_NAME: ${self:custom.tableName}
  • Προσαρμοσμένες Μεταβλητές: Η ενότητα custom χρησιμοποιείται για να ορίσει μεταβλητές και διαμορφώσεις που είναι συγκεκριμένες για τον χρήστη και μπορούν να επαναχρησιμοποιηθούν σε όλο το serverless.yml.
custom:
tableName: my-dynamodb-table
stage: ${opt:stage, 'dev'}
Εξόδους

Εξόδους ορίζουν τις τιμές που επιστρέφονται μετά την ανάπτυξη μιας υπηρεσίας, όπως ARNs πόρων, σημεία πρόσβασης ή άλλες χρήσιμες πληροφορίες. Ορίζονται στην ενότητα outputs και συχνά χρησιμοποιούνται για να εκθέσουν πληροφορίες σε άλλες υπηρεσίες ή για εύκολη πρόσβαση μετά την ανάπτυξη.

¡outputs:
ApiEndpoint:
Description: "API Gateway endpoint URL"
Value:
Fn::Join:
- ""
- - "https://"
- Ref: ApiGatewayRestApi
- ".execute-api."
- Ref: AWS::Region
- ".amazonaws.com/"
- Ref: AWS::Stage
Ρόλοι και Άδειες IAM

Ρόλοι και Άδειες IAM ορίζουν τα διαπιστευτήρια ασφαλείας και τα δικαιώματα πρόσβασης για τις λειτουργίες σας και άλλους πόρους. Διαχειρίζονται υπό τις ρυθμίσεις provider ή ατομικών λειτουργιών για να προσδιορίσουν τις απαραίτητες άδειες.

provider:
[...]
iam:
role:
statements:
- Effect: 'Allow'
Action:
- 'dynamodb:PutItem'
- 'dynamodb:Get*'
- 'dynamodb:Scan*'
- 'dynamodb:UpdateItem'
- 'dynamodb:DeleteItem'
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
Μεταβλητές Περιβάλλοντος

Μεταβλητές σας επιτρέπουν να περάσετε ρυθμίσεις παραμετροποίησης και μυστικά στις συναρτήσεις σας χωρίς να τα κωδικοποιείτε σκληρά. Ορίζονται στην ενότητα environment είτε για τον πάροχο είτε για μεμονωμένες συναρτήσεις.

provider:
environment:
STAGE: ${self:provider.stage}
functions:
hello:
handler: handler.hello
environment:
TABLE_NAME: ${self:custom.tableName}
Εξαρτήσεις

Εξαρτήσεις διαχειρίζονται τις εξωτερικές βιβλιοθήκες και τα modules που απαιτούν οι λειτουργίες σας. Συνήθως διαχειρίζονται μέσω διαχειριστών πακέτων όπως το npm ή το pip, και συμπεριλαμβάνονται στο πακέτο ανάπτυξής σας χρησιμοποιώντας εργαλεία ή plugins όπως το serverless-webpack.

plugins:
- serverless-webpack
Hooks

Hooks επιτρέπουν να εκτελείτε προσαρμοσμένα σενάρια ή εντολές σε συγκεκριμένα σημεία του κύκλου ζωής ανάπτυξης. Ορίζονται χρησιμοποιώντας plugins ή μέσα στο serverless.yml για να εκτελούν ενέργειες πριν ή μετά τις αναπτύξεις.

custom:
hooks:
before:deploy:deploy: echo "Starting deployment..."

Tutorial

Αυτό είναι μια περίληψη του επίσημου tutorial από τα έγγραφα:

  1. Δημιουργήστε έναν λογαριασμό AWS (Serverless.com ξεκινά στην υποδομή AWS)
  2. Δημιουργήστε έναν λογαριασμό στο serverless.com
  3. Δημιουργήστε μια εφαρμογή:
# Create temp folder for the tutorial
mkdir /tmp/serverless-tutorial
cd /tmp/serverless-tutorial

# Install Serverless cli
npm install -g serverless

# Generate template
serverless #Choose first one (AWS / Node.js / HTTP API)
## Indicate a name like "Tutorial"
## Login/Register
## Create A New App
## Indicate a name like "tutorialapp)

Αυτό θα έπρεπε να έχει δημιουργήσει μια εφαρμογή που ονομάζεται tutorialapp την οποία μπορείτε να ελέγξετε στο serverless.com και έναν φάκελο που ονομάζεται Tutorial με το αρχείο handler.js που περιέχει κάποιο JS κώδικα με έναν κώδικα helloworld και το αρχείο serverless.yml που δηλώνει αυτή τη λειτουργία:

exports.hello = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({
message: "Go Serverless v4! Your function executed successfully!",
}),
}
}
  1. Δημιουργήστε έναν πάροχο AWS, πηγαίνοντας στον πίνακα ελέγχου στο https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws.
  2. Για να δώσετε πρόσβαση στο serverless.com στο AWS, θα ζητήσει να εκτελέσετε ένα cloudformation stack χρησιμοποιώντας αυτό το αρχείο ρυθμίσεων (την ώρα που γράφεται αυτό): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
  3. Αυτό το πρότυπο δημιουργεί έναν ρόλο που ονομάζεται SFRole-<ID> με arn:aws:iam::aws:policy/AdministratorAccess πάνω από τον λογαριασμό με μια Ταυτότητα Εμπιστοσύνης που επιτρέπει στον λογαριασμό AWS του Serverless.com να έχει πρόσβαση στον ρόλο.
Yaml roleTemplate ```yaml Description: This stack creates an IAM role that can be used by Serverless Framework for use in deployments. Resources: SFRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: AWS: arn:aws:iam::486128539022:root Action: - sts:AssumeRole Condition: StringEquals: sts:ExternalId: !Sub "ServerlessFramework-${OrgUid}" Path: / RoleName: !Ref RoleName ManagedPolicyArns: - arn:aws:iam::aws:policy/AdministratorAccess ReporterFunction: Type: Custom::ServerlessFrameworkReporter Properties: ServiceToken: "arn:aws:lambda:us-east-1:486128539022:function:sp-providers-stack-reporter-custom-resource-prod-tmen2ec" OrgUid: !Ref OrgUid RoleArn: !GetAtt SFRole.Arn Alias: !Ref Alias Outputs: SFRoleArn: Description: "ARN for the IAM Role used by Serverless Framework" Value: !GetAtt SFRole.Arn Parameters: OrgUid: Description: Serverless Framework Org Uid Type: String Alias: Description: Serverless Framework Provider Alias Type: String RoleName: Description: Serverless Framework Role Name Type: String ```
Σχέση Εμπιστοσύνης ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::486128539022:root" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "ServerlessFramework-7bf7ddef-e1bf-43eb-a111-4d43e0894ccb" } } } ] } ```
  1. Το σεμινάριο ζητά να δημιουργηθεί το αρχείο createCustomer.js, το οποίο θα δημιουργήσει βασικά ένα νέο API endpoint που θα διαχειρίζεται το νέο αρχείο JS και ζητά να τροποποιηθεί το αρχείο serverless.yml ώστε να δημιουργήσει ένα νέο πίνακα DynamoDB, να ορίσει μια μεταβλητή περιβάλλοντος, τον ρόλο που θα χρησιμοποιεί τις παραγόμενες lambdas.
"use strict"
const AWS = require("aws-sdk")
module.exports.createCustomer = async (event) => {
const body = JSON.parse(Buffer.from(event.body, "base64").toString())
const dynamoDb = new AWS.DynamoDB.DocumentClient()
const putParams = {
TableName: process.env.DYNAMODB_CUSTOMER_TABLE,
Item: {
primary_key: body.name,
email: body.email,
},
}
await dynamoDb.put(putParams).promise()
return {
statusCode: 201,
}
}
  1. Αναπτύξτε το εκτελώντας serverless deploy
  2. Η ανάπτυξη θα πραγματοποιηθεί μέσω ενός CloudFormation Stack
  3. Σημειώστε ότι οι lambdas είναι εκτεθειμένες μέσω του API gateway και όχι μέσω άμεσων URLs
  4. Δοκιμάστε το
  5. Το προηγούμενο βήμα θα εκτυπώσει τις URLs όπου οι λειτουργίες lambda των API endpoints σας έχουν αναπτυχθεί

Αξιολόγηση Ασφαλείας του Serverless.com

Κακώς ρυθμισμένοι ρόλοι και άδειες IAM

Οι υπερβολικά επιτρεπτικοί ρόλοι IAM μπορούν να παραχωρήσουν μη εξουσιοδοτημένη πρόσβαση σε πόρους cloud, οδηγώντας σε παραβιάσεις δεδομένων ή χειρισμό πόρων.

Όταν δεν καθορίζονται άδειες για μια λειτουργία Lambda, θα δημιουργηθεί ένας ρόλος με άδειες μόνο για τη δημιουργία καταγραφών, όπως:

Ελάχιστες άδειες lambda ```json { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:CreateLogGroup", "logs:TagResource" ], "Resource": [ "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*" ], "Effect": "Allow" }, { "Action": ["logs:PutLogEvents"], "Resource": [ "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*:*" ], "Effect": "Allow" } ] } ```

Στρατηγικές Μείωσης

  • Αρχή της Ελάχιστης Εξουσίας: Αναθέστε μόνο τις απαραίτητες άδειες σε κάθε λειτουργία.
provider:
[...]
iam:
role:
statements:
- Effect: 'Allow'
Action:
- 'dynamodb:PutItem'
- 'dynamodb:Get*'
- 'dynamodb:Scan*'
- 'dynamodb:UpdateItem'
- 'dynamodb:DeleteItem'
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
  • Χρησιμοποιήστε Ξεχωριστούς Ρόλους: Διαχωρίστε τους ρόλους με βάση τις απαιτήσεις της λειτουργίας.

Ασφαλή Μυστικά και Διαχείριση Ρυθμίσεων

Η αποθήκευση ευαίσθητων πληροφοριών (π.χ., API keys, διαπιστευτήρια βάσης δεδομένων) απευθείας στο serverless.yml ή στον κώδικα μπορεί να οδηγήσει σε έκθεση αν οι αποθετήρες παραβιαστούν.

Ο συνιστώμενος τρόπος αποθήκευσης μεταβλητών περιβάλλοντος στο αρχείο serverless.yml από το serverless.com (την στιγμή της συγγραφής αυτού του κειμένου) είναι να χρησιμοποιήσετε τους παρόχους ssm ή s3, οι οποίοι επιτρέπουν να αποκτήσετε τις τιμές περιβάλλοντος από αυτές τις πηγές κατά την ώρα ανάπτυξης και να ρυθμίσετε τις μεταβλητές περιβάλλοντος των lambdas με το κείμενο χωρίς τις τιμές!

Caution

Επομένως, οποιοσδήποτε έχει άδειες για να διαβάσει τη ρύθμιση των lambdas μέσα στο AWS θα μπορεί να πρόσβαση σε όλες αυτές τις μεταβλητές περιβάλλοντος σε καθαρό κείμενο!

Για παράδειγμα, το παρακάτω παράδειγμα θα χρησιμοποιήσει το SSM για να αποκτήσει μια μεταβλητή περιβάλλοντος:

provider:
environment:
DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}

Και ακόμη και αν αυτό αποτρέπει την σκληρή κωδικοποίηση της τιμής της μεταβλητής περιβάλλοντος στο serverless.yml αρχείο, η τιμή θα αποκτηθεί κατά την ώρα ανάπτυξης και θα προστεθεί σε καθαρό κείμενο μέσα στη μεταβλητή περιβάλλοντος της lambda.

Tip

Ο συνιστώμενος τρόπος αποθήκευσης μεταβλητών περιβάλλοντος χρησιμοποιώντας το serveless.com θα ήταν να αποθηκευτεί σε ένα AWS secret και απλώς να αποθηκευτεί το όνομα του μυστικού στη μεταβλητή περιβάλλοντος και ο κώδικας της lambda θα πρέπει να το συγκεντρώνει.

Στρατηγικές Μείωσης

  • Ενσωμάτωση Secrets Manager: Χρησιμοποιήστε υπηρεσίες όπως AWS Secrets Manager.
  • Κρυπτογραφημένες Μεταβλητές: Εκμεταλλευτείτε τις δυνατότητες κρυπτογράφησης του Serverless Framework για ευαίσθητα δεδομένα.
  • Έλεγχοι Πρόσβασης: Περιορίστε την πρόσβαση σε μυστικά με βάση τους ρόλους.

Ευάλωτος Κώδικας και Εξαρτήσεις

Οι παρωχημένες ή ανασφαλείς εξαρτήσεις μπορούν να εισάγουν ευπάθειες, ενώ η ακατάλληλη διαχείριση εισόδου μπορεί να οδηγήσει σε επιθέσεις κώδικα.

Στρατηγικές Μείωσης

  • Διαχείριση Εξαρτήσεων: Ενημερώνετε τακτικά τις εξαρτήσεις και ελέγχετε για ευπάθειες.
plugins:
- serverless-webpack
- serverless-plugin-snyk
  • Επικύρωση Εισόδου: Εφαρμόστε αυστηρή επικύρωση και απολύμανση όλων των εισόδων.
  • Ανασκοπήσεις Κώδικα: Διεξάγετε λεπτομερείς ανασκοπήσεις για να εντοπίσετε αδυναμίες ασφαλείας.
  • Στατική Ανάλυση: Χρησιμοποιήστε εργαλεία για να ανιχνεύσετε ευπάθειες στη βάση κώδικα.

Ανεπαρκής Καταγραφή και Παρακολούθηση

Χωρίς κατάλληλη καταγραφή και παρακολούθηση, οι κακόβουλες δραστηριότητες μπορεί να παραμείνουν απαρατήρητες, καθυστερώντας την αντίδραση σε περιστατικά.

Στρατηγικές Μείωσης

  • Κεντρική Καταγραφή: Συγκεντρώστε τα αρχεία καταγραφής χρησιμοποιώντας υπηρεσίες όπως AWS CloudWatch ή Datadog.
plugins:
- serverless-plugin-datadog
  • Ενεργοποιήστε Λεπτομερή Καταγραφή: Συλλέξτε βασικές πληροφορίες χωρίς να εκθέτετε ευαίσθητα δεδομένα.
  • Ρυθμίστε Ειδοποιήσεις: Διαμορφώστε ειδοποιήσεις για ύποπτες δραστηριότητες ή ανωμαλίες.
  • Τακτική Παρακολούθηση: Παρακολουθείτε συνεχώς τα αρχεία καταγραφής και τις μετρήσεις για πιθανά περιστατικά ασφαλείας.

Ανασφαλείς Ρυθμίσεις API Gateway

Ανοιχτές ή ακατάλληλα ασφαλισμένες APIs μπορούν να εκμεταλλευτούν για μη εξουσιοδοτημένη πρόσβαση, επιθέσεις Denial of Service (DoS) ή επιθέσεις cross-site.

Στρατηγικές Μείωσης

  • Αυθεντικοποίηση και Εξουσιοδότηση: Εφαρμόστε ισχυρούς μηχανισμούς όπως OAuth, API keys ή JWT.
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
authorizer: aws_iam
  • Περιορισμός Ρυθμού και Θρόισμα: Αποτρέψτε την κακή χρήση περιορίζοντας τους ρυθμούς αιτημάτων.
provider:
apiGateway:
throttle:
burstLimit: 200
rateLimit: 100
  • Ασφαλής Ρύθμιση CORS: Περιορίστε τις επιτρεπόμενες προελεύσεις, μεθόδους και κεφαλίδες.
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
cors:
origin: https://yourdomain.com
headers:
- Content-Type
  • Χρησιμοποιήστε Web Application Firewalls (WAF): Φιλτράρετε και παρακολουθήστε τα HTTP αιτήματα για κακόβουλα μοτίβα.

Ανεπαρκής Απομόνωση Λειτουργιών

Κοινά πόροι και ανεπαρκής απομόνωση μπορούν να οδηγήσουν σε κλιμάκωση προνομίων ή μη επιθυμητές αλληλεπιδράσεις μεταξύ λειτουργιών.

Στρατηγικές Μείωσης

  • Απομονώστε Λειτουργίες: Αναθέστε διακριτούς πόρους και IAM ρόλους για να διασφαλίσετε ανεξάρτητη λειτουργία.
  • Κατανομή Πόρων: Χρησιμοποιήστε ξεχωριστές βάσεις δεδομένων ή αποθηκευτικούς κάδους για διαφορετικές λειτουργίες.
  • Χρησιμοποιήστε VPCs: Αναπτύξτε λειτουργίες εντός Εικονικών Ιδιωτικών Νεφών για ενισχυμένη απομόνωση δικτύου.
provider:
vpc:
securityGroupIds:
- sg-xxxxxxxx
subnetIds:
- subnet-xxxxxx
  • Περιορίστε τις Άδειες Λειτουργιών: Διασφαλίστε ότι οι λειτουργίες δεν μπορούν να έχουν πρόσβαση ή να παρεμβαίνουν στους πόρους άλλων λειτουργιών εκτός αν απαιτείται ρητά.

Ανεπαρκής Προστασία Δεδομένων

Τα μη κρυπτογραφημένα δεδομένα σε κατάσταση ηρεμίας ή σε μετάδοση μπορεί να εκτεθούν, οδηγώντας σε παραβιάσεις δεδομένων ή αλλοιώσεις.

Στρατηγικές Μείωσης

  • Κρυπτογραφήστε Δεδομένα σε Κατάσταση Ηρεμίας: Χρησιμοποιήστε τις δυνατότητες κρυπτογράφησης υπηρεσιών νέφους.
resources:
Resources:
MyDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
SSESpecification:
SSEEnabled: true
  • Κρυπτογραφήστε Δεδομένα σε Μετάδοση: Χρησιμοποιήστε HTTPS/TLS για όλες τις μεταδόσεις δεδομένων.
  • Ασφαλής Επικοινωνία API: Επιβάλετε πρωτόκολλα κρυπτογράφησης και επικυρώστε τα πιστοποιητικά.
  • Διαχειριστείτε Ασφαλώς τα Κλειδιά Κρυπτογράφησης: Χρησιμοποιήστε διαχειριζόμενες υπηρεσίες κλειδιών και περιστρέψτε τα κλειδιά τακτικά.

Έλλειψη Κατάλληλης Διαχείρισης Σφαλμάτων

Λεπτομερή μηνύματα σφαλμάτων μπορεί να διαρρεύσουν ευαίσθητες πληροφορίες σχετικά με την υποδομή ή τη βάση κώδικα, ενώ οι μη διαχειριζόμενες εξαιρέσεις μπορεί να οδηγήσουν σε καταρρεύσεις εφαρμογών.

Στρατηγικές Μείωσης

  • Γενικά Μηνύματα Σφαλμάτων: Αποφύγετε την έκθεση εσωτερικών λεπτομερειών στις απαντήσεις σφαλμάτων.
javascriptCopy code// Παράδειγμα σε Node.js
exports.hello = async (event) => {
try {
// Λογική λειτουργίας
} catch (error) {
console.error(error);
return {
statusCode: 500,
body: JSON.stringify({ message: 'Internal Server Error' }),
};
}
};
  • Κεντρική Διαχείριση Σφαλμάτων: Διαχειριστείτε και απολυμάνετε τα σφάλματα με συνέπεια σε όλες τις λειτουργίες.
  • Παρακολουθήστε και Καταγράψτε Σφάλματα: Παρακολουθήστε και αναλύστε τα σφάλματα εσωτερικά χωρίς να εκθέτετε λεπτομέρειες στους τελικούς χρήστες.

Ανασφαλείς Πρακτικές Ανάπτυξης

Εκτεθειμένες ρυθμίσεις ανάπτυξης ή μη εξουσιοδοτημένη πρόσβαση σε CI/CD pipelines μπορεί να οδηγήσουν σε κακόβουλες αναπτύξεις κώδικα ή κακοδιαχείριση ρυθμίσεων.

Στρατηγικές Μείωσης

  • Ασφαλείς CI/CD Pipelines: Εφαρμόστε αυστηρούς ελέγχους πρόσβασης, πολυπαραγοντική αυθεντικοποίηση (MFA) και τακτικούς ελέγχους.
  • Αποθηκεύστε τις Ρυθμίσεις Ασφαλώς: Διατηρήστε τα αρχεία ανάπτυξης ελεύθερα από σκληρές κωδικοποιήσεις μυστικών και ευαίσθητων δεδομένων.
  • Χρησιμοποιήστε Εργαλεία Ασφαλείας Infrastructure as Code (IaC): Χρησιμοποιήστε εργαλεία όπως Checkov ή Terraform Sentinel για να επιβάλετε πολιτικές ασφαλείας.
  • Αμετάβλητες Αναπτύξεις: Αποτρέψτε τις μη εξουσιοδοτημένες αλλαγές μετά την ανάπτυξη υιοθετώντας πρακτικές αμετάβλητης υποδομής.

Ευπάθειες σε Πρόσθετα και Επεκτάσεις

Η χρήση μη ελεγμένων ή κακόβουλων τρίτων πρόσθετων μπορεί να εισάγει ευπάθειες στις serverless εφαρμογές σας.

Στρατηγικές Μείωσης

  • Ελέγξτε τα Πρόσθετα Λεπτομερώς: Αξιολογήστε την ασφάλεια των πρόσθετων πριν από την ενσωμάτωσή τους, προτιμώντας αυτά από αξιόπιστες πηγές.
  • Περιορίστε τη Χρήση Πρόσθετων: Χρησιμοποιήστε μόνο τα απαραίτητα πρόσθετα για να ελαχιστοποιήσετε την επιφάνεια επίθεσης.
  • Παρακολουθήστε τις Ενημερώσεις Πρόσθετων: Διατηρήστε τα πρόσθετα ενημερωμένα για να επωφεληθείτε από τις διορθώσεις ασφαλείας.
  • Απομονώστε τα Περιβάλλοντα Πρόσθετων: Εκτελέστε τα πρόσθετα σε απομονωμένα περιβάλλοντα για να περιορίσετε πιθανές παραβιάσεις.

Έκθεση Ευαίσθητων Τερματικών Σημείων

Δημόσια προσβάσιμες λειτουργίες ή μη περιορισμένες APIs μπορούν να εκμεταλλευτούν για μη εξουσιοδοτημένες λειτουργίες.

Στρατηγικές Μείωσης

  • Περιορίστε την Πρόσβαση σε Λειτουργίες: Χρησιμοποιήστε VPCs, ομάδες ασφαλείας και κανόνες τείχους προστασίας για να περιορίσετε την πρόσβαση σε αξιόπιστες πηγές.
  • Εφαρμόστε Ισχυρή Αυθεντικοποίηση: Διασφαλίστε ότι όλα τα εκτεθειμένα τερματικά σημεία απαιτούν κατάλληλη αυθεντικοποίηση και εξουσιοδότηση.
  • Χρησιμοποιήστε API Gateways Ασφαλώς: Διαμορφώστε τα API Gateways για να επιβάλετε πολιτικές ασφαλείας, συμπεριλαμβανομένης της επικύρωσης εισόδου και του περιορισμού ρυθμού.
  • Απενεργοποιήστε Μη Χρησιμοποιούμενα Τερματικά Σημεία: Ελέγξτε τακτικά και απενεργοποιήστε οποιαδήποτε τερματικά σημεία δεν χρησιμοποιούνται πλέον.

Υπερβολικές Άδειες για Μέλη Ομάδας και Εξωτερικούς Συνεργάτες

Η χορήγηση υπερβολικών αδειών σε μέλη της ομάδας και εξωτερικούς συνεργάτες μπορεί να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση, παραβιάσεις δεδομένων και κακή χρήση πόρων. Αυτός ο κίνδυνος εντείνεται σε περιβάλλοντα όπου πολλοί άνθρωποι έχουν διαφορετικά επίπεδα πρόσβασης, αυξάνοντας την επιφάνεια επίθεσης και την πιθανότητα εσωτερικών απειλών.

Στρατηγικές Μείωσης

  • Αρχή της Ελάχιστης Άδειας: Διασφαλίστε ότι τα μέλη της ομάδας και οι συνεργάτες έχουν μόνο τις άδειες που είναι απαραίτητες για να εκτελούν τα καθήκοντά τους.

Ασφάλεια Κλειδιών Πρόσβασης και Κλειδιών Άδειας

Κλειδιά Πρόσβασης και Κλειδιά Άδειας είναι κρίσι credentials που χρησιμοποιούνται για την αυθεντικοποίηση και την εξουσιοδότηση αλληλεπιδράσεων με το Serverless Framework CLI.

  • Κλειδιά Άδειας: Είναι μοναδικοί αναγνωριστικοί αριθμοί που απαιτούνται για την αυθεντικοποίηση πρόσβασης στο Serverless Framework Έκδοση 4 που επιτρέπει την είσοδο μέσω CLI.
  • Κλειδιά Πρόσβασης: Διαπιστευτήρια που επιτρέπουν στο Serverless Framework CLI να αυθεντικοποιείται με τον Πίνακα Ελέγχου του Serverless Framework. Όταν συνδεθείτε με το serverless cli, ένα κλειδί πρόσβασης θα δημιουργηθεί και θα αποθηκευτεί στον υπολογιστή. Μπορείτε επίσης να το ορίσετε ως μεταβλητή περιβάλλοντος με το όνομα SERVERLESS_ACCESS_KEY.

Κίνδυνοι Ασφαλείας

  1. Έκθεση μέσω Αποθετηρίων Κώδικα:
  • Η σκληρή κωδικοποίηση ή η τυχαία δέσμευση Κλειδιών Πρόσβασης και Κλειδιών Άδειας σε συστήματα ελέγχου εκδόσεων μπορεί να οδηγήσει σε μη εξουσιοδοτημένη πρόσβαση.
  1. Ανασφαλής Αποθήκευση:
  • Η αποθήκευση κλειδιών σε καθαρό κείμενο μέσα σε μεταβλητές περιβάλλοντος ή αρχεία ρυθμίσεων χωρίς κατάλληλη κρυπτογράφηση αυξάνει την πιθανότητα διαρροής.
  1. Ακατάλληλη Διανομή:
  • Η κοινή χρήση κλειδιών μέσω ανασφαλών καναλιών (π.χ. email, chat) μπορεί να οδηγήσει σε παρεμβολές από κακόβουλους παράγοντες.
  1. Έλλειψη Περιστροφής:
  • Η μη τακτική περιστροφή κλειδιών παρατείνει την περίοδο έκθεσης εάν τα κλειδιά παραβιαστούν.
  1. Υπερβολικές Άδειες:
  • Κλειδιά με ευρείες άδειες μπορούν να εκμεταλλευτούν για να εκτελούν μη εξουσιοδοτημένες ενέργειες σε πολλαπλούς πόρους.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks