26 KiB
Serverless.com Güvenliği
{{#include ../banners/hacktricks-training.md}}
Temel Bilgiler
Organizasyon
Bir Organizasyon, Serverless Framework ekosistemindeki en yüksek düzeydeki varlıktır. Birden fazla projeyi, takımı ve uygulamayı kapsayan bir kolektif grup olarak bir şirketi, departmanı veya herhangi bir büyük varlığı temsil eder.
Takım
Takım, organizasyon içinde erişimi olan kullanıcılardır. Takımlar, üyeleri rollere göre organize etmeye yardımcı olur. İşbirlikçileri, mevcut uygulamaları görüntüleyip dağıtabilirken, Yöneticiler yeni uygulamalar oluşturabilir ve organizasyon ayarlarını yönetebilir.
Uygulama
Bir Uygulama, bir Organizasyon içindeki ilgili hizmetlerin mantıksal bir gruplamasıdır. Birlikte çalışarak uyumlu bir işlevsellik sağlamak için bir araya gelen birden fazla sunucusuz hizmetten oluşan tam bir uygulamayı temsil eder.
Hizmetler
Bir Hizmet, bir Sunucusuz uygulamanın temel bileşenidir. Tüm sunucusuz projenizi temsil eder, gerekli tüm işlevleri, yapılandırmaları ve kaynakları kapsar. Genellikle bir serverless.yml dosyasında tanımlanır; bir hizmet, hizmet adı, sağlayıcı yapılandırmaları, işlevler, olaylar, kaynaklar, eklentiler ve özel değişkenler gibi meta verileri içerir.
service: my-service
provider:
name: aws
runtime: nodejs14.x
functions:
hello:
handler: handler.hello
Fonksiyon
Bir Fonksiyon, bir AWS Lambda fonksiyonu gibi tek bir sunucusuz fonksiyonu temsil eder. Olaylara yanıt olarak yürütülen kodu içerir.
serverless.yml dosyasındaki functions bölümünde tanımlanır ve işleyici, çalışma zamanı, olaylar, ortam değişkenleri ve diğer ayarları belirtir.
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
Olay
Olaylar, sunucusuz fonksiyonlarınızı tetikleyen tetikleyicilerdir. Bir fonksiyonun nasıl ve ne zaman çalıştırılacağını tanımlarlar.
Yaygın olay türleri arasında HTTP istekleri, planlı olaylar (cron işleri), veritabanı olayları, dosya yüklemeleri ve daha fazlası bulunur.
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
- schedule:
rate: rate(10 minutes)
Kaynak
Kaynaklar, hizmetinizin bağımlı olduğu ek bulut kaynaklarını tanımlamanıza olanak tanır; örneğin veritabanları, depolama alanları veya IAM rolleri.
resources bölümünde belirtilir ve genellikle AWS için CloudFormation sözdizimi kullanılır.
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
Sağlayıcı
Sağlayıcı nesnesi, bulut hizmet sağlayıcısını (örneğin, AWS, Azure, Google Cloud) belirtir ve o sağlayıcıya ilişkin yapılandırma ayarlarını içerir.
Çalışma zamanı, bölge, aşama ve kimlik bilgileri gibi ayrıntıları içerir.
yamlCopy codeprovider:
name: aws
runtime: nodejs14.x
region: us-east-1
stage: dev
Aşama ve Bölge
Aşama, hizmetinizin dağıtılabileceği farklı ortamları (örneğin, geliştirme, test, üretim) temsil eder. Ortama özgü yapılandırmalar ve dağıtımlar için olanak tanır.
provider:
stage: dev
Bölge, kaynaklarınızın dağıtılacağı coğrafi bölgeyi belirtir. Gecikme, uyumluluk ve kullanılabilirlik açısından önemlidir.
provider:
region: us-west-2
Eklentiler
Eklentiler, Serverless Framework'ün işlevselliğini yeni özellikler ekleyerek veya diğer araçlar ve hizmetlerle entegre olarak genişletir. plugins bölümünde tanımlanır ve npm aracılığıyla yüklenir.
plugins:
- serverless-offline
- serverless-webpack
Katmanlar
Katmanlar, paylaşılan kodu veya bağımlılıkları işlevlerinizden ayrı olarak paketlemenizi ve yönetmenizi sağlar. Bu, yeniden kullanılabilirliği teşvik eder ve dağıtım paketlerinin boyutunu azaltır. Katmanlar, layers bölümünde tanımlanır ve işlevler tarafından referans gösterilir.
layers:
commonLibs:
path: layer-common
functions:
hello:
handler: handler.hello
layers:
- { Ref: CommonLibsLambdaLayer }
Değişkenler ve Özel Değişkenler
Değişkenler, yer tutucuların kullanımıyla dinamik yapılandırmayı mümkün kılar; bu yer tutucular dağıtım zamanında çözülür.
- Sözdizimi:
${variable}sözdizimi, ortam değişkenlerine, dosya içeriklerine veya diğer yapılandırma parametrelerine referans verebilir.
functions:
hello:
handler: handler.hello
environment:
TABLE_NAME: ${self:custom.tableName}
- Özel Değişkenler:
custombölümü,serverless.ymldosyası boyunca yeniden kullanılabilecek kullanıcıya özgü değişkenler ve yapılandırmalar tanımlamak için kullanılır.
custom:
tableName: my-dynamodb-table
stage: ${opt:stage, 'dev'}
Çıktılar
Çıktılar, bir hizmet dağıtıldıktan sonra döndürülen değerleri tanımlar; bu değerler kaynak ARN'leri, uç noktalar veya diğer yararlı bilgileri içerebilir. outputs bölümünde belirtilir ve genellikle diğer hizmetlere bilgi sağlamak veya dağıtım sonrası kolay erişim için kullanılır.
¡outputs:
ApiEndpoint:
Description: "API Gateway endpoint URL"
Value:
Fn::Join:
- ""
- - "https://"
- Ref: ApiGatewayRestApi
- ".execute-api."
- Ref: AWS::Region
- ".amazonaws.com/"
- Ref: AWS::Stage
IAM Rolleri ve İzinler
IAM Rolleri ve İzinler, fonksiyonlarınız ve diğer kaynaklarınız için güvenlik kimlik bilgilerini ve erişim haklarını tanımlar. Gerekli izinleri belirtmek için provider veya bireysel fonksiyon ayarları altında yönetilir.
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}
Ortam Değişkenleri
Değişkenler, yapılandırma ayarlarını ve gizli bilgileri işlevlerinize sabit kodlama yapmadan geçirmenizi sağlar. Bunlar, sağlayıcı veya bireysel işlevler için environment bölümünde tanımlanır.
provider:
environment:
STAGE: ${self:provider.stage}
functions:
hello:
handler: handler.hello
environment:
TABLE_NAME: ${self:custom.tableName}
Bağımlılıklar
Bağımlılıklar, fonksiyonlarınızın ihtiyaç duyduğu dış kütüphaneleri ve modülleri yönetir. Genellikle npm veya pip gibi paket yöneticileri aracılığıyla yönetilir ve serverless-webpack gibi araçlar veya eklentiler kullanılarak dağıtım paketinizle birleştirilir.
plugins:
- serverless-webpack
Hooks
Hooks özel betikleri veya komutları dağıtım yaşam döngüsündeki belirli noktalarda çalıştırmanıza olanak tanır. Dağıtımlardan önce veya sonra eylemler gerçekleştirmek için serverless.yml içinde veya eklentiler kullanılarak tanımlanırlar.
custom:
hooks:
before:deploy:deploy: echo "Starting deployment..."
Eğitim
Bu, resmi eğitimin bir özetidir belgelerden:
- Bir AWS hesabı oluşturun (Serverless.com AWS altyapısında başlar)
- serverless.com'da bir hesap oluşturun
- Bir uygulama oluşturun:
# 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)
Bu, kontrol edebileceğiniz tutorialapp adında bir uygulama oluşturmuş olmalı serverless.com ve içinde helloworld kodu bulunan bazı JS kodları içeren handler.js dosyasına sahip Tutorial adında bir klasör oluşturmuş olmalı ve bu fonksiyonu beyan eden serverless.yml dosyası:
{{#tabs }} {{#tab name="handler.js" }}
exports.hello = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({
message: "Go Serverless v4! Your function executed successfully!",
}),
}
}
{{#endtab }} {{#tab name="serverless.yml" }}
# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: testing12342
# "app" enables Serverless Framework Dashboard features and sharing them with other Services.
app: tutorialapp
# "service" is the name of this project. This will also be added to your AWS resource names.
service: Tutorial
provider:
name: aws
runtime: nodejs20.x
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /
method: get
{{#endtab }} {{#endtabs }}
- Bir AWS sağlayıcısı oluşturun,
https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=awsadresindeki dashboard'a giderek. serverless.com'a AWS erişimi vermek için, bu yapılandırma dosyasını kullanarak bir cloudformation yığını çalıştırmanızı isteyecektir (bu yazının yazıldığı sırada): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml- Bu şablon,
SFRole-<ID>adında bir rol oluşturur vearn:aws:iam::aws:policy/AdministratorAccessile birlikte,Serverless.comAWS hesabının bu role erişmesine izin veren bir Güven İlişkisi ile birlikte hesap üzerinde.
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 ```Güven İlişkisi
```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" } } } ] } ```- Eğitim, temel olarak yeni bir API uç noktası oluşturacak olan
createCustomer.jsdosyasını oluşturmanızı ve oluşturulan lambdaları kullanacak rolü tanımlamak için yeni bir DynamoDB tablosu oluşturacak şekildeserverless.ymldosyasını değiştirmenizi istiyor.
{{#tabs }} {{#tab name="createCustomer.js" }}
"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,
}
}
{{#endtab }}
{{#tab name="serverless.yml" }}
# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: testing12342
# "app" enables Serverless Framework Dashboard features and sharing them with other Services.
app: tutorialapp
# "service" is the name of this project. This will also be added to your AWS resource names.
service: Tutorial
provider:
name: aws
runtime: nodejs20.x
environment:
DYNAMODB_CUSTOMER_TABLE: ${self:service}-customerTable-${sls:stage}
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}
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /
method: get
createCustomer:
handler: createCustomer.createCustomer
events:
- httpApi:
path: /
method: post
resources:
Resources:
CustomerTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: primary_key
AttributeType: S
BillingMode: PAY_PER_REQUEST
KeySchema:
- AttributeName: primary_key
KeyType: HASH
TableName: ${self:service}-customerTable-${sls:stage}
{{#endtab }} {{#endtabs }}
serverless deploykomutunu çalıştırarak dağıtımı gerçekleştirin- Dağıtım, bir CloudFormation Stack aracılığıyla gerçekleştirilecektir
- lambdaların API gateway aracılığıyla ve doğrudan URL'ler aracılığıyla değil, açığa çıktığını unutmayın
- Test edin
- Önceki adım, API uç noktalarınızın lambda fonksiyonlarının dağıtıldığı URL'leri yazdıracaktır
Serverless.com Güvenlik İncelemesi
Yanlış Yapılandırılmış IAM Rolleri ve İzinleri
Aşırı izinli IAM rolleri, bulut kaynaklarına yetkisiz erişim sağlayabilir ve bu da veri ihlallerine veya kaynak manipülasyonuna yol açabilir.
Bir Lambda fonksiyonu için izinler belirtilmediğinde, yalnızca günlük oluşturma izinlerine sahip bir rol oluşturulacaktır, örneğin:
Minimum lambda izinleri
```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" } ] } ```Azaltma Stratejileri
- En Az Ayrıcalık İlkesi: Her işlev için yalnızca gerekli izinleri atayın.
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}
- Ayrı Roller Kullanın: Roller, işlev gereksinimlerine göre farklılaştırılmalıdır.
Güvensiz Gizli Bilgiler ve Konfigürasyon Yönetimi
Hassas bilgilerin (örneğin, API anahtarları, veritabanı kimlik bilgileri) doğrudan serverless.yml veya kodda saklanması, depoların tehlikeye girmesi durumunda ifşaya yol açabilir.
serverless.yml dosyasında ortam değişkenlerini saklamanın önerilen yolu, serverless.com'dan (bu yazının yazıldığı sırada) ssm veya s3 sağlayıcılarını kullanmaktır; bu, dağıtım zamanı bu kaynaklardan ortam değerlerini almayı ve lambdaların ortam değişkenlerini değerlerin metin olarak temiz bir şekilde yapılandırmayı sağlar!
Caution
Bu nedenle, AWS içindeki lambdaların konfigürasyonunu okuma iznine sahip olan herkes, tüm bu ortam değişkenlerine temiz metin olarak erişebilecektir!
Örneğin, aşağıdaki örnek bir ortam değişkeni almak için SSM kullanacaktır:
provider:
environment:
DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}
Ve bu, serverless.yml dosyasında ortam değişkeni değerinin sabitlenmesini önlese de, değer dağıtım zamanında elde edilecek ve lambda ortam değişkeni içinde düz metin olarak eklenecektir.
Tip
serveless.com kullanarak ortam değişkenlerini saklamanın önerilen yolu, AWS gizli anahtarında saklamak ve sadece gizli anahtar adını ortam değişkeninde saklamaktır ve lambda kodu bunu toplamalıdır.
Azaltma Stratejileri
- Gizli Anahtar Yöneticisi Entegrasyonu: AWS Secrets Manager gibi hizmetleri kullanın.
- Şifreli Değişkenler: Hassas veriler için Serverless Framework’ün şifreleme özelliklerinden yararlanın.
- Erişim Kontrolleri: Rollere dayalı olarak gizli anahtarlara erişimi kısıtlayın.
Zayıf Kod ve Bağımlılıklar
Eski veya güvensiz bağımlılıklar zayıflıklara yol açabilirken, yanlış giriş işleme kod enjeksiyonu saldırılarına neden olabilir.
Azaltma Stratejileri
- Bağımlılık Yönetimi: Bağımlılıkları düzenli olarak güncelleyin ve zayıflıkları tarayın.
plugins:
- serverless-webpack
- serverless-plugin-snyk
- Giriş Doğrulama: Tüm girişlerin katı bir şekilde doğrulanmasını ve temizlenmesini uygulayın.
- Kod İncelemeleri: Güvenlik açıklarını belirlemek için kapsamlı incelemeler yapın.
- Statik Analiz: Kod tabanındaki zayıflıkları tespit etmek için araçlar kullanın.
Yetersiz Günlükleme ve İzleme
Uygun günlükleme ve izleme olmadan, kötü niyetli faaliyetler tespit edilemeyebilir ve olay yanıtını geciktirebilir.
Azaltma Stratejileri
- Merkezi Günlükleme: AWS CloudWatch veya Datadog gibi hizmetleri kullanarak günlükleri toplayın.
plugins:
- serverless-plugin-datadog
- Ayrıntılı Günlüklemeyi Etkinleştirin: Hassas verileri açığa çıkarmadan temel bilgileri yakalayın.
- Uyarılar Kurun: Şüpheli faaliyetler veya anormallikler için uyarılar yapılandırın.
- Düzenli İzleme: Potansiyel güvenlik olayları için günlükleri ve metrikleri sürekli izleyin.
Güvensiz API Gateway Yapılandırmaları
Açık veya yanlış güvence altına alınmış API'ler, yetkisiz erişim, Hizmet Reddi (DoS) saldırıları veya çapraz site saldırıları için istismar edilebilir.
Azaltma Stratejileri
- Kimlik Doğrulama ve Yetkilendirme: OAuth, API anahtarları veya JWT gibi sağlam mekanizmaları uygulayın.
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
authorizer: aws_iam
- Hız Sınırlama ve Kısıtlama: İstismarı önlemek için istek oranlarını sınırlayın.
provider:
apiGateway:
throttle:
burstLimit: 200
rateLimit: 100
- Güvenli CORS Yapılandırması: İzin verilen kökenleri, yöntemleri ve başlıkları kısıtlayın.
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
cors:
origin: https://yourdomain.com
headers:
- Content-Type
- Web Uygulama Güvenlik Duvarları (WAF) Kullanın: Kötü niyetli kalıplar için HTTP isteklerini filtreleyin ve izleyin.
Yetersiz Fonksiyon İzolasyonu
Paylaşılan kaynaklar ve yetersiz izolasyon, ayrıcalık yükselmelerine veya fonksiyonlar arasında istenmeyen etkileşimlere yol açabilir.
Azaltma Stratejileri
- Fonksiyonları İzole Edin: Bağımsız çalışmayı sağlamak için belirgin kaynaklar ve IAM rolleri atayın.
- Kaynak Bölümlendirme: Farklı fonksiyonlar için ayrı veritabanları veya depolama alanları kullanın.
- VPC'leri Kullanın: Geliştirilmiş ağ izolasyonu için fonksiyonları Sanal Özel Bulutlar içinde dağıtın.
provider:
vpc:
securityGroupIds:
- sg-xxxxxxxx
subnetIds:
- subnet-xxxxxx
- Fonksiyon İzinlerini Sınırlayın: Fonksiyonların, açıkça gerekli olmadıkça birbirlerinin kaynaklarına erişemediğinden emin olun.
Yetersiz Veri Koruma
Dinlenme veya iletim sırasında şifrelenmemiş veriler açığa çıkabilir ve veri ihlallerine veya değiştirilmelere yol açabilir.
Azaltma Stratejileri
- Verileri Dinlenme Halinde Şifreleyin: Bulut hizmeti şifreleme özelliklerini kullanın.
resources:
Resources:
MyDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
SSESpecification:
SSEEnabled: true
- Verileri İletim Halinde Şifreleyin: Tüm veri iletimleri için HTTPS/TLS kullanın.
- API İletişimini Güvence Altına Alın: Şifreleme protokollerini zorlayın ve sertifikaları doğrulayın.
- Şifreleme Anahtarlarını Güvenli Bir Şekilde Yönetin: Yönetilen anahtar hizmetlerini kullanın ve anahtarları düzenli olarak döndürün.
Uygun Hata Yönetiminin Olmaması
Ayrıntılı hata mesajları, altyapı veya kod tabanı hakkında hassas bilgileri açığa çıkarabilirken, ele alınmamış istisnalar uygulama çökmesine yol açabilir.
Azaltma Stratejileri
- Genel Hata Mesajları: Hata yanıtlarında iç detayları açığa çıkarmaktan kaçının.
javascriptCopy code// Node.js'de örnek
exports.hello = async (event) => {
try {
// Fonksiyon mantığı
} catch (error) {
console.error(error);
return {
statusCode: 500,
body: JSON.stringify({ message: 'Dahili Sunucu Hatası' }),
};
}
};
- Merkezi Hata Yönetimi: Tüm fonksiyonlar arasında hataları tutarlı bir şekilde yönetin ve temizleyin.
- Hataları İzleyin ve Günlüğe Geçirin: Hataları içsel olarak izleyin ve analiz edin, son kullanıcılara detayları açığa çıkarmadan.
Güvensiz Dağıtım Uygulamaları
Açık dağıtım yapılandırmaları veya CI/CD boru hatlarına yetkisiz erişim, kötü niyetli kod dağıtımlarına veya yanlış yapılandırmalara yol açabilir.
Azaltma Stratejileri
- Güvenli CI/CD Boru Hatları: Katı erişim kontrolleri, çok faktörlü kimlik doğrulama (MFA) ve düzenli denetimler uygulayın.
- Yapılandırmayı Güvenli Bir Şekilde Saklayın: Dağıtım dosyalarını sabitlenmiş gizli anahtarlardan ve hassas verilerden arındırın.
- Altyapı Kod Olarak (IaC) Güvenlik Araçları Kullanın: Güvenlik politikalarını uygulamak için Checkov veya Terraform Sentinel gibi araçlar kullanın.
- Değişmez Dağıtımlar: Değişmez altyapı uygulamaları benimseyerek dağıtım sonrası yetkisiz değişiklikleri önleyin.
Eklentiler ve Uzantılardaki Zayıflıklar
Onaylanmamış veya kötü niyetli üçüncü taraf eklentilerin kullanılması, sunucusuz uygulamalarınıza zayıflıklar ekleyebilir.
Azaltma Stratejileri
- Eklentileri Kapsamlı Bir Şekilde Değerlendirin: Entegrasyondan önce eklentilerin güvenliğini değerlendirin, güvenilir kaynaklardan gelenleri tercih edin.
- Eklenti Kullanımını Sınırlayın: Saldırı yüzeyini en aza indirmek için yalnızca gerekli eklentileri kullanın.
- Eklenti Güncellemelerini İzleyin: Güvenlik yamalarından yararlanmak için eklentileri güncel tutun.
- Eklenti Ortamlarını İzole Edin: Potansiyel tehlikeleri sınırlamak için eklentileri izole ortamlarda çalıştırın.
Hassas Uç Noktaların Açığa Çıkması
Herkese açık erişime sahip fonksiyonlar veya kısıtlanmamış API'ler, yetkisiz işlemler için istismar edilebilir.
Azaltma Stratejileri
- Fonksiyon Erişimini Kısıtlayın: Güvenilir kaynaklara erişimi sınırlamak için VPC'ler, güvenlik grupları ve güvenlik duvarı kuralları kullanın.
- Sağlam Kimlik Doğrulama Uygulayın: Tüm açık uç noktaların uygun kimlik doğrulama ve yetkilendirme gerektirdiğinden emin olun.
- API Geçitlerini Güvenli Bir Şekilde Kullanın: API Geçitlerini, giriş doğrulaması ve hız sınırlaması dahil olmak üzere güvenlik politikalarını uygulamak için yapılandırın.
- Kullanılmayan Uç Noktaları Devre Dışı Bırakın: Kullanımda olmayan uç noktaları düzenli olarak gözden geçirin ve devre dışı bırakın.
Ekip Üyeleri ve Dış İşbirlikçilerin Aşırı İzinleri
Ekip üyelerine ve dış işbirlikçilere aşırı izinler vermek, yetkisiz erişim, veri ihlalleri ve kaynakların kötüye kullanılmasına yol açabilir. Bu risk, birden fazla bireyin farklı erişim seviyelerine sahip olduğu ortamlarda artar ve saldırı yüzeyini ve iç tehdit potansiyelini artırır.
Azaltma Stratejileri
- En Az Ayrıcalık İlkesi: Ekip üyelerinin ve işbirlikçilerinin yalnızca görevlerini yerine getirmek için gerekli izinlere sahip olduğundan emin olun.
Erişim Anahtarları ve Lisans Anahtarları Güvenliği
Erişim Anahtarları ve Lisans Anahtarları, Serverless Framework CLI ile etkileşimleri kimlik doğrulamak ve yetkilendirmek için kullanılan kritik kimlik bilgileri.
- Lisans Anahtarları: CLI üzerinden giriş yapmayı sağlayan Serverless Framework Sürüm 4'e erişimi kimlik doğrulamak için gereken benzersiz tanımlayıcılardır.
- Erişim Anahtarları: Serverless Framework Dashboard ile kimlik doğrulamak için Serverless Framework CLI'nin kullanabileceği kimlik bilgileridir.
serverlesscli ile giriş yapıldığında bir erişim anahtarı oluşturulacak ve dizüstü bilgisayarda saklanacaktır. AyrıcaSERVERLESS_ACCESS_KEYadında bir ortam değişkeni olarak ayarlayabilirsiniz.
Güvenlik Riskleri
- Kod Depoları Üzerinden Açığa Çıkma:
- Erişim Anahtarlarını ve Lisans Anahtarlarını sürüm kontrol sistemlerine sabit kodlama veya yanlışlıkla taahhüt etmek, yetkisiz erişime yol açabilir.
- Güvensiz Depolama:
- Anahtarları, uygun şifreleme olmadan ortam değişkenleri veya yapılandırma dosyaları içinde düz metin olarak saklamak, sızıntı olasılığını artırır.
- Yanlış Dağıtım:
- Anahtarları güvensiz kanallar (örneğin, e-posta, sohbet) aracılığıyla paylaşmak, kötü niyetli aktörler tarafından ele geçirilmesine neden olabilir.
- Döngü Eksikliği:
- Anahtarları düzenli olarak döndürmemek, anahtarlar tehlikeye girerse maruz kalma süresini uzatır.
- Aşırı İzinler:
- Geniş izinlere sahip anahtarlar, birden fazla kaynakta yetkisiz eylemler gerçekleştirmek için istismar edilebilir.
{{#include ../banners/hacktricks-training.md}}