From 5f92cece74991f6cbe8f215f376ded4d90a43cb8 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 3 Jan 2025 07:09:30 +0000 Subject: [PATCH] Translated ['src/macos-hardening/macos-security-and-privilege-escalation --- .../mac-os-architecture/README.md | 6 +- .../README.md | 60 ++++----- .../macos-kernel-extensions.md | 12 +- .../macos-kernel-vulnerabilities.md | 2 +- .../macos-system-extensions.md | 28 ++--- .../README.md | 58 ++++----- .../arm64-basic-assembly.md | 113 +++++++++-------- .../introduction-to-x64.md | 18 +-- .../objects-in-memory.md | 4 +- .../README.md | 44 +++---- .../macos-bundles.md | 8 +- .../macos-installers-abuse.md | 8 +- .../macos-memory-dumping.md | 6 +- .../macos-sensitive-locations.md | 24 ++-- .../universal-binaries-and-mach-o-format.md | 116 ++++------------- .../macos-proces-abuse/README.md | 52 ++++---- .../macos-.net-applications-injection.md | 2 +- .../macos-chromium-injection.md | 4 +- .../macos-proces-abuse/macos-dirty-nib.md | 8 +- .../macos-electron-applications-injection.md | 18 +-- .../macos-function-hooking.md | 26 ++-- .../README.md | 68 +++++----- .../macos-mig-mach-interface-generator.md | 26 ++-- .../macos-thread-injection-via-task-port.md | 22 ++-- .../macos-xpc/README.md | 18 +-- .../macos-xpc/macos-xpc-authorization.md | 20 +-- .../README.md | 10 +- .../macos-pid-reuse.md | 8 +- ...s-xpc_connection_get_audit_token-attack.md | 34 ++--- .../macos-java-apps-injection.md | 4 +- .../macos-library-injection/README.md | 44 +++---- ...yld-hijacking-and-dyld_insert_libraries.md | 12 +- .../macos-dyld-process.md | 12 +- .../macos-perl-applications-injection.md | 4 +- .../macos-security-protections/README.md | 14 +-- .../macos-amfi-applemobilefileintegrity.md | 30 ++--- .../macos-authorizations-db-and-authd.md | 4 +- .../macos-code-signing.md | 48 +++---- .../macos-dangerous-entitlements.md | 42 +++---- .../macos-fs-tricks/README.md | 34 ++--- .../macos-gatekeeper.md | 35 +++--- .../macos-launch-environment-constraints.md | 14 +-- ...macf-mandatory-access-control-framework.md | 31 ++--- .../macos-sandbox/README.md | 42 +++---- .../macos-default-sandbox-debug.md | 2 +- .../macos-sandbox-debug-and-bypass/README.md | 16 +-- .../macos-office-sandbox-bypasses.md | 34 ++--- .../macos-security-protections/macos-sip.md | 26 ++-- .../macos-tcc/README.md | 46 +++---- .../macos-tcc/macos-tcc-bypasses/README.md | 75 +++++------ .../macos-tcc-bypasses/macos-apple-scripts.md | 4 +- .../macos-tcc/macos-tcc-payloads.md | 12 +- .../android-app-pentesting/README.md | 118 +++++++++--------- .../android-app-pentesting/adb-commands.md | 8 +- .../android-applications-basics.md | 44 +++---- .../android-task-hijacking.md | 14 +-- .../android-app-pentesting/apk-decompilers.md | 8 +- .../avd-android-virtual-device.md | 14 +-- ...bypass-biometric-authentication-android.md | 4 +- .../content-protocol.md | 8 +- .../drozer-tutorial/README.md | 18 +-- .../exploiting-content-providers.md | 18 +-- .../frida-tutorial/README.md | 16 +-- .../frida-tutorial/frida-tutorial-1.md | 4 +- .../frida-tutorial/frida-tutorial-2.md | 6 +- .../frida-tutorial/objection-tutorial.md | 14 +-- .../install-burp-certificate.md | 14 +-- .../make-apk-accept-ca-certificate.md | 4 +- .../manual-deobfuscation.md | 22 ++-- .../reversing-native-libraries.md | 2 +- .../android-app-pentesting/smali-changes.md | 22 ++-- .../spoofing-your-location-in-play-store.md | 4 +- .../android-app-pentesting/tapjacking.md | 10 +- .../android-app-pentesting/webview-attacks.md | 4 +- src/mobile-pentesting/android-checklist.md | 6 +- src/mobile-pentesting/cordova-apps.md | 4 +- .../ios-pentesting/README.md | 96 +++++++------- .../basic-ios-testing-operations.md | 28 ++--- .../burp-configuration-for-ios.md | 2 +- ...-entitlements-from-compiled-application.md | 6 +- .../frida-configuration-in-ios.md | 8 +- .../ios-pentesting/ios-basics.md | 20 +-- ...m-uri-handlers-deeplinks-custom-schemes.md | 8 +- .../ios-hooking-with-objection.md | 8 +- .../ios-serialisation-and-encoding.md | 6 +- .../ios-pentesting/ios-testing-environment.md | 16 +-- .../ios-pentesting/ios-uiactivity-sharing.md | 8 +- .../ios-pentesting/ios-uipasteboard.md | 8 +- .../ios-pentesting/ios-universal-links.md | 14 +-- .../ios-pentesting/ios-webviews.md | 24 ++-- src/mobile-pentesting/xamarin-apps.md | 2 +- .../1080-pentesting-socks.md | 4 +- .../1099-pentesting-java-rmi.md | 22 ++-- .../11211-memcache/README.md | 32 ++--- .../11211-memcache/memcache-commands.md | 12 +- .../113-pentesting-ident.md | 6 +- .../135-pentesting-msrpc.md | 8 +- .../137-138-139-pentesting-netbios.md | 14 +-- .../1414-pentesting-ibmmq.md | 19 +-- ...21-1522-1529-pentesting-oracle-listener.md | 8 +- .../README.md | 2 +- .../15672-pentesting-rabbitmq-management.md | 2 +- .../1723-pentesting-pptp.md | 2 +- .../1883-pentesting-mqtt-mosquitto.md | 6 +- .../2375-pentesting-docker.md | 24 ++-- .../27017-27018-mongodb.md | 6 +- .../3128-pentesting-squid.md | 4 +- .../3260-pentesting-iscsi.md | 10 +- .../3299-pentesting-saprouter.md | 12 +- .../3632-pentesting-distcc.md | 2 +- .../43-pentesting-whois.md | 8 +- ...ntesting-erlang-port-mapper-daemon-epmd.md | 6 +- .../44134-pentesting-tiller-helm.md | 4 +- .../44818-ethernetip.md | 2 +- .../47808-udp-bacnet.md | 8 +- .../4840-pentesting-opc-ua.md | 2 +- .../49-pentesting-tacacs+.md | 6 +- .../5000-pentesting-docker-registry.md | 10 +- ...060-50070-50075-50090-pentesting-hadoop.md | 2 +- .../515-pentesting-line-printer-daemon-lpd.md | 2 +- .../5353-udp-multicast-dns-mdns.md | 6 +- .../554-8554-pentesting-rtsp.md | 4 +- .../5555-android-debug-bridge.md | 8 +- .../5601-pentesting-kibana.md | 2 +- .../5671-5672-pentesting-amqp.md | 10 +- .../584-pentesting-afp.md | 2 +- .../5984-pentesting-couchdb.md | 34 ++--- .../5985-5986-pentesting-omi.md | 4 +- .../5985-5986-pentesting-winrm.md | 8 +- .../623-udp-ipmi.md | 8 +- .../6379-pentesting-redis.md | 36 +++--- .../69-udp-tftp.md | 4 +- .../7-tcp-udp-pentesting-echo.md | 2 +- .../700-pentesting-epp.md | 2 +- ...09-pentesting-apache-jserv-protocol-ajp.md | 2 +- .../8086-pentesting-influxdb.md | 4 +- .../8089-splunkd.md | 14 +-- ...33-18333-38333-18444-pentesting-bitcoin.md | 2 +- .../873-pentesting-rsync.md | 4 +- .../9000-pentesting-fastcgi.md | 2 +- .../9001-pentesting-hsqldb.md | 8 +- src/network-services-pentesting/9100-pjl.md | 2 +- .../9200-pentesting-elasticsearch.md | 14 +-- src/network-services-pentesting/cassandra.md | 8 +- .../ipsec-ike-vpn-pentesting.md | 26 ++-- .../nfs-service-pentesting.md | 18 +-- .../pentesting-264-check-point-firewall-1.md | 2 +- .../pentesting-dns.md | 14 +-- .../pentesting-finger.md | 4 +- .../pentesting-ftp/README.md | 22 ++-- .../ftp-bounce-download-2oftp-file.md | 12 +- .../pentesting-imap.md | 2 +- .../pentesting-irc.md | 8 +- .../pentesting-kerberos-88/README.md | 8 +- .../harvesting-tickets-from-linux.md | 6 +- .../harvesting-tickets-from-windows.md | 2 +- .../pentesting-ldap.md | 22 ++-- .../README.md | 38 +++--- .../pentesting-mysql.md | 10 +- .../pentesting-ntp.md | 18 ++- .../pentesting-pop.md | 2 +- .../pentesting-postgresql.md | 72 +++++------ .../pentesting-rdp.md | 14 +-- .../pentesting-remote-gdbserver.md | 1 + .../pentesting-rlogin.md | 2 +- .../pentesting-rpcbind.md | 6 +- .../pentesting-sap.md | 84 ++++++------- .../pentesting-smb.md | 28 ++--- .../pentesting-smb/README.md | 40 +++--- .../pentesting-smb/rpcclient-enumeration.md | 20 +-- .../pentesting-smtp/README.md | 30 ++--- .../pentesting-smtp/smtp-commands.md | 6 +- .../pentesting-smtp/smtp-smuggling.md | 2 +- .../pentesting-snmp/README.md | 40 +++--- .../pentesting-snmp/cisco-snmp.md | 7 +- .../pentesting-snmp/snmp-rce.md | 2 +- .../pentesting-ssh.md | 46 +++---- .../pentesting-telnet.md | 4 +- .../pentesting-vnc.md | 2 +- .../pentesting-voip/README.md | 65 +++++----- .../basic-voip-protocols/README.md | 42 +++---- .../sip-session-initiation-protocol.md | 54 ++++---- .../pentesting-web/403-and-401-bypasses.md | 11 +- .../pentesting-web/README.md | 58 ++++----- .../pentesting-web/angular.md | 56 ++++----- .../pentesting-web/apache.md | 32 ++--- .../pentesting-web/bolt-cms.md | 2 +- .../pentesting-web/cgi.md | 2 +- .../pentesting-web/code-review-tools.md | 24 ++-- .../pentesting-web/dotnetnuke-dnn.md | 4 +- .../pentesting-web/drupal/README.md | 12 +- .../pentesting-web/drupal/drupal-rce.md | 20 +-- .../electron-desktop-apps/README.md | 32 ++--- .../electron-contextisolation-rce-via-ipc.md | 8 +- ...n-contextisolation-rce-via-preload-code.md | 8 +- .../pentesting-web/flask.md | 10 +- .../pentesting-web/git.md | 4 +- .../pentesting-web/graphql.md | 62 ++++----- .../pentesting-web/h2-java-sql-database.md | 2 +- .../iis-internet-information-services.md | 38 +++--- .../pentesting-web/imagemagick-security.md | 12 +- .../pentesting-web/jira.md | 12 +- .../pentesting-web/joomla.md | 8 +- .../pentesting-web/laravel.md | 6 +- .../pentesting-web/nextjs.md | 58 ++++----- .../pentesting-web/nginx.md | 14 +-- .../pentesting-web/php-tricks-esp/README.md | 52 ++++---- ...object-creation-new-usd_get-a-usd_get-b.md | 10 +- .../pentesting-web/php-tricks-esp/php-ssrf.md | 2 +- .../README.md | 24 ++-- .../disable_functions-bypass-dl-function.md | 30 ++--- ...isable_functions-bypass-php-fpm-fastcgi.md | 12 +- .../pentesting-web/prestashop.md | 4 +- .../pentesting-web/put-method-webdav.md | 4 +- .../pentesting-web/special-http-headers.md | 24 ++-- .../pentesting-web/spring-actuators.md | 12 +- .../pentesting-web/tomcat/README.md | 6 +- .../pentesting-web/uncovering-cloudflare.md | 8 +- .../pentesting-web/vmware-esx-vcenter....md | 2 +- .../pentesting-web/web-api-pentesting.md | 4 +- .../pentesting-web/werkzeug.md | 23 +++- .../pentesting-web/wordpress.md | 22 ++-- src/pentesting-web/2fa-bypass.md | 20 +-- .../abusing-hop-by-hop-headers.md | 4 +- src/pentesting-web/account-takeover.md | 30 ++--- src/pentesting-web/bypass-payment-process.md | 2 +- src/pentesting-web/captcha-bypass.md | 2 +- src/pentesting-web/clickjacking.md | 10 +- .../client-side-path-traversal.md | 2 +- .../client-side-template-injection-csti.md | 7 +- src/pentesting-web/command-injection.md | 4 +- src/pentesting-web/cors-bypass.md | 76 +++++------ src/pentesting-web/crlf-0d-0a.md | 22 ++-- .../csrf-cross-site-request-forgery.md | 22 ++-- src/pentesting-web/dependency-confusion.md | 2 +- .../domain-subdomain-takeover.md | 6 +- src/pentesting-web/email-injections.md | 26 ++-- ...ula-csv-doc-latex-ghostscript-injection.md | 20 +-- src/pentesting-web/h2c-smuggling.md | 12 +- .../http-connection-contamination.md | 8 +- 240 files changed, 2111 insertions(+), 2162 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 e93ac102f..4967a4cc9 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,7 +4,7 @@ ## XNU Kernel -Ο **πυρήνας του macOS είναι ο XNU**, που σημαίνει "X is Not Unix". Αυτός ο πυρήνας αποτελείται θεμελιωδώς από τον **Mach μικροπυρήνα** (θα συζητηθεί αργότερα), **και** στοιχεία από την Berkeley Software Distribution (**BSD**). Ο XNU παρέχει επίσης μια πλατφόρμα για **οδηγούς πυρήνα μέσω ενός συστήματος που ονομάζεται I/O Kit**. Ο πυρήνας XNU είναι μέρος του ανοιχτού κώδικα έργου Darwin, που σημαίνει ότι **ο πηγαίος κώδικας του είναι ελεύθερα προσβάσιμος**. +Ο **πυρήνας του macOS είναι ο XNU**, που σημαίνει "X is Not Unix". Αυτός ο πυρήνας αποτελείται θεμελιωδώς από τον **Mach μικροπυρήνα** (που θα συζητηθεί αργότερα), **και** στοιχεία από την Berkeley Software Distribution (**BSD**). Ο XNU παρέχει επίσης μια πλατφόρμα για **οδηγούς πυρήνα μέσω ενός συστήματος που ονομάζεται I/O Kit**. Ο πυρήνας XNU είναι μέρος του ανοιχτού κώδικα έργου Darwin, που σημαίνει ότι **ο πηγαίος κώδικας του είναι ελεύθερα προσβάσιμος**. Από την προοπτική ενός ερευνητή ασφαλείας ή ενός προγραμματιστή Unix, το **macOS** μπορεί να φαίνεται αρκετά **παρόμοιο** με ένα σύστημα **FreeBSD** με μια κομψή GUI και μια σειρά από προσαρμοσμένες εφαρμογές. Οι περισσότερες εφαρμογές που αναπτύσσονται για BSD θα μεταγλωττιστούν και θα εκτελούνται στο macOS χωρίς να χρειάζονται τροποποιήσεις, καθώς τα εργαλεία γραμμής εντολών που είναι οικεία στους χρήστες Unix είναι όλα παρόντα στο macOS. Ωστόσο, επειδή ο πυρήνας XNU ενσωματώνει τον Mach, υπάρχουν κάποιες σημαντικές διαφορές μεταξύ ενός παραδοσιακού συστήματος παρόμοιου με Unix και του macOS, και αυτές οι διαφορές μπορεί να προκαλέσουν πιθανά προβλήματα ή να προσφέρουν μοναδικά πλεονεκτήματα. @@ -12,7 +12,7 @@ ### Mach -Ο Mach είναι ένας **μικροπυρήνας** σχεδιασμένος να είναι **συμβατός με UNIX**. ΈPrinciple του σχεδιασμού του ήταν να **ελαχιστοποιήσει** την ποσότητα του **κώδικα** που εκτελείται στον **χώρο πυρήνα** και αντίθετα να επιτρέπει πολλές τυπικές λειτουργίες του πυρήνα, όπως το σύστημα αρχείων, το δίκτυο και το I/O, να **εκτελούνται ως εργασίες επιπέδου χρήστη**. +Ο Mach είναι ένας **μικροπυρήνας** σχεδιασμένος να είναι **συμβατός με UNIX**. Ένα από τα βασικά σχεδιαστικά του принципα ήταν να **ελαχιστοποιήσει** την ποσότητα του **κώδικα** που εκτελείται στον **χώρο πυρήνα** και αντίθετα να επιτρέπει πολλές τυπικές λειτουργίες πυρήνα, όπως το σύστημα αρχείων, το δίκτυο και το I/O, να **εκτελούνται ως εργασίες επιπέδου χρήστη**. Στον XNU, ο Mach είναι **υπεύθυνος για πολλές από τις κρίσιμες χαμηλού επιπέδου λειτουργίες** που συνήθως χειρίζεται ένας πυρήνας, όπως ο προγραμματισμός επεξεργαστή, η πολυδιεργασία και η διαχείριση εικονικής μνήμης. @@ -27,7 +27,7 @@ - Στοίβα TCP/IP και υποδοχές - Τείχος προστασίας και φιλτράρισμα πακέτων -Η κατανόηση της αλληλεπίδρασης μεταξύ BSD και Mach μπορεί να είναι περίπλοκη, λόγω των διαφορετικών εννοιολογικών πλαισίων τους. Για παράδειγμα, το BSD χρησιμοποιεί διεργασίες ως τη θεμελιώδη μονάδα εκτέλεσης του, ενώ ο Mach λειτουργεί με βάση τα νήματα. Αυτή η διαφορά συμφιλιώνεται στον XNU με την **συσχέτιση κάθε διεργασίας BSD με μια εργασία Mach** που περιέχει ακριβώς ένα νήμα Mach. Όταν χρησιμοποιείται η κλήση συστήματος fork() του BSD, ο κώδικας BSD μέσα στον πυρήνα χρησιμοποιεί τις λειτουργίες Mach για να δημιουργήσει μια εργασία και μια δομή νήματος. +Η κατανόηση της αλληλεπίδρασης μεταξύ BSD και Mach μπορεί να είναι περίπλοκη, λόγω των διαφορετικών εννοιολογικών πλαισίων τους. Για παράδειγμα, το BSD χρησιμοποιεί διεργασίες ως τη θεμελιώδη μονάδα εκτέλεσης του, ενώ ο Mach λειτουργεί με βάση τα νήματα. Αυτή η διαφορά συμφιλιώνεται στον XNU με το **να συσχετίζεται κάθε διεργασία BSD με μια εργασία Mach** που περιέχει ακριβώς ένα νήμα Mach. Όταν χρησιμοποιείται η κλήση συστήματος fork() του BSD, ο κώδικας BSD μέσα στον πυρήνα χρησιμοποιεί τις λειτουργίες Mach για να δημιουργήσει μια εργασία και μια δομή νήματος. Επιπλέον, **ο Mach και το BSD διατηρούν διαφορετικά μοντέλα ασφαλείας**: το μοντέλο ασφαλείας του **Mach** βασίζεται στα **δικαιώματα θυρών**, ενώ το μοντέλο ασφαλείας του BSD λειτουργεί με βάση την **ιδιοκτησία διεργασίας**. Οι διαφορές μεταξύ αυτών των δύο μοντέλων έχουν κατά καιρούς οδηγήσει σε τοπικές ευπάθειες ανύψωσης προνομίων. Εκτός από τις τυπικές κλήσεις συστήματος, υπάρχουν επίσης **παγίδες Mach που επιτρέπουν στα προγράμματα χώρου χρήστη να αλληλεπιδρούν με τον πυρήνα**. Αυτά τα διαφορετικά στοιχεία μαζί σχηματίζουν την πολύπλευρη, υβριδική αρχιτεκτονική του πυρήνα macOS. 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 962777899..2bdf9317b 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 @@ -6,31 +6,31 @@ ### Basic Information -Mach χρησιμοποιεί **tasks** ως την **μικρότερη μονάδα** για την κοινή χρήση πόρων, και κάθε task μπορεί να περιέχει **πολλές νήματα**. Αυτές οι **tasks και νήματα αντιστοιχίζονται 1:1 σε POSIX processes και threads**. +Mach χρησιμοποιεί **tasks** ως την **μικρότερη μονάδα** για την κοινή χρήση πόρων, και κάθε task μπορεί να περιέχει **πολλές νήματα**. Αυτές οι **tasks και νήματα αντιστοιχούν 1:1 σε POSIX processes και threads**. -Η επικοινωνία μεταξύ των tasks συμβαίνει μέσω της Mach Inter-Process Communication (IPC), χρησιμοποιώντας κανάλια επικοινωνίας ενός μόνο τρόπου. **Μηνύματα μεταφέρονται μεταξύ των ports**, τα οποία λειτουργούν ως **ουρές μηνυμάτων** που διαχειρίζεται ο πυρήνας. +Η επικοινωνία μεταξύ των tasks συμβαίνει μέσω της Mach Inter-Process Communication (IPC), χρησιμοποιώντας κανάλια επικοινωνίας ενός μόνο τρόπου. **Μηνύματα μεταφέρονται μεταξύ θυρών**, οι οποίες λειτουργούν όπως **ουρές μηνυμάτων** που διαχειρίζεται ο πυρήνας. -Κάθε διαδικασία έχει έναν **IPC πίνακα**, όπου είναι δυνατή η εύρεση των **mach ports της διαδικασίας**. Το όνομα ενός mach port είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο του πυρήνα). +Κάθε διαδικασία έχει έναν **πίνακα IPC**, όπου είναι δυνατή η εύρεση των **mach ports της διαδικασίας**. Το όνομα μιας mach port είναι στην πραγματικότητα ένας αριθμός (ένας δείκτης στο αντικείμενο του πυρήνα). -Μια διαδικασία μπορεί επίσης να στείλει ένα όνομα port με ορισμένα δικαιώματα **σε μια διαφορετική task** και ο πυρήνας θα κάνει αυτή την καταχώρηση στον **IPC πίνακα της άλλης task** να εμφανιστεί. +Μια διαδικασία μπορεί επίσης να στείλει ένα όνομα port με ορισμένα δικαιώματα **σε μια διαφορετική task** και ο πυρήνας θα κάνει αυτή την καταχώρηση στον **πίνακα IPC της άλλης task** να εμφανιστεί. ### Port Rights Τα δικαιώματα port, τα οποία καθορίζουν ποιες λειτουργίες μπορεί να εκτελέσει μια task, είναι κλειδί για αυτή την επικοινωνία. Τα πιθανά **δικαιώματα port** είναι ([ορισμοί από εδώ](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στο port. Τα Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε port** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφές αρχείων στο αναγνωριστικό ανάγνωσης ενός σωλήνα). -- Μια **task με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **δική της task έχει Δικαίωμα Λήψης πάνω στο port** της. -- **Δικαίωμα αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στο port. +- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στην port. Οι Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε port** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφείς αρχείων στο τέλος ανάγνωσης ενός σωλήνα). +- Μια **task με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **δική της task έχει Δικαίωμα Λήψης πάνω στην port**. +- **Δικαίωμα αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στην port. - Το Δικαίωμα Αποστολής μπορεί να **αντιγραφεί** έτσι ώστε μια task που κατέχει ένα Δικαίωμα Αποστολής να μπορεί να το αντιγράψει και **να το παραχωρήσει σε μια τρίτη task**. -- **Δικαίωμα αποστολής μία φορά**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στο port και στη συνέχεια εξαφανίζεται. -- **Δικαίωμα συνόλου port**, το οποίο δηλώνει ένα _σύνολο port_ αντί για ένα μόνο port. Η αποδέσμευση ενός μηνύματος από ένα σύνολο port αποδεσμεύει ένα μήνυμα από ένα από τα ports που περιέχει. Τα σύνολα port μπορούν να χρησιμοποιηθούν για να ακούσουν σε αρκετά ports ταυτόχρονα, πολύ όπως το `select`/`poll`/`epoll`/`kqueue` στο Unix. -- **Νεκρό όνομα**, το οποίο δεν είναι πραγματικό δικαίωμα port, αλλά απλώς μια θέση κράτησης. Όταν ένα port καταστρέφεται, όλα τα υπάρχοντα δικαιώματα port στο port μετατρέπονται σε νεκρά ονόματα. +- **Δικαίωμα αποστολής μία φορά**, το οποίο επιτρέπει την αποστολή ενός μηνύματος στην port και στη συνέχεια εξαφανίζεται. +- **Δικαίωμα συνόλου θυρών**, το οποίο δηλώνει ένα _σύνολο θυρών_ αντί για μια μόνο port. Η αποδέσμευση ενός μηνύματος από ένα σύνολο θυρών αποδεσμεύει ένα μήνυμα από μία από τις θυρίδες που περιέχει. Τα σύνολα θυρών μπορούν να χρησιμοποιηθούν για να ακούσουν σε πολλές θυρίδες ταυτόχρονα, πολύ όπως το `select`/`poll`/`epoll`/`kqueue` στο Unix. +- **Νεκρό όνομα**, το οποίο δεν είναι πραγματικό δικαίωμα port, αλλά απλώς μια θέση κράτησης. Όταν μια port καταστρέφεται, όλα τα υπάρχοντα δικαιώματα port στην port μετατρέπονται σε νεκρά ονόματα. **Οι tasks μπορούν να μεταφέρουν ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ σε άλλους**, επιτρέποντάς τους να στέλνουν μηνύματα πίσω. **Τα ΔΙΚΑΙΩΜΑΤΑ ΑΠΟΣΤΟΛΗΣ μπορούν επίσης να αντιγραφούν, έτσι ώστε μια task να μπορεί να διπλασιάσει και να δώσει το δικαίωμα σε μια τρίτη task**. Αυτό, σε συνδυασμό με μια ενδιάμεση διαδικασία γνωστή ως **bootstrap server**, επιτρέπει την αποτελεσματική επικοινωνία μεταξύ των tasks. ### File Ports -Τα file ports επιτρέπουν την ενσωμάτωση περιγραφών αρχείων σε Mac ports (χρησιμοποιώντας δικαιώματα Mach port). Είναι δυνατή η δημιουργία ενός `fileport` από μια δεδομένη FD χρησιμοποιώντας `fileport_makeport` και η δημιουργία μιας FD από ένα fileport χρησιμοποιώντας `fileport_makefd`. +Οι File ports επιτρέπουν την ενσωμάτωση περιγραφέων αρχείων σε Mac ports (χρησιμοποιώντας δικαιώματα Mach port). Είναι δυνατή η δημιουργία ενός `fileport` από έναν δεδομένο FD χρησιμοποιώντας `fileport_makeport` και η δημιουργία ενός FD από μια fileport χρησιμοποιώντας `fileport_makefd`. ### Establishing a communication @@ -38,32 +38,32 @@ Mach χρησιμοποιεί **tasks** ως την **μικρότερη μον Όπως αναφέρθηκε, προκειμένου να καθιερωθεί το κανάλι επικοινωνίας, εμπλέκεται ο **bootstrap server** (**launchd** στο mac). -1. Η task **A** ξεκινά ένα **νέο port**, αποκτώντας ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** στη διαδικασία. -2. Η task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για το port**. -3. Η task **A** καθ establishes a **connection** με τον **bootstrap server**, παρέχοντας το **όνομα υπηρεσίας του port** και το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** μέσω μιας διαδικασίας γνωστής ως bootstrap register. +1. Η task **A** ξεκινά μια **νέα port**, αποκτώντας ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** στη διαδικασία. +2. Η task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για την port**. +3. Η task **A** καθ establishes a **connection** με τον **bootstrap server**, παρέχοντας το **όνομα υπηρεσίας της port** και το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** μέσω μιας διαδικασίας γνωστής ως bootstrap register. 4. Η task **B** αλληλεπιδρά με τον **bootstrap server** για να εκτελέσει μια bootstrap **lookup για το όνομα υπηρεσίας**. Εάν είναι επιτυχής, ο **server αντιγράφει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** που έλαβε από την Task A και **το μεταδίδει στην Task B**. 5. Αφού αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, η Task **B** είναι ικανή να **διαμορφώσει** ένα **μήνυμα** και να το αποστείλει **στην Task A**. -6. Για μια αμφίδρομη επικοινωνία, συνήθως η task **B** δημιουργεί ένα νέο port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). +6. Για μια αμφίδρομη επικοινωνία, συνήθως η task **B** δημιουργεί μια νέα port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). Ο bootstrap server **δεν μπορεί να πιστοποιήσει** το όνομα υπηρεσίας που δηλώνει μια task. Αυτό σημαίνει ότι μια **task** θα μπορούσε δυνητικά να **παριστάνει οποιαδήποτε συστημική task**, όπως ψευδώς **να δηλώνει ένα όνομα υπηρεσίας εξουσιοδότησης** και στη συνέχεια να εγκρίνει κάθε αίτημα. Στη συνέχεια, η Apple αποθηκεύει τα **ονόματα υπηρεσιών που παρέχονται από το σύστημα** σε ασφαλή αρχεία ρυθμίσεων, που βρίσκονται σε **SIP-protected** καταλόγους: `/System/Library/LaunchDaemons` και `/System/Library/LaunchAgents`. Μαζί με κάθε όνομα υπηρεσίας, το **σχετικό δυαδικό αρχείο αποθηκεύεται επίσης**. Ο bootstrap server θα δημιουργήσει και θα διατηρήσει ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ για καθένα από αυτά τα ονόματα υπηρεσίας**. -Για αυτές τις προκαθορισμένες υπηρεσίες, η **διαδικασία αναζήτησης διαφέρει ελαφρώς**. Όταν αναζητείται ένα όνομα υπηρεσίας, το launchd ξεκινά την υπηρεσία δυναμικά. Η νέα ροή εργασίας είναι ως εξής: +Για αυτές τις προκαθορισμένες υπηρεσίες, η **διαδικασία αναζήτησης διαφέρει ελαφρώς**. Όταν ένα όνομα υπηρεσίας αναζητείται, το launchd ξεκινά την υπηρεσία δυναμικά. Η νέα ροή εργασίας είναι ως εξής: - Η task **B** ξεκινά μια bootstrap **lookup** για ένα όνομα υπηρεσίας. -- Ο **launchd** ελέγχει αν η task εκτελείται και αν δεν εκτελείται, **την ξεκινά**. +- **launchd** ελέγχει αν η task εκτελείται και αν δεν εκτελείται, **την ξεκινά**. - Η task **A** (η υπηρεσία) εκτελεί έναν **bootstrap check-in**. Εδώ, ο **bootstrap** server δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, το διατηρεί και **μεταφέρει το ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ στην Task A**. -- Ο launchd αντιγράφει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ και το στέλνει στην Task B**. -- Η Task **B** δημιουργεί ένα νέο port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). +- Το launchd αντιγράφει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ και το στέλνει στην Task B**. +- Η Task **B** δημιουργεί μια νέα port με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). -Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks λειτουργούν ακόμα όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παριστάνουν. +Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks εξακολουθούν να λειτουργούν όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παριστάνουν. ### A Mach Message [Find more info here](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) -Η συνάρτηση `mach_msg`, που είναι ουσιαστικά μια κλήση συστήματος, χρησιμοποιείται για την αποστολή και λήψη Mach μηνυμάτων. Η συνάρτηση απαιτεί το μήνυμα που θα σταλεί ως την αρχική παράμετρο. Αυτό το μήνυμα πρέπει να ξεκινά με μια δομή `mach_msg_header_t`, ακολουθούμενη από το πραγματικό περιεχόμενο του μηνύματος. Η δομή ορίζεται ως εξής: +Η συνάρτηση `mach_msg`, που είναι ουσιαστικά μια κλήση συστήματος, χρησιμοποιείται για την αποστολή και λήψη Mach μηνυμάτων. Η συνάρτηση απαιτεί το μήνυμα που θα σταλεί ως αρχικό επιχείρημα. Αυτό το μήνυμα πρέπει να ξεκινά με μια δομή `mach_msg_header_t`, ακολουθούμενη από το πραγματικό περιεχόμενο του μηνύματος. Η δομή ορίζεται ως εξής: ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -74,9 +74,9 @@ mach_port_name_t msgh_voucher_port; mach_msg_id_t msgh_id; } mach_msg_header_t; ``` -Διεργασίες που κατέχουν ένα _**receive right**_ μπορούν να λαμβάνουν μηνύματα σε μια Mach θύρα. Αντίθετα, οι **αποστολείς** έχουν ένα _**send**_ ή ένα _**send-once right**_. Το send-once right προορίζεται αποκλειστικά για την αποστολή ενός μόνο μηνύματος, μετά το οποίο καθίσταται άκυρο. +Διεργασίες που κατέχουν ένα _**δικαίωμα λήψης**_ μπορούν να λαμβάνουν μηνύματα σε μια Mach θύρα. Αντίθετα, οι **αποστολείς** έχουν ένα _**δικαίωμα αποστολής**_ ή ένα _**δικαίωμα αποστολής-μία φορά**_. Το δικαίωμα αποστολής-μία φορά προορίζεται αποκλειστικά για την αποστολή ενός μόνο μηνύματος, μετά το οποίο καθίσταται άκυρο. -Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διεργασία μπορεί να καθορίσει μια **mach port** στην κεφαλίδα **μηνύματος** που ονομάζεται _reply port_ (**`msgh_local_port`**) όπου ο **δέκτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. Οι bitflags στο **`msgh_bits`** μπορούν να χρησιμοποιηθούν για να **υποδείξουν** ότι ένα **send-once** **right** θα πρέπει να παραχθεί και να μεταφερθεί για αυτή τη θύρα (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). +Για να επιτευχθεί μια εύκολη **διπλής κατεύθυνσης επικοινωνία**, μια διεργασία μπορεί να καθορίσει μια **mach θύρα** στην κεφαλίδα **μηνύματος** που ονομάζεται _θύρα απάντησης_ (**`msgh_local_port`**) όπου ο **δέκτης** του μηνύματος μπορεί να **στείλει μια απάντηση** σε αυτό το μήνυμα. Οι σημαίες bit στο **`msgh_bits`** μπορούν να χρησιμοποιηθούν για να **υποδείξουν** ότι ένα **δικαίωμα αποστολής-μία φορά** θα πρέπει να παραχθεί και να μεταφερθεί για αυτή τη θύρα (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). > [!TIP] > Σημειώστε ότι αυτός ο τύπος διπλής κατεύθυνσης επικοινωνίας χρησιμοποιείται σε μηνύματα XPC που αναμένουν μια απάντηση (`xpc_connection_send_message_with_reply` και `xpc_connection_send_message_with_reply_sync`). Αλλά **συνήθως δημιουργούνται διαφορετικές θύρες** όπως εξηγήθηκε προηγουμένως για να δημιουργηθεί η διπλής κατεύθυνσης επικοινωνία. @@ -89,13 +89,13 @@ mach_msg_id_t msgh_id; - `msgh_id`: το ID αυτού του μηνύματος, το οποίο ερμηνεύεται από τον δέκτη. > [!CAUTION] -> Σημειώστε ότι **τα mach μηνύματα αποστέλλονται μέσω μιας \_mach port**\_, η οποία είναι ένα **μοναδικός δέκτης**, **πολλαπλοί αποστολείς** κανάλι επικοινωνίας που έχει ενσωματωθεί στον πυρήνα mach. **Πολλές διεργασίες** μπορούν να **στείλουν μηνύματα** σε μια mach port, αλλά σε οποιαδήποτε στιγμή μόνο **μία διεργασία μπορεί να διαβάσει** από αυτήν. +> Σημειώστε ότι **τα mach μηνύματα αποστέλλονται μέσω μιας \_mach θύρας**\_, η οποία είναι ένα **κανάλι επικοινωνίας με έναν μόνο δέκτη**, **πολλούς αποστολείς** ενσωματωμένο στον πυρήνα mach. **Πολλές διεργασίες** μπορούν να **στείλουν μηνύματα** σε μια mach θύρα, αλλά σε οποιαδήποτε στιγμή μόνο **μία διεργασία μπορεί να διαβάσει** από αυτήν. ### Καταμέτρηση θυρών ```bash lsmp -p ``` -Μπορείτε να εγκαταστήσετε αυτό το εργαλείο σε iOS κατεβάζοντάς το από [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) +Μπορείτε να εγκαταστήσετε αυτό το εργαλείο στο iOS κατεβάζοντας το από [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) ### Παράδειγμα κώδικα @@ -227,11 +227,11 @@ printf("Sent a message\n"); ### Προνομιακές Θύρες -- **Θύρα φιλοξενίας**: Εάν μια διαδικασία έχει **Δικαιώματα Αποστολής** σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** για το **σύστημα** (π.χ. `host_processor_info`). -- **Θύρα προνομιακής φιλοξενίας**: Μια διαδικασία με **Δικαιώματα Αποστολής** σε αυτή τη θύρα μπορεί να εκτελέσει **προνομιακές ενέργειες** όπως η φόρτωση μιας επέκτασης πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. +- **Θύρα φιλοξενίας**: Εάν μια διαδικασία έχει **Δικαιώματα Αποστολής** σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** σχετικά με το **σύστημα** (π.χ. `host_processor_info`). +- **Θύρα φιλοξενίας με δικαιώματα**: Μια διαδικασία με **Δικαιώματα Αποστολής** σε αυτή τη θύρα μπορεί να εκτελέσει **προνομιακές ενέργειες** όπως η φόρτωση μιας επέκτασης πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. - Επιπλέον, για να καλέσετε το API **`kext_request`** απαιτείται να έχετε άλλες εξουσιοδοτήσεις **`com.apple.private.kext*`** που δίνονται μόνο σε δυαδικά αρχεία της Apple. - **Θύρα ονόματος εργασίας:** Μια μη προνομιακή έκδοση της _θύρας εργασίας_. Αναφέρεται στην εργασία, αλλά δεν επιτρέπει τον έλεγχο της. Το μόνο που φαίνεται να είναι διαθέσιμο μέσω αυτής είναι το `task_info()`. -- **Θύρα εργασίας** (γνωστή και ως θύρα πυρήνα): Με άδεια Αποστολής σε αυτή τη θύρα είναι δυνατός ο έλεγχος της εργασίας (ανάγνωση/γραφή μνήμης, δημιουργία νημάτων...). +- **Θύρα εργασίας** (aka θύρα πυρήνα)**:** Με άδεια Αποστολής σε αυτή τη θύρα είναι δυνατός ο έλεγχος της εργασίας (ανάγνωση/γραφή μνήμης, δημιουργία νημάτων...). - Καλέστε το `mach_task_self()` για να **πάρετε το όνομα** αυτής της θύρας για την καλούσα εργασία. Αυτή η θύρα είναι μόνο **κληρονομούμενη** μέσω του **`exec()`**; μια νέα εργασία που δημιουργείται με `fork()` αποκτά μια νέα θύρα εργασίας (ως ειδική περίπτωση, μια εργασία αποκτά επίσης μια νέα θύρα εργασίας μετά το `exec()` σε ένα δυαδικό αρχείο suid). Ο μόνος τρόπος για να δημιουργήσετε μια εργασία και να αποκτήσετε τη θύρα της είναι να εκτελέσετε τον ["χορό ανταλλαγής θυρών"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) κατά τη διάρκεια ενός `fork()`. - Αυτοί είναι οι περιορισμοί για την πρόσβαση στη θύρα (από το `macos_task_policy` από το δυαδικό αρχείο `AppleMobileFileIntegrity`): - Εάν η εφαρμογή έχει **`com.apple.security.get-task-allow` εξουσιοδότηση**, διαδικασίες από τον **ίδιο χρήστη μπορούν να αποκτήσουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **πιστοποίησης** δεν θα το επιτρέψει σε παραγωγικές εκδόσεις. @@ -502,11 +502,11 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject Στο macOS, **threads** μπορεί να χειριστούν μέσω **Mach** ή χρησιμοποιώντας **posix `pthread` api**. Ο thread που δημιουργήσαμε στην προηγούμενη ένεση, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμβατός με posix**. -Ήταν δυνατό να **εισαχθεί ένα απλό shellcode** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργεί με posix** συμβατά apis, μόνο με Mach. **Πιο σύνθετες ενέσεις** θα χρειάζονταν ο **thread** να είναι επίσης **συμβατός με posix**. +Ήταν δυνατό να **εισαχθεί ένα απλό shellcode** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργεί με apis συμβατές με posix**, μόνο με Mach. **Πιο σύνθετες ενέσεις** θα χρειάζονταν ο **thread** να είναι επίσης **συμβατός με posix**. Επομένως, για να **βελτιωθεί ο thread** θα πρέπει να καλέσει **`pthread_create_from_mach_thread`** που θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτός ο νέος pthread θα μπορούσε να **καλέσει dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι αντί να γράφουμε νέο shellcode για να εκτελέσουμε διάφορες ενέργειες, είναι δυνατό να φορτώσουμε προσαρμοσμένες βιβλιοθήκες. -Μπορείτε να βρείτε **παραδείγματα dylibs** σε (για παράδειγμα αυτό που δημιουργεί ένα log και στη συνέχεια μπορείτε να το ακούσετε): +Μπορείτε να βρείτε **παραδείγματα dylibs** σε (για παράδειγμα, αυτό που δημιουργεί ένα log και στη συνέχεια μπορείτε να το ακούσετε): {{#ref}} ../../macos-dyld-hijacking-and-dyld_insert_libraries.md 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 eadf1ef40..e55c4f338 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 @@ -24,13 +24,13 @@ Στο Catalina ήταν έτσι: Είναι ενδιαφέρον να σημειωθεί ότι η **διαδικασία επαλήθευσης** συμβαίνει σε **userland**. Ωστόσο, μόνο οι εφαρμογές με την χορήγηση **`com.apple.private.security.kext-management`** μπορούν να **ζητήσουν από τον πυρήνα να φορτώσει μια επέκταση**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd` -1. **`kextutil`** cli **ξεκινά** τη **διαδικασία επαλήθευσης** για τη φόρτωση μιας επέκτασης +1. **`kextutil`** cli **ξεκινά** τη διαδικασία **επικύρωσης** για τη φόρτωση μιας επέκτασης - Θα επικοινωνήσει με **`kextd`** στέλνοντας χρησιμοποιώντας μια **υπηρεσία Mach**. 2. **`kextd`** θα ελέγξει διάφορα πράγματα, όπως την **υπογραφή** - Θα επικοινωνήσει με **`syspolicyd`** για να **ελέγξει** αν η επέκταση μπορεί να **φορτωθεί**. 3. **`syspolicyd`** θα **ζητήσει** από τον **χρήστη** αν η επέκταση δεν έχει φορτωθεί προηγουμένως. - **`syspolicyd`** θα αναφέρει το αποτέλεσμα στον **`kextd`** -4. **`kextd`** θα είναι τελικά σε θέση να **πεί** στον πυρήνα να φορτώσει την επέκταση +4. Τελικά, **`kextd`** θα μπορέσει να **πεί τον πυρήνα να φορτώσει** την επέκταση Αν **`kextd`** δεν είναι διαθέσιμο, **`kextutil`** μπορεί να εκτελέσει τους ίδιους ελέγχους. @@ -45,11 +45,11 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1 ## Kernelcache > [!CAUTION] -> Αν και οι επεκτάσεις πυρήνα αναμένονται να βρίσκονται στο `/System/Library/Extensions/`, αν πάτε σε αυτόν τον φάκελο **δεν θα βρείτε κανένα δυαδικό αρχείο**. Αυτό οφείλεται στο **kernelcache** και για να αναστρέψετε ένα `.kext` πρέπει να βρείτε έναν τρόπο να το αποκτήσετε. +> Αν και οι επεκτάσεις πυρήνα αναμένονται να βρίσκονται στο `/System/Library/Extensions/`, αν πάτε σε αυτόν τον φάκελο **δεν θα βρείτε κανένα δυαδικό αρχείο**. Αυτό συμβαίνει λόγω του **kernelcache** και για να αναστρέψετε ένα `.kext` πρέπει να βρείτε έναν τρόπο να το αποκτήσετε. -Το **kernelcache** είναι μια **προ-συγκεντρωμένη και προ-συνδεδεμένη έκδοση του πυρήνα XNU**, μαζί με βασικούς **οδηγούς** και **επικεφαλίδες πυρήνα**. Αποθηκεύεται σε **συμπιεσμένη** μορφή και αποσυμπιέζεται στη μνήμη κατά τη διαδικασία εκκίνησης. Το kernelcache διευκολύνει έναν **ταχύτερο χρόνο εκκίνησης** έχοντας μια έτοιμη προς εκτέλεση έκδοση του πυρήνα και κρίσιμων οδηγών διαθέσιμων, μειώνοντας τον χρόνο και τους πόρους που θα δαπανώνταν διαφορετικά για τη δυναμική φόρτωση και σύνδεση αυτών των στοιχείων κατά την εκκίνηση. +Το **kernelcache** είναι μια **προ-συγκεντρωμένη και προ-συνδεδεμένη έκδοση του πυρήνα XNU**, μαζί με βασικούς **οδηγούς** και **επικεφαλίδες πυρήνα**. Αποθηκεύεται σε **συμπιεσμένη** μορφή και αποσυμπιέζεται στη μνήμη κατά τη διάρκεια της διαδικασίας εκκίνησης. Το kernelcache διευκολύνει έναν **ταχύτερο χρόνο εκκίνησης** έχοντας μια έτοιμη προς εκτέλεση έκδοση του πυρήνα και κρίσιμων οδηγών διαθέσιμων, μειώνοντας τον χρόνο και τους πόρους που θα δαπανώνταν διαφορετικά για τη δυναμική φόρτωση και σύνδεση αυτών των στοιχείων κατά την εκκίνηση. -### Local Kerlnelcache +### Τοπικό Kerlnelcache Στο iOS βρίσκεται στο **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** στο macOS μπορείτε να το βρείτε με: **`find / -name "kernelcache" 2>/dev/null`** \ Στην περίπτωσή μου στο macOS το βρήκα στο: @@ -113,7 +113,7 @@ img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ```bash nm -a kernelcache.release.iphone14.e | wc -l ``` -Με αυτό μπορούμε τώρα **να εξάγουμε όλες τις επεκτάσεις** ή την **μία που σας ενδιαφέρει:** +Με αυτό μπορούμε τώρα να **εξάγουμε όλες τις επεκτάσεις** ή την **μία που σας ενδιαφέρει:** ```bash # List all extensions kextex -l kernelcache.release.iphone14.e 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 fa0671c63..1268681b2 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 @@ -4,7 +4,7 @@ ## [Pwning OTA](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) -[**Σε αυτή την αναφορά**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) εξηγούνται αρκετές ευπάθειες που επέτρεψαν την παραβίαση του πυρήνα παραβιάζοντας τον ενημερωτή λογισμικού.\ +[**Σε αυτή την αναφορά**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) εξηγούνται αρκετές ευπάθειες που επέτρεψαν την παραβίαση του πυρήνα, παραβιάζοντας τον ενημερωτή λογισμικού.\ [**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 6cce87e3f..d7ba64cf0 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 @@ -4,36 +4,36 @@ ## System Extensions / Endpoint Security Framework -Σε αντίθεση με τις Kernel Extensions, **οι System Extensions εκτελούνται σε χώρο χρήστη** αντί για χώρο πυρήνα, μειώνοντας τον κίνδυνο συστήματος από κατάρρευση λόγω δυσλειτουργίας της επέκτασης. +Σε αντίθεση με τις Kernel Extensions, **οι System Extensions εκτελούνται σε χώρο χρήστη** αντί για χώρο πυρήνα, μειώνοντας τον κίνδυνο κατάρρευσης του συστήματος λόγω δυσλειτουργίας της επέκτασης.
https://knight.sc/images/system-extension-internals-1.png
-Υπάρχουν τρεις τύποι system extensions: **DriverKit** Extensions, **Network** Extensions, και **Endpoint Security** Extensions. +Υπάρχουν τρεις τύποι συστημικών επεκτάσεων: **DriverKit** Extensions, **Network** Extensions και **Endpoint Security** Extensions. ### **DriverKit Extensions** -Το DriverKit είναι μια αντικατάσταση για τις kernel extensions που **παρέχουν υποστήριξη υλικού**. Επιτρέπει στους οδηγούς συσκευών (όπως USB, Serial, NIC, και HID drivers) να εκτελούνται σε χώρο χρήστη αντί για χώρο πυρήνα. Το πλαίσιο DriverKit περιλαμβάνει **εκδόσεις χώρου χρήστη ορισμένων κλάσεων I/O Kit**, και ο πυρήνας προωθεί κανονικά γεγονότα I/O Kit σε χώρο χρήστη, προσφέροντας ένα ασφαλέστερο περιβάλλον για αυτούς τους οδηγούς. +Το DriverKit είναι μια αντικατάσταση για τις kernel extensions που **παρέχουν υποστήριξη υλικού**. Επιτρέπει στους οδηγούς συσκευών (όπως USB, Serial, NIC και HID drivers) να εκτελούνται σε χώρο χρήστη αντί για χώρο πυρήνα. Το πλαίσιο DriverKit περιλαμβάνει **εκδόσεις χώρου χρήστη ορισμένων κλάσεων I/O Kit**, και ο πυρήνας προωθεί κανονικά γεγονότα I/O Kit σε χώρο χρήστη, προσφέροντας ένα ασφαλέστερο περιβάλλον για αυτούς τους οδηγούς. ### **Network Extensions** Οι Network Extensions παρέχουν τη δυνατότητα προσαρμογής των συμπεριφορών δικτύου. Υπάρχουν αρκετοί τύποι Network Extensions: - **App Proxy**: Αυτό χρησιμοποιείται για τη δημιουργία ενός VPN client που υλοποιεί ένα ροής-προσανατολισμένο, προσαρμοσμένο πρωτόκολλο VPN. Αυτό σημαίνει ότι διαχειρίζεται την κυκλοφορία δικτύου με βάση τις συνδέσεις (ή ροές) αντί για μεμονωμένα πακέτα. -- **Packet Tunnel**: Αυτό χρησιμοποιείται για τη δημιουργία ενός VPN client που υλοποιεί ένα πακέτο-προσανατολισμένο, προσαρμοσμένο πρωτόκολλο VPN. Αυτό σημαίνει ότι διαχειρίζεται την κυκλοφορία δικτύου με βάση τα μεμονωμένα πακέτα. -- **Filter Data**: Αυτό χρησιμοποιείται για την φιλτράρισμα των "ροών" δικτύου. Μπορεί να παρακολουθεί ή να τροποποιεί τα δεδομένα δικτύου σε επίπεδο ροής. +- **Packet Tunnel**: Αυτό χρησιμοποιείται για τη δημιουργία ενός VPN client που υλοποιεί ένα πακέτο-προσανατολισμένο, προσαρμοσμένο πρωτόκολλο VPN. Αυτό σημαίνει ότι διαχειρίζεται την κυκλοφορία δικτύου με βάση μεμονωμένα πακέτα. +- **Filter Data**: Αυτό χρησιμοποιείται για την φιλτράρισμα "ροών" δικτύου. Μπορεί να παρακολουθεί ή να τροποποιεί τα δεδομένα δικτύου σε επίπεδο ροής. - **Filter Packet**: Αυτό χρησιμοποιείται για την φιλτράρισμα μεμονωμένων πακέτων δικτύου. Μπορεί να παρακολουθεί ή να τροποποιεί τα δεδομένα δικτύου σε επίπεδο πακέτου. - **DNS Proxy**: Αυτό χρησιμοποιείται για τη δημιουργία ενός προσαρμοσμένου παρόχου DNS. Μπορεί να χρησιμοποιηθεί για την παρακολούθηση ή την τροποποίηση των αιτημάτων και απαντήσεων DNS. ## Endpoint Security Framework -Το Endpoint Security είναι ένα πλαίσιο που παρέχεται από την Apple στο macOS που προσφέρει ένα σύνολο APIs για την ασφάλεια του συστήματος. Προορίζεται για χρήση από **προμηθευτές ασφάλειας και προγραμματιστές για την κατασκευή προϊόντων που μπορούν να παρακολουθούν και να ελέγχουν τη δραστηριότητα του συστήματος** για να εντοπίσουν και να προστατεύσουν από κακόβουλες δραστηριότητες. +Το Endpoint Security είναι ένα πλαίσιο που παρέχεται από την Apple στο macOS που προσφέρει μια σειρά από APIs για την ασφάλεια του συστήματος. Προορίζεται για χρήση από **προμηθευτές ασφάλειας και προγραμματιστές για την κατασκευή προϊόντων που μπορούν να παρακολουθούν και να ελέγχουν τη δραστηριότητα του συστήματος** για να εντοπίσουν και να προστατεύσουν από κακόβουλες δραστηριότητες. Αυτό το πλαίσιο παρέχει μια **συλλογή APIs για την παρακολούθηση και τον έλεγχο της δραστηριότητας του συστήματος**, όπως εκτελέσεις διεργασιών, γεγονότα συστήματος αρχείων, γεγονότα δικτύου και πυρήνα. -Ο πυρήνας αυτού του πλαισίου είναι υλοποιημένος στον πυρήνα, ως Kernel Extension (KEXT) που βρίσκεται στο **`/System/Library/Extensions/EndpointSecurity.kext`**. Αυτό το KEXT αποτελείται από αρκετά βασικά στοιχεία: +Ο πυρήνας αυτού του πλαισίου είναι υλοποιημένος στον πυρήνα, ως Kernel Extension (KEXT) που βρίσκεται στο **`/System/Library/Extensions/EndpointSecurity.kext`**. Αυτό το KEXT αποτελείται από αρκετά βασικά συστατικά: - **EndpointSecurityDriver**: Αυτό λειτουργεί ως το "σημείο εισόδου" για την επέκταση πυρήνα. Είναι το κύριο σημείο αλληλεπίδρασης μεταξύ του OS και του πλαισίου Endpoint Security. -- **EndpointSecurityEventManager**: Αυτό το στοιχείο είναι υπεύθυνο για την υλοποίηση kernel hooks. Οι kernel hooks επιτρέπουν στο πλαίσιο να παρακολουθεί γεγονότα του συστήματος παρεμβαίνοντας σε κλήσεις συστήματος. +- **EndpointSecurityEventManager**: Αυτό το συστατικό είναι υπεύθυνο για την υλοποίηση kernel hooks. Οι kernel hooks επιτρέπουν στο πλαίσιο να παρακολουθεί γεγονότα του συστήματος παρεμβαίνοντας σε κλήσεις συστήματος. - **EndpointSecurityClientManager**: Αυτό διαχειρίζεται την επικοινωνία με τους πελάτες χώρου χρήστη, παρακολουθώντας ποιες πελάτες είναι συνδεδεμένοι και χρειάζονται να λάβουν ειδοποιήσεις γεγονότων. - **EndpointSecurityMessageManager**: Αυτό στέλνει μηνύματα και ειδοποιήσεις γεγονότων στους πελάτες χώρου χρήστη. @@ -50,14 +50,14 @@ **Η επικοινωνία χώρου χρήστη** με το πλαίσιο Endpoint Security συμβαίνει μέσω της κλάσης IOUserClient. Χρησιμοποιούνται δύο διαφορετικές υποκλάσεις, ανάλογα με τον τύπο του καλούντος: -- **EndpointSecurityDriverClient**: Αυτό απαιτεί την επιλεξιμότητα `com.apple.private.endpoint-security.manager`, η οποία κατέχεται μόνο από τη διαδικασία συστήματος `endpointsecurityd`. -- **EndpointSecurityExternalClient**: Αυτό απαιτεί την επιλεξιμότητα `com.apple.developer.endpoint-security.client`. Αυτό θα χρησιμοποιούνταν συνήθως από λογισμικό ασφάλειας τρίτων που χρειάζεται να αλληλεπιδράσει με το πλαίσιο Endpoint Security. +- **EndpointSecurityDriverClient**: Αυτό απαιτεί την άδεια `com.apple.private.endpoint-security.manager`, η οποία κατέχεται μόνο από τη διαδικασία συστήματος `endpointsecurityd`. +- **EndpointSecurityExternalClient**: Αυτό απαιτεί την άδεια `com.apple.developer.endpoint-security.client`. Αυτό θα χρησιμοποιείται συνήθως από λογισμικό ασφάλειας τρίτων που χρειάζεται να αλληλεπιδράσει με το πλαίσιο Endpoint Security. -Οι Endpoint Security Extensions:**`libEndpointSecurity.dylib`** είναι η C βιβλιοθήκη που χρησιμοποιούν οι system extensions για να επικοινωνούν με τον πυρήνα. Αυτή η βιβλιοθήκη χρησιμοποιεί το I/O Kit (`IOKit`) για να επικοινωνήσει με το KEXT Endpoint Security. +Οι Endpoint Security Extensions:**`libEndpointSecurity.dylib`** είναι η C βιβλιοθήκη που χρησιμοποιούν οι συστημικές επεκτάσεις για να επικοινωνούν με τον πυρήνα. Αυτή η βιβλιοθήκη χρησιμοποιεί το I/O Kit (`IOKit`) για να επικοινωνήσει με το KEXT Endpoint Security. -**`endpointsecurityd`** είναι μια βασική υπηρεσία συστήματος που εμπλέκεται στη διαχείριση και εκκίνηση των επεκτάσεων συστήματος ασφάλειας, ιδιαίτερα κατά τη διάρκεια της πρώιμης διαδικασίας εκκίνησης. **Μόνο οι system extensions** που έχουν σημειωθεί με **`NSEndpointSecurityEarlyBoot`** στο αρχείο `Info.plist` τους λαμβάνουν αυτή τη μεταχείριση πρώιμης εκκίνησης. +**`endpointsecurityd`** είναι μια βασική υπηρεσία συστήματος που εμπλέκεται στη διαχείριση και εκκίνηση των συστημικών επεκτάσεων ασφάλειας, ιδιαίτερα κατά τη διάρκεια της πρώιμης διαδικασίας εκκίνησης. **Μόνο οι συστημικές επεκτάσεις** που έχουν σημειωθεί με **`NSEndpointSecurityEarlyBoot`** στο αρχείο `Info.plist` τους λαμβάνουν αυτή τη θεραπεία πρώιμης εκκίνησης. -Μια άλλη υπηρεσία συστήματος, **`sysextd`**, **επικυρώνει τις system extensions** και τις μεταφέρει στις κατάλληλες θέσεις του συστήματος. Στη συνέχεια, ζητά από την σχετική υπηρεσία να φορτώσει την επέκταση. Το **`SystemExtensions.framework`** είναι υπεύθυνο για την ενεργοποίηση και απενεργοποίηση των system extensions. +Μια άλλη υπηρεσία συστήματος, **`sysextd`**, **επικυρώνει τις συστημικές επεκτάσεις** και τις μεταφέρει στις κατάλληλες θέσεις του συστήματος. Στη συνέχεια, ζητά από την σχετική υπηρεσία να φορτώσει την επέκταση. Το **`SystemExtensions.framework`** είναι υπεύθυνο για την ενεργοποίηση και απενεργοποίηση των συστημικών επεκτάσεων. ## Bypassing ESF @@ -71,7 +71,7 @@ tccutil reset All ``` Για **περισσότερες πληροφορίες** σχετικά με αυτήν την παράκαμψη και σχετικές, ελέγξτε την ομιλία [#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI) -Στο τέλος, αυτό διορθώθηκε δίνοντας τη νέα άδεια **`kTCCServiceEndpointSecurityClient`** στην εφαρμογή ασφαλείας που διαχειρίζεται το **`tccd`** έτσι ώστε το `tccutil` να μην διαγράφει τις άδειές της, εμποδίζοντας την από το να τρέξει. +Στο τέλος, αυτό διορθώθηκε δίνοντας τη νέα άδεια **`kTCCServiceEndpointSecurityClient`** στην εφαρμογή ασφαλείας που διαχειρίζεται το **`tccd`**, έτσι ώστε το `tccutil` να μην διαγράψει τις άδειές της, εμποδίζοντας την από το να εκτελείται. ## Αναφορές 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 59eae48f1..e013afde9 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 @@ -54,7 +54,7 @@ jtool2 -d __DATA.__const myipc_server | grep MIG ### Codesign / ldid -> [!TIP] > **`Codesign`** μπορεί να βρεθεί σε **macOS** ενώ **`ldid`** μπορεί να βρεθεί σε **iOS** +> [!TIP] > **`Codesign`** μπορεί να βρεθεί στο **macOS** ενώ το **`ldid`** μπορεί να βρεθεί στο **iOS** ```bash # Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -88,7 +88,7 @@ ldid -S/tmp/entl.xml ### hdiutil -Αυτό το εργαλείο επιτρέπει να **mount** εικόνες δίσκων της Apple (**.dmg**) για να τις επιθεωρήσετε πριν εκτελέσετε οτιδήποτε: +Αυτό το εργαλείο επιτρέπει να **mount** τις εικόνες δίσκων της Apple (**.dmg**) για να τις επιθεωρήσετε πριν εκτελέσετε οτιδήποτε: ```bash hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ``` @@ -96,8 +96,8 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ### Συμπιεσμένα δυαδικά -- Ελέγξτε για υψηλή εντροπία -- Ελέγξτε τις συμβολοσειρές (αν δεν υπάρχει σχεδόν καμία κατανοητή συμβολοσειρά, είναι συμπιεσμένο) +- Έλεγχος για υψηλή εντροπία +- Έλεγχος των συμβολοσειρών (αν δεν υπάρχει σχεδόν καμία κατανοητή συμβολοσειρά, είναι συμπιεσμένο) - Ο συμπιεστής UPX για MacOS δημιουργεί μια ενότητα που ονομάζεται "\_\_XHDR" ## Στατική ανάλυση Objective-C @@ -107,22 +107,22 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg > [!CAUTION] > Σημειώστε ότι τα προγράμματα που έχουν γραφτεί σε Objective-C **διατηρούν** τις δηλώσεις κλάσης τους **όταν** **μεταγλωττίζονται** σε [Mach-O binaries](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Τέτοιες δηλώσεις κλάσης **περιλαμβάνουν** το όνομα και τον τύπο των: -- Των διεπαφών που ορίζονται +- Των διεπαφών που έχουν οριστεί - Των μεθόδων διεπαφής - Των μεταβλητών στιγμής διεπαφής -- Των πρωτοκόλλων που ορίζονται +- Των πρωτοκόλλων που έχουν οριστεί Σημειώστε ότι αυτά τα ονόματα θα μπορούσαν να είναι κρυπτογραφημένα για να καταστήσουν την αναστροφή του δυαδικού πιο δύσκολη. ### Κλήση συναρτήσεων -Όταν καλείται μια συνάρτηση σε ένα δυαδικό που χρησιμοποιεί Objective-C, ο μεταγλωττισμένος κώδικας αντί να καλεί αυτή τη συνάρτηση, θα καλέσει **`objc_msgSend`**. Αυτό θα καλέσει τη τελική συνάρτηση: +Όταν καλείται μια συνάρτηση σε ένα δυαδικό που χρησιμοποιεί Objective-C, ο μεταγλωττισμένος κώδικας αντί να καλεί αυτή τη συνάρτηση, θα καλέσει **`objc_msgSend`**. Αυτό θα καλεί τη τελική συνάρτηση: ![](<../../../images/image (305).png>) Οι παράμετροι που αναμένει αυτή η συνάρτηση είναι: -- Η πρώτη παράμετρος (**self**) είναι "ένας δείκτης που δείχνει στην **περίπτωση της κλάσης που θα λάβει το μήνυμα**". Ή πιο απλά, είναι το αντικείμενο πάνω στο οποίο καλείται η μέθοδος. Αν η μέθοδος είναι μέθοδος κλάσης, αυτό θα είναι μια περίπτωση του αντικειμένου κλάσης (ως σύνολο), ενώ για μια μέθοδο στιγμής, το self θα δείχνει σε μια δημιουργημένη περίπτωση της κλάσης ως αντικείμενο. +- Η πρώτη παράμετρος (**self**) είναι "ένα δείκτη που δείχνει στην **περίπτωση της κλάσης που θα λάβει το μήνυμα**". Ή πιο απλά, είναι το αντικείμενο πάνω στο οποίο καλείται η μέθοδος. Αν η μέθοδος είναι μέθοδος κλάσης, αυτό θα είναι μια περίπτωση του αντικειμένου κλάσης (ως σύνολο), ενώ για μια μέθοδο στιγμής, το self θα δείχνει σε μια δημιουργημένη περίπτωση της κλάσης ως αντικείμενο. - Η δεύτερη παράμετρος, (**op**), είναι "ο επιλεγέας της μεθόδου που χειρίζεται το μήνυμα". Και πάλι, πιο απλά, αυτό είναι απλώς το **όνομα της μεθόδου.** - Οι υπόλοιπες παράμετροι είναι οποιεσδήποτε **τιμές απαιτούνται από τη μέθοδο** (op). @@ -152,7 +152,7 @@ x64: ```bash ./dynadump dump /path/to/bin ``` -Στη στιγμή που γράφεται αυτό, αυτό είναι **αυτή τη στιγμή η καλύτερη επιλογή**. +Αυτή τη στιγμή, αυτό είναι **αυτό που λειτουργεί καλύτερα**. #### Κανονικά εργαλεία ```bash @@ -214,7 +214,7 @@ swift demangle Το macOS εκθέτει μερικά ενδιαφέροντα APIs που παρέχουν πληροφορίες σχετικά με τις διαδικασίες: - `proc_info`: Αυτό είναι το κύριο που παρέχει πολλές πληροφορίες για κάθε διαδικασία. Πρέπει να είστε root για να αποκτήσετε πληροφορίες για άλλες διαδικασίες, αλλά δεν χρειάζεστε ειδικά δικαιώματα ή mach ports. -- `libsysmon.dylib`: Επιτρέπει την απόκτηση πληροφοριών σχετικά με τις διαδικασίες μέσω εκτεθειμένων συναρτήσεων XPC, ωστόσο, απαιτείται να έχετε το δικαίωμα `com.apple.sysmond.client`. +- `libsysmon.dylib`: Επιτρέπει την απόκτηση πληροφοριών σχετικά με διαδικασίες μέσω εκτεθειμένων συναρτήσεων XPC, ωστόσο, απαιτείται να έχετε το δικαίωμα `com.apple.sysmond.client`. ### Stackshot & microstackshots @@ -230,7 +230,7 @@ swift demangle - `com.apple.sysdiagnose.CacheDelete`: Διαγράφει παλιές αρχειοθετήσεις στο /var/rmp - `com.apple.sysdiagnose.kernel.ipc`: Ειδική θύρα 23 (kernel) -- `com.apple.sysdiagnose.service.xpc`: Διεπαφή χρήστη μέσω της κλάσης `Libsysdiagnose` Obj-C. Τρία επιχειρήματα σε ένα dict μπορούν να περαστούν (`compress`, `display`, `run`) +- `com.apple.sysdiagnose.service.xpc`: Διεπαφή λειτουργίας χρήστη μέσω της κλάσης `Libsysdiagnose` Obj-C. Τρία επιχειρήματα σε ένα dict μπορούν να περαστούν (`compress`, `display`, `run`) ### Ενοποιημένα Καταγραφικά @@ -246,11 +246,11 @@ swift demangle #### Μεσαίο πάνελ -Στο μεσαίο πάνελ μπορείτε να δείτε τον **αποσυναρμολογημένο κώδικα**. Και μπορείτε να τον δείτε σε **ακατέργαστο** αποσυναρμολόγηση, ως **γράφημα**, ως **αποσυμπιεσμένο** και ως **δυαδικό** κάνοντας κλικ στο αντίστοιχο εικονίδιο: +Στο μεσαίο πάνελ μπορείτε να δείτε τον **αποσυναρμολογημένο κώδικα**. Και μπορείτε να τον δείτε σε **ακατέργαστο** αποσυναρμολόγηση, ως **γράφημα**, ως **αποκωδικοποιημένο** και ως **δυαδικό** κάνοντας κλικ στο αντίστοιχο εικονίδιο:
-Κάνοντας δεξί κλικ σε ένα αντικείμενο κώδικα μπορείτε να δείτε **αναφορές προς/από αυτό το αντικείμενο** ή ακόμα και να αλλάξετε το όνομά του (αυτό δεν λειτουργεί σε αποσυμπιεσμένο ψευδοκώδικα): +Κάνοντας δεξί κλικ σε ένα αντικείμενο κώδικα μπορείτε να δείτε **αναφορές προς/από αυτό το αντικείμενο** ή ακόμη και να αλλάξετε το όνομά του (αυτό δεν λειτουργεί σε αποκωδικοποιημένο ψευδοκώδικα):
@@ -262,14 +262,14 @@ swift demangle ### dtrace -Επιτρέπει στους χρήστες να έχουν πρόσβαση σε εφαρμογές σε εξαιρετικά **χαμηλό επίπεδο** και παρέχει έναν τρόπο για τους χρήστες να **ιχνηλατούν** **προγράμματα** και ακόμη και να αλλάζουν τη ροή εκτέλεσής τους. Το Dtrace χρησιμοποιεί **probes** που είναι **τοποθετημένα σε όλο τον πυρήνα** και βρίσκονται σε θέσεις όπως η αρχή και το τέλος των κλήσεων συστήματος. +Επιτρέπει στους χρήστες πρόσβαση σε εφαρμογές σε εξαιρετικά **χαμηλό επίπεδο** και παρέχει έναν τρόπο για τους χρήστες να **ιχνηλατούν** **προγράμματα** και ακόμη και να αλλάζουν τη ροή εκτέλεσής τους. Το Dtrace χρησιμοποιεί **probes** που είναι **τοποθετημένα σε όλο τον πυρήνα** και βρίσκονται σε θέσεις όπως η αρχή και το τέλος των κλήσεων συστήματος. Το DTrace χρησιμοποιεί τη συνάρτηση **`dtrace_probe_create`** για να δημιουργήσει ένα probe για κάθε κλήση συστήματος. Αυτά τα probes μπορούν να ενεργοποιηθούν στο **σημείο εισόδου και εξόδου κάθε κλήσης συστήματος**. Η αλληλεπίδραση με το DTrace συμβαίνει μέσω του /dev/dtrace που είναι διαθέσιμο μόνο για τον χρήστη root. > [!TIP] > Για να ενεργοποιήσετε το Dtrace χωρίς να απενεργοποιήσετε πλήρως την προστασία SIP μπορείτε να εκτελέσετε σε λειτουργία ανάκτησης: `csrutil enable --without dtrace` > -> Μπορείτε επίσης να **`dtrace`** ή **`dtruss`** δυαδικά αρχεία που **έχετε συντάξει**. +> Μπορείτε επίσης να χρησιμοποιήσετε τα δυαδικά αρχεία **`dtrace`** ή **`dtruss`** που **έχετε συντάξει**. Οι διαθέσιμες probes του dtrace μπορούν να αποκτηθούν με: ```bash @@ -281,11 +281,11 @@ ID PROVIDER MODULE FUNCTION NAME 43 profile profile-97 44 profile profile-199 ``` -Το όνομα της πρόβας αποτελείται από τέσσερα μέρη: τον πάροχο, το module, τη λειτουργία και το όνομα (`fbt:mach_kernel:ptrace:entry`). Εάν δεν καθορίσετε κάποιο μέρος του ονόματος, το Dtrace θα εφαρμόσει αυτό το μέρος ως wildcard. +Το όνομα της πρόβας αποτελείται από τέσσερα μέρη: τον πάροχο, το module, τη λειτουργία και το όνομα (`fbt:mach_kernel:ptrace:entry`). Αν δεν καθορίσετε κάποιο μέρος του ονόματος, το Dtrace θα εφαρμόσει αυτό το μέρος ως wildcard. -Για να ρυθμίσουμε το DTrace να ενεργοποιεί τις πρόβες και να καθορίσουμε ποιες ενέργειες να εκτελούνται όταν ενεργοποιούνται, θα χρειαστεί να χρησιμοποιήσουμε τη γλώσσα D. +Για να ρυθμίσετε το DTrace ώστε να ενεργοποιεί τις πρόβες και να καθορίσετε ποιες ενέργειες να εκτελούνται όταν ενεργοποιούνται, θα χρειαστεί να χρησιμοποιήσουμε τη γλώσσα D. -Μια πιο λεπτομερής εξήγηση και περισσότερα παραδείγματα μπορούν να βρεθούν στο [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html) +Μια πιο λεπτομερής εξήγηση και περισσότερα παραδείγματα μπορείτε να βρείτε στο [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html) #### Παραδείγματα @@ -343,7 +343,7 @@ dtruss -c -p 1000 #get syscalls of PID 1000 Εργαλεία όπως το `latency`, `sc_usage`, `fs_usage` και `trace` το χρησιμοποιούν εσωτερικά. -Για να αλληλεπιδράσετε με το `kdebug`, χρησιμοποιείται το `sysctl` μέσω του ονόματος χώρου `kern.kdebug` και οι MIBs που πρέπει να χρησιμοποιηθούν μπορούν να βρεθούν στο `sys/sysctl.h`, με τις συναρτήσεις να είναι υλοποιημένες στο `bsd/kern/kdebug.c`. +Για να αλληλεπιδράσετε με το `kdebug`, χρησιμοποιείται το `sysctl` πάνω από το namespace `kern.kdebug` και οι MIBs που πρέπει να χρησιμοποιηθούν μπορούν να βρεθούν στο `sys/sysctl.h`, με τις συναρτήσεις να είναι υλοποιημένες στο `bsd/kern/kdebug.c`. Για να αλληλεπιδράσετε με το kdebug με έναν προσαρμοσμένο πελάτη, αυτά είναι συνήθως τα βήματα: @@ -365,15 +365,15 @@ dtruss -c -p 1000 #get syscalls of PID 1000 Μπορείτε να το χρησιμοποιήσετε ακόμη και με **SIP ενεργοποιημένο** -Μπορείτε να χρησιμοποιήσετε ως πελάτες την υπηρεσία `ktrace`: +Μπορείτε να χρησιμοποιήσετε ως πελάτες το εργαλείο `ktrace`: ```bash ktrace trace -s -S -t c -c ls | grep "ls(" ``` -Ή `tailspin`. +Or `tailspin`. ### kperf -Αυτό χρησιμοποιείται για την προφίλ επιπέδου πυρήνα και είναι κατασκευασμένο χρησιμοποιώντας κλήσεις `Kdebug`. +Αυτό χρησιμοποιείται για την εκτέλεση προφίλ σε επίπεδο πυρήνα και είναι κατασκευασμένο χρησιμοποιώντας κλήσεις `Kdebug`. Βασικά, ελέγχεται η παγκόσμια μεταβλητή `kernel_debug_active` και αν είναι ενεργοποιημένη καλεί τον `kperf_kdebug_handler` με τον κωδικό `Kdebug` και τη διεύθυνση του πλαισίου πυρήνα που καλεί. Αν ο κωδικός `Kdebug` ταιριάζει με έναν επιλεγμένο, αποκτά τις "ενέργειες" που έχουν ρυθμιστεί ως bitmap (ελέγξτε το `osfmk/kperf/action.h` για τις επιλογές). @@ -398,11 +398,11 @@ ktrace trace -s -S -t c -c ls | grep "ls(" ### Crescendo -[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) είναι ένα εργαλείο GUI με την εμφάνιση και την αίσθηση που μπορεί να γνωρίζουν οι χρήστες Windows από το Microsoft Sysinternal’s _Procmon_. Αυτό το εργαλείο επιτρέπει την καταγραφή διαφόρων τύπων γεγονότων να ξεκινά και να σταματά, επιτρέπει τη φιλτράρισή τους κατά κατηγορίες όπως αρχείο, διαδικασία, δίκτυο κ.λπ., και παρέχει τη δυνατότητα αποθήκευσης των καταγεγραμμένων γεγονότων σε μορφή json. +[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) είναι ένα εργαλείο GUI με την εμφάνιση και την αίσθηση που μπορεί να γνωρίζουν οι χρήστες Windows από το Microsoft Sysinternal’s _Procmon_. Αυτό το εργαλείο επιτρέπει την καταγραφή διαφόρων τύπων γεγονότων να ξεκινά και να σταματά, επιτρέπει τη φιλτράρισή τους κατά κατηγορίες όπως αρχείο, διαδικασία, δίκτυο, κ.λπ., και παρέχει τη δυνατότητα αποθήκευσης των καταγεγραμμένων γεγονότων σε μορφή json. ### Apple Instruments -[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) είναι μέρος των εργαλείων προγραμματιστών του Xcode – χρησιμοποιούνται για την παρακολούθηση της απόδοσης εφαρμογών, την αναγνώριση διαρροών μνήμης και την παρακολούθηση δραστηριότητας συστήματος αρχείων. +[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) είναι μέρος των εργαλείων προγραμματιστών του Xcode – χρησιμοποιούνται για την παρακολούθηση της απόδοσης εφαρμογών, την αναγνώριση διαρροών μνήμης και την παρακολούθηση της δραστηριότητας του συστήματος αρχείων. ![](<../../../images/image (1138).png>) @@ -424,7 +424,7 @@ fs_usage -w -f network curl #This tracks network actions ### lldb -**lldb** είναι το de **facto εργαλείο** για **debugging** δυαδικών αρχείων **macOS**. +**lldb** είναι το de **facto εργαλείο** για **αποσφαλμάτωση** δυαδικών αρχείων **macOS**. ```bash lldb ./malware.bin lldb -p 1122 @@ -438,10 +438,10 @@ settings set target.x86-disassembly-flavor intel > [!WARNING] > Μέσα στο lldb, εκτελέστε μια διαδικασία με `process save-core` -
(lldb) ΕντολήΠεριγραφή
run (r)Ξεκινά την εκτέλεση, η οποία θα συνεχιστεί αδιάκοπα μέχρι να χτυπήσει ένα breakpoint ή να τερματιστεί η διαδικασία.
process launch --stop-at-entryΞεκινά την εκτέλεση σταματώντας στο σημείο εισόδου
continue (c)Συνεχίζει την εκτέλεση της διαδικασίας που αποσφαλματώνεται.
nexti (n / ni)Εκτελεί την επόμενη εντολή. Αυτή η εντολή θα παραλείψει τις κλήσεις συναρτήσεων.
stepi (s / si)Εκτελεί την επόμενη εντολή. Σε αντίθεση με την εντολή nexti, αυτή η εντολή θα εισέλθει στις κλήσεις συναρτήσεων.
finish (f)Εκτελεί τις υπόλοιπες εντολές στην τρέχουσα συνάρτηση (“frame”) και επιστρέφει και σταματά.
control + cΠαύει την εκτέλεση. Εάν η διαδικασία έχει εκτελεστεί (r) ή συνεχιστεί (c), αυτό θα προκαλέσει την παύση της διαδικασίας ...όπου κι αν εκτελείται αυτή τη στιγμή.
breakpoint (b)

b main #Οποιαδήποτε συνάρτηση ονομάζεται main

b <binname>`main #Κύρια συνάρτηση του bin

b set -n main --shlib <lib_name> #Κύρια συνάρτηση του υποδεικνυόμενου bin

breakpoint set -r '\[NSFileManager .*\]$' #Οποιαδήποτε μέθοδος NSFileManager

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

break set -r . -s libobjc.A.dylib # Σπάσιμο σε όλες τις συναρτήσεις αυτής της βιβλιοθήκης

b -a 0x0000000100004bd9

br l #Λίστα breakpoint

br e/dis <num> #Ενεργοποίηση/Απενεργοποίηση breakpoint

breakpoint delete <num>

help

help breakpoint #Λάβετε βοήθεια για την εντολή breakpoint

help memory write #Λάβετε βοήθεια για να γράψετε στη μνήμη

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>Εμφανίζει τη μνήμη ως μια null-terminated συμβολοσειρά.
x/i <reg/memory address>Εμφανίζει τη μνήμη ως εντολή assembly.
x/b <reg/memory address>Εμφανίζει τη μνήμη ως byte.
print object (po)

Αυτή η εντολή θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Σημειώστε ότι οι περισσότερες από τις APIs ή μεθόδους Objective-C της Apple επιστρέφουν αντικείμενα, και επομένως θα πρέπει να εμφανίζονται μέσω της εντολής “print object” (po). Εάν το po δεν παράγει μια ουσιαστική έξοδο, χρησιμοποιήστε x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Γράψτε AAAA σε αυτή τη διεύθυνση
memory write -f s $rip+0x11f+7 "AAAA" #Γράψτε AAAA στη διεύθυνση
disassembly

dis #Διαχωρισμός της τρέχουσας συνάρτησης

dis -n <funcname> #Διαχωρισμός της συνάρτησης

dis -n <funcname> -b <basename> #Διαχωρισμός της συνάρτησης
dis -c 6 #Διαχωρισμός 6 γραμμών
dis -c 0x100003764 -e 0x100003768 # Από μία προσθήκη μέχρι την άλλη
dis -p -c 4 # Ξεκινήστε στη τρέχουσα διεύθυνση διαχωρίζοντας

parrayparray 3 (char **)$x1 # Ελέγξτε τον πίνακα 3 στοιχείων στο x1 reg
image dump sectionsΕκτυπώνει το χάρτη της μνήμης της τρέχουσας διαδικασίας
image dump symtab <library>image dump symtab CoreNLP #Λάβετε τη διεύθυνση όλων των συμβόλων από το CoreNLP
+
(lldb) ΕντολήΠεριγραφή
run (r)Ξεκινά την εκτέλεση, η οποία θα συνεχιστεί αδιάκοπα μέχρι να χτυπήσει ένα breakpoint ή να τερματιστεί η διαδικασία.
process launch --stop-at-entryΞεκινά την εκτέλεση σταματώντας στο σημείο εισόδου
continue (c)Συνεχίζει την εκτέλεση της διαδικασίας που αποσφαλματώνεται.
nexti (n / ni)Εκτελεί την επόμενη εντολή. Αυτή η εντολή θα παραλείψει τις κλήσεις συναρτήσεων.
stepi (s / si)Εκτελεί την επόμενη εντολή. Σε αντίθεση με την εντολή nexti, αυτή η εντολή θα εισέλθει στις κλήσεις συναρτήσεων.
finish (f)Εκτελεί τις υπόλοιπες εντολές στην τρέχουσα συνάρτηση (“frame”) και επιστρέφει και σταματά.
control + cΠαύει την εκτέλεση. Εάν η διαδικασία έχει εκτελεστεί (r) ή συνεχιστεί (c), αυτό θα προκαλέσει την παύση της διαδικασίας ...όπου κι αν εκτελείται αυτή τη στιγμή.
breakpoint (b)

b main #Οποιαδήποτε συνάρτηση ονομάζεται main

b <binname>`main #Κύρια συνάρτηση του bin

b set -n main --shlib <lib_name> #Κύρια συνάρτηση του υποδεικνυόμενου bin

breakpoint set -r '\[NSFileManager .*\]$' #Οποιαδήποτε μέθοδος NSFileManager

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

break set -r . -s libobjc.A.dylib # Σπάσιμο σε όλες τις συναρτήσεις αυτής της βιβλιοθήκης

b -a 0x0000000100004bd9

br l #Λίστα breakpoint

br e/dis <num> #Ενεργοποίηση/Απενεργοποίηση breakpoint

breakpoint delete <num>

help

help breakpoint #Λάβετε βοήθεια για την εντολή breakpoint

help memory write #Λάβετε βοήθεια για να γράψετε στη μνήμη

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>Εμφανίζει τη μνήμη ως μια null-terminated συμβολοσειρά.
x/i <reg/memory address>Εμφανίζει τη μνήμη ως εντολή assembly.
x/b <reg/memory address>Εμφανίζει τη μνήμη ως byte.
print object (po)

Αυτό θα εκτυπώσει το αντικείμενο που αναφέρεται από την παράμετρο

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Σημειώστε ότι οι περισσότερες από τις APIs ή μεθόδους Objective-C της Apple επιστρέφουν αντικείμενα, και επομένως θα πρέπει να εμφανίζονται μέσω της εντολής “print object” (po). Εάν το po δεν παράγει μια ουσιαστική έξοδο, χρησιμοποιήστε x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Γράψτε AAAA σε αυτή τη διεύθυνση
memory write -f s $rip+0x11f+7 "AAAA" #Γράψτε AAAA στη διεύθυνση
disassembly

dis #Διαχωρισμός της τρέχουσας συνάρτησης

dis -n <funcname> #Διαχωρισμός της συνάρτησης

dis -n <funcname> -b <basename> #Διαχωρισμός της συνάρτησης
dis -c 6 #Διαχωρισμός 6 γραμμών
dis -c 0x100003764 -e 0x100003768 # Από μία προσθήκη μέχρι την άλλη
dis -p -c 4 # Ξεκινήστε στη τρέχουσα διεύθυνση διαχωρίζοντας

parrayparray 3 (char **)$x1 # Ελέγξτε τον πίνακα 3 στοιχείων στο x1 reg
image dump sectionsΕκτυπώνει το χάρτη της μνήμης της τρέχουσας διαδικασίας
image dump symtab <library>image dump symtab CoreNLP #Λάβετε τη διεύθυνση όλων των συμβόλων από το CoreNLP
> [!NOTE] -> Όταν καλείτε τη συνάρτηση **`objc_sendMsg`**, το **rsi** register περιέχει το **όνομα της μεθόδου** ως μια null-terminated (“C”) συμβολοσειρά. Για να εκτυπώσετε το όνομα μέσω του lldb κάντε: +> Όταν καλείτε τη συνάρτηση **`objc_sendMsg`**, το **rsi** register περιέχει το **όνομα της μεθόδου** ως μια null-terminated (“C”) συμβολοσειρά. Για να εκτυπώσετε το όνομα μέσω lldb κάντε: > > `(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"` > @@ -461,7 +461,7 @@ settings set target.x86-disassembly-flavor intel - `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //η διαδικασία αποσφαλματώνεται }` - Μπορεί επίσης να καλέσει την κλήση συστήματος **`ptrace`** με την σημαία **`PT_DENY_ATTACH`**. Αυτό **αποτρέπει** έναν αποσφαλματωτή από το να συνδεθεί και να παρακολουθήσει. - Μπορείτε να ελέγξετε αν η λειτουργία **`sysctl`** ή **`ptrace`** εισάγεται (αλλά το κακόβουλο λογισμικό θα μπορούσε να την εισάγει δυναμικά) -- Όπως σημειώνεται σε αυτή την αναφορά, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ +- Όπως σημειώνεται σε αυτή τη γραφή, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ “_Το μήνυμα Process # exited with **status = 45 (0x0000002d)** είναι συνήθως ένα προειδοποιητικό σημάδι ότι ο στόχος αποσφαλμάτωσης χρησιμοποιεί **PT_DENY_ATTACH**_” ## Core Dumps @@ -482,7 +482,7 @@ settings set target.x86-disassembly-flavor intel Για εφαρμογές και άλλες διαδικασίες **που εκτελούνται στο πλαίσιο launchd ανά χρήστη**, το ReportCrash εκτελείται ως LaunchAgent και αποθηκεύει τις αναφορές σφαλμάτων στους `~/Library/Logs/DiagnosticReports/` του χρήστη.\ Για δαίμονες, άλλες διαδικασίες **που εκτελούνται στο πλαίσιο launchd του συστήματος** και άλλες προνομιακές διαδικασίες, το ReportCrash εκτελείται ως LaunchDaemon και αποθηκεύει τις αναφορές σφαλμάτων στα `/Library/Logs/DiagnosticReports` του συστήματος. -Εάν ανησυχείτε για τις αναφορές σφαλμάτων **που αποστέλλονται στην Apple**, μπορείτε να τις απενεργοποιήσετε. Αν όχι, οι αναφορές σφαλμάτων μπορεί να είναι χρήσιμες για **να καταλάβετε πώς κατέρρευσε ένας διακομιστής**. +Εάν ανησυχείτε για τις αναφορές σφαλματος **που αποστέλλονται στην Apple**, μπορείτε να τις απενεργοποιήσετε. Αν όχι, οι αναφορές σφαλματος μπορεί να είναι χρήσιμες για **να καταλάβετε πώς κατέρρευσε ένας διακομιστής**. ```bash #To disable crash reporting: launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist 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 cb8038adb..a8e0ebf04 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 @@ -23,13 +23,13 @@ ## **Καταχωρητές (ARM64v8)** -Το ARM64 έχει **31 γενικούς καταχωρητές**, που φέρουν την ετικέτα `x0` έως `x30`. Κάθε ένας μπορεί να αποθηκεύσει μια **64-bit** (8-byte) τιμή. Για λειτουργίες που απαιτούν μόνο 32-bit τιμές, οι ίδιοι καταχωρητές μπορούν να προσπελαστούν σε 32-bit λειτουργία χρησιμοποιώντας τα ονόματα w0 έως w30. +Το ARM64 έχει **31 γενικούς καταχωρητές**, που φέρουν τις ετικέτες `x0` έως `x30`. Κάθε ένας μπορεί να αποθηκεύσει μια **64-bit** (8-byte) τιμή. Για λειτουργίες που απαιτούν μόνο 32-bit τιμές, οι ίδιοι καταχωρητές μπορούν να προσπελαστούν σε 32-bit λειτουργία χρησιμοποιώντας τα ονόματα w0 έως w30. 1. **`x0`** έως **`x7`** - Αυτοί χρησιμοποιούνται συνήθως ως καταχωρητές scratch και για τη μεταφορά παραμέτρων σε υπορουτίνες. - **`x0`** μεταφέρει επίσης τα δεδομένα επιστροφής μιας συνάρτησης 2. **`x8`** - Στον πυρήνα Linux, το `x8` χρησιμοποιείται ως αριθμός κλήσης συστήματος για την εντολή `svc`. **Στο macOS, το x16 είναι αυτό που χρησιμοποιείται!** 3. **`x9`** έως **`x15`** - Περισσότεροι προσωρινοί καταχωρητές, συχνά χρησιμοποιούμενοι για τοπικές μεταβλητές. -4. **`x16`** και **`x17`** - **Καταχωρητές Ενδο-διαδικαστικής Κλήσης**. Προσωρινοί καταχωρητές για άμεσες τιμές. Χρησιμοποιούνται επίσης για έμμεσες κλήσεις συναρτήσεων και PLT (Πίνακας Σύνδεσης Διαδικασίας). +4. **`x16`** και **`x17`** - **Καταχωρητές Ενδο-διαδικαστικής Κλήσης**. Προσωρινοί καταχωρητές για άμεσες τιμές. Χρησιμοποιούνται επίσης για έμμεσες κλήσεις συναρτήσεων και PLT (Πίνακας Σύνδεσης Διαδικασίας) stubs. - **`x16`** χρησιμοποιείται ως **αριθμός κλήσης συστήματος** για την εντολή **`svc`** στο **macOS**. 5. **`x18`** - **Καταχωρητής πλατφόρμας**. Μπορεί να χρησιμοποιηθεί ως γενικός καταχωρητής, αλλά σε ορισμένες πλατφόρμες, αυτός ο καταχωρητής είναι δεσμευμένος για συγκεκριμένες χρήσεις πλατφόρμας: Δείκτης στο τρέχον περιβάλλον νήματος στη Windows, ή για να δείχνει στη δομή τρέχουσας **εκτελούμενης εργασίας στον πυρήνα linux**. 6. **`x19`** έως **`x28`** - Αυτοί είναι καταχωρητές που διατηρούνται από τον καλούμενο. Μια συνάρτηση πρέπει να διατηρεί τις τιμές αυτών των καταχωρητών για τον καλούντα, οπότε αποθηκεύονται στο στοίβα και ανακτώνται πριν επιστρέψουν στον καλούντα. @@ -41,7 +41,7 @@ 9. **`sp`** - **Δείκτης στοίβας**, χρησιμοποιείται για την παρακολούθηση της κορυφής της στοίβας. - Η τιμή **`sp`** θα πρέπει πάντα να διατηρείται τουλάχιστον σε **ευθυγράμμιση quadword** ή μπορεί να προκύψει εξαίρεση ευθυγράμμισης. 10. **`pc`** - **Μετρητής προγράμματος**, που δείχνει στην επόμενη εντολή. Αυτός ο καταχωρητής μπορεί να ενημερωθεί μόνο μέσω γενεών εξαιρέσεων, επιστροφών εξαιρέσεων και κλάδων. Οι μόνοι κανονικοί εντολές που μπορούν να διαβάσουν αυτόν τον καταχωρητή είναι οι εντολές κλάδου με σύνδεση (BL, BLR) για να αποθηκεύσουν τη διεύθυνση **`pc`** στο **`lr`** (Καταχωρητής Σύνδεσης). -11. **`xzr`** - **Καταχωρητής μηδέν**. Ονομάζεται επίσης **`wzr`** στην **32**-bit μορφή του. Μπορεί να χρησιμοποιηθεί για να αποκτήσει εύκολα την τιμή μηδέν (συνηθισμένη λειτουργία) ή για να εκτελέσει συγκρίσεις χρησιμοποιώντας **`subs`** όπως **`subs XZR, Xn, #10`** αποθηκεύοντας τα αποτελέσματα που προκύπτουν πουθενά (στο **`xzr`**). +11. **`xzr`** - **Καταχωρητής μηδέν**. Ονομάζεται επίσης **`wzr`** στην **32**-bit μορφή του. Μπορεί να χρησιμοποιηθεί για να αποκτήσει εύκολα την τιμή μηδέν (συνηθισμένη λειτουργία) ή για να εκτελέσει συγκρίσεις χρησιμοποιώντας **`subs`** όπως **`subs XZR, Xn, #10`** αποθηκεύοντας τα αποτελέσματα που δεν προορίζονται πουθενά (στο **`xzr`**). Οι καταχωρητές **`Wn`** είναι η **32bit** έκδοση του καταχωρητή **`Xn`**. @@ -62,7 +62,7 @@ ### **PSTATE** -**PSTATE** περιέχει αρκετά στοιχεία διαδικασίας σειριακά στο ορατό από το λειτουργικό σύστημα **`SPSR_ELx`** ειδικό καταχωρητή, όπου το X είναι το **επίπεδο άδειας** της ενεργοποιημένης εξαίρεσης (αυτό επιτρέπει την ανάκτηση της κατάστασης της διαδικασίας όταν τελειώνει η εξαίρεση).\ +**PSTATE** περιέχει αρκετά στοιχεία διαδικασίας σειριακά στο ορατό από το λειτουργικό σύστημα **`SPSR_ELx`** ειδικό καταχωρητή, όπου το X είναι το **επίπεδο άδειας** **της ενεργοποιημένης** εξαίρεσης (αυτό επιτρέπει την ανάκτηση της κατάστασης της διαδικασίας όταν τελειώνει η εξαίρεση).\ Αυτά είναι τα προσβάσιμα πεδία:
@@ -71,7 +71,7 @@ - **`N`** σημαίνει ότι η λειτουργία απέδωσε αρνητικό αποτέλεσμα - **`Z`** σημαίνει ότι η λειτουργία απέδωσε μηδέν - **`C`** σημαίνει ότι η λειτουργία είχε μεταφορά -- **`V`** σημαίνει ότι η λειτουργία απέδωσε υπερχείλιση υπογραφής: +- **`V`** σημαίνει ότι η λειτουργία απέδωσε υπερχείλιση υπογεγραμμένου: - Το άθροισμα δύο θετικών αριθμών αποδίδει αρνητικό αποτέλεσμα. - Το άθροισμα δύο αρνητικών αριθμών αποδίδει θετικό αποτέλεσμα. - Στην αφαίρεση, όταν αφαιρείται ένας μεγάλος αρνητικός αριθμός από έναν μικρό θετικό αριθμό (ή το αντίστροφο), και το αποτέλεσμα δεν μπορεί να αναπαρασταθεί εντός του εύρους του δεδομένου μεγέθους bit. @@ -86,7 +86,7 @@ - Η σημαία **κατάστασης παράνομης εξαίρεσης** (**`IL`**): Χρησιμοποιείται για να σημάνει πότε ένα προνομιακό λογισμικό εκτελεί μια μη έγκυρη μεταφορά επιπέδου εξαίρεσης, αυτή η σημαία ρυθμίζεται σε 1 και ο επεξεργαστής ενεργοποιεί μια εξαίρεση παράνομης κατάστασης. - Οι σημαίες **`DAIF`**: Αυτές οι σημαίες επιτρέπουν σε ένα προνομιακό πρόγραμμα να επιλέξει να αποκλείσει ορισμένες εξωτερικές εξαιρέσεις. - Εάν **`A`** είναι 1 σημαίνει ότι θα ενεργοποιηθούν **ασύγχρονοι τερματισμοί**. Η **`I`** ρυθμίζει την αντίδραση σε εξωτερικά αιτήματα διακοπής (IRQs). και το F σχετίζεται με **Γρήγορα Αιτήματα Διακοπής** (FIRs). -- Οι σημαίες επιλογής δείκτη στοίβας (**`SPS`**): Προνομιακά προγράμματα που εκτελούνται στο EL1 και άνω μπορούν να εναλλάσσουν τη χρήση του δικού τους καταχωρητή δείκτη στοίβας και του καταχωρητή μοντέλου χρήστη (π.χ. μεταξύ `SP_EL1` και `EL0`). Αυτή η εναλλαγή πραγματοποιείται γράφοντας στον ειδικό καταχωρητή **`SPSel`**. Αυτό δεν μπορεί να γίνει από το EL0. +- Οι σημαίες **επιλογής δείκτη στοίβας** (**`SPS`**): Προνομιακά προγράμματα που εκτελούνται στο EL1 και άνω μπορούν να εναλλάσσουν τη χρήση του δικού τους καταχωρητή δείκτη στοίβας και του καταχωρητή μοντέλου χρήστη (π.χ. μεταξύ `SP_EL1` και `EL0`). Αυτή η εναλλαγή πραγματοποιείται γράφοντας στον ειδικό καταχωρητή **`SPSel`**. Αυτό δεν μπορεί να γίνει από το EL0. ## **Σύμβαση Κλήσης (ARM64v8)** @@ -100,10 +100,10 @@ ## **Κοινές Εντολές (ARM64v8)** -Οι εντολές ARM64 γενικά έχουν τη **μορφή `opcode dst, src1, src2`**, όπου **`opcode`** είναι η **λειτουργία** που θα εκτελεστεί (όπως `add`, `sub`, `mov`, κ.λπ.), **`dst`** είναι ο **καταχωρητής προορισμού** όπου θα αποθηκευτεί το αποτέλεσμα, και **`src1`** και **`src2`** είναι οι **καταχωρητές πηγής**. Άμεσες τιμές μπορούν επίσης να χρησιμοποιηθούν αντί για καταχωρητές πηγής. +Οι εντολές ARM64 γενικά έχουν τη **μορφή `opcode dst, src1, src2`**, όπου **`opcode`** είναι η **λειτουργία** που θα εκτελεστεί (όπως `add`, `sub`, `mov`, κ.λπ.), **`dst`** είναι ο **καταχωρητής προορισμού** όπου θα αποθηκευτεί το αποτέλεσμα, και **`src1`** και **`src2`** είναι οι **καταχωρητές πηγής**. Οι άμεσες τιμές μπορούν επίσης να χρησιμοποιηθούν αντί για καταχωρητές πηγής. -- **`mov`**: **Μετακίνηση** μιας τιμής από έναν **καταχωρητή** σε έναν άλλο. -- Παράδειγμα: `mov x0, x1` — Αυτό μετακινεί την τιμή από `x1` στο `x0`. +- **`mov`**: **Μεταφορά** μιας τιμής από έναν **καταχωρητή** σε έναν άλλο. +- Παράδειγμα: `mov x0, x1` — Αυτό μεταφέρει την τιμή από το `x1` στο `x0`. - **`ldr`**: **Φόρτωση** μιας τιμής από **μνήμη** σε έναν **καταχωρητή**. - Παράδειγμα: `ldr x0, [x1]` — Αυτό φορτώνει μια τιμή από τη διεύθυνση μνήμης που υποδεικνύεται από το `x1` στο `x0`. - **Λειτουργία Offset**: Ένα offset που επηρεάζει τον αρχικό δείκτη υποδεικνύεται, για παράδειγμα: @@ -112,8 +112,8 @@ - **Προκαθορισμένη Λειτουργία**: Αυτό θα εφαρμόσει υπολογισμούς στον αρχικό δείκτη, θα πάρει το αποτέλεσμα και θα αποθηκεύσει επίσης τον νέο αρχικό δείκτη στον αρχικό δείκτη. - `ldr x2, [x1, #8]!`, αυτό θα φορτώσει το `x1 + 8` στο `x2` και θα αποθηκεύσει στο x1 το αποτέλεσμα του `x1 + 8` - `str lr, [sp, #-4]!`, Αποθήκευση του καταχωρητή σύνδεσης στο sp και ενημέρωση του καταχωρητή sp -- **Μετά την Καταχώρηση**: Αυτό είναι όπως η προηγούμενη αλλά η διεύθυνση μνήμης προσπελάζεται και στη συνέχεια υπολογίζεται και αποθηκεύεται το offset. -- `ldr x0, [x1], #8`, φορτώστε το `x1` στο `x0` και ενημερώστε το x1 με `x1 + 8` +- **Μετά την Εύρεση Λειτουργία**: Αυτό είναι όπως η προηγούμενη αλλά η διεύθυνση μνήμης προσπελάζεται και στη συνέχεια υπολογίζεται και αποθηκεύεται το offset. +- `ldr x0, [x1], #8`, φορτώνει το `x1` στο `x0` και ενημερώνει το x1 με `x1 + 8` - **Διεύθυνση Σχετική με το PC**: Σε αυτή την περίπτωση, η διεύθυνση που θα φορτωθεί υπολογίζεται σχετική με τον καταχωρητή PC - `ldr x1, =_start`, Αυτό θα φορτώσει τη διεύθυνση όπου ξεκινά το σύμβολο `_start` στο x1 σχετική με το τρέχον PC. - **`str`**: **Αποθήκευση** μιας τιμής από έναν **καταχωρητή** σε **μνήμη**. @@ -123,33 +123,32 @@ - **`stp`**: **Αποθήκευση Ζεύγους Καταχωρητών**. Αυτή η εντολή **αποθηκεύει δύο καταχωρητές** σε **διαδοχικές μνήμες**. Η διεύθυνση μνήμης σχηματίζεται συνήθως προσθέτοντας ένα offset στην τιμή ενός άλλου καταχωρητή. - Παράδειγμα: `stp x0, x1, [sp]` — Αυτό αποθηκεύει το `x0` και το `x1` στις διευθύνσεις μνήμης στο `sp` και `sp + 8`, αντίστοιχα. - `stp x0, x1, [sp, #16]!` — Αυτό αποθηκεύει το `x0` και το `x1` στις διευθύνσεις μνήμης στο `sp+16` και `sp + 24`, αντίστοιχα, και ενημερώνει το `sp` με `sp+16`. -- **`add`**: **Προσθέστε** τις τιμές δύο καταχωρητών και αποθηκεύστε το αποτέλεσμα σε έναν καταχωρητή. +- **`add`**: **Προσθέτει** τις τιμές δύο καταχωρητών και αποθηκεύει το αποτέλεσμα σε έναν καταχωρητή. - Σύνταξη: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] - Xn1 -> Προορισμός - Xn2 -> Λειτουργία 1 - Xn3 | #imm -> Λειτουργία 2 (καταχωρητής ή άμεσο) -- \[shift #N | RRX] -> Εκτελέστε μια μετατόπιση ή καλέστε RRX +- \[shift #N | RRX] -> Εκτέλεση μιας μετατόπισης ή κλήση RRX - Παράδειγμα: `add x0, x1, x2` — Αυτό προσθέτει τις τιμές στο `x1` και `x2` και αποθηκεύει το αποτέλεσμα στο `x0`. - `add x5, x5, #1, lsl #12` — Αυτό ισούται με 4096 (ένα 1 μετατοπισμένο 12 φορές) -> 1 0000 0000 0000 0000 - **`adds`** Αυτή εκτελεί μια `add` και ενημερώνει τις σημαίες -- **`sub`**: **Αφαιρέστε** τις τιμές δύο καταχωρητών και αποθηκεύστε το αποτέλεσμα σε έναν καταχωρητή. +- **`sub`**: **Αφαιρεί** τις τιμές δύο καταχωρητών και αποθηκεύει το αποτέλεσμα σε έναν καταχωρητή. - Ελέγξτε τη **σύνταξη `add`**. - Παράδειγμα: `sub x0, x1, x2` — Αυτό αφαιρεί την τιμή στο `x2` από το `x1` και αποθηκεύει το αποτέλεσμα στο `x0`. - **`subs`** Αυτό είναι όπως το sub αλλά ενημερώνει τη σημαία -- **`mul`**: **Πολλαπλασιάστε** τις τιμές **δύο καταχωρητών** και αποθηκεύστε το αποτέλεσμα σε έναν καταχωρητή. +- **`mul`**: **Πολλαπλασιάζει** τις τιμές **δύο καταχωρητών** και αποθηκεύει το αποτέλεσμα σε έναν καταχωρητή. - Παράδειγμα: `mul x0, x1, x2` — Αυτό πολλαπλασιάζει τις τιμές στο `x1` και `x2` και αποθηκεύει το αποτέλεσμα στο `x0`. -- **`div`**: **Διαιρέστε** την τιμή ενός καταχωρητή με έναν άλλο και αποθηκεύστε το αποτέλεσμα σε έναν καταχωρητή. +- **`div`**: **Διαιρεί** την τιμή ενός καταχωρητή με έναν άλλο και αποθηκεύει το αποτέλεσμα σε έναν καταχωρητή. - Παράδειγμα: `div x0, x1, x2` — Αυτό διαιρεί την τιμή στο `x1` με το `x2` και αποθηκεύει το αποτέλεσμα στο `x0`. - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: -- **Λογική μετατόπιση αριστερά**: Προσθέστε 0s από το τέλος μετακινώντας τα άλλα bits προς τα εμπρός (πολλαπλασιάστε με n-φορές 2) -- **Λογική μετατόπιση δεξιά**: Προσθέστε 1s στην αρχή μετακινώντας τα άλλα bits προς τα πίσω (διαιρέστε με n-φορές 2 σε μη υπογεγραμμένα) -- **Αριθμητική μετατόπιση δεξιά**: Όπως **`lsr`**, αλλά αντί να προσθέσετε 0s αν το πιο σημαντικό bit είναι 1, **προστίθενται 1s** (διαιρέστε με n-φορές 2 σε υπογεγραμμένα) -- **Μετατόπιση δεξιά**: Όπως **`lsr`** αλλά ό,τι αφαιρείται από τα δεξιά προστίθεται στα αριστερά -- **Μετατόπιση Δεξιά με Επέκταση**: Όπως **`ror`**, αλλά με τη σημαία μεταφοράς ως "πιο σημαντικό bit". Έτσι η σημαία μεταφοράς μετακινείται στο bit 31 και το αφαιρεθέν bit στη σημαία μεταφοράς. -- **`bfm`**: **Μετακίνηση Bit Filed**, αυτές οι λειτουργίες **αντιγράφουν bits `0...n`** από μια τιμή και τα τοποθετούν σε θέσεις **`m..m+n`**. Το **`#s`** καθορίζει τη **θέση του αριστερού bit** και το **`#r`** την **ποσότητα μετατόπισης δεξιά**. -- Μετακίνηση bitfiled: `BFM Xd, Xn, #r` -- Υπογεγραμμένη μετακίνηση bitfield: `SBFM Xd, Xn, #r, #s` -- Μη υπογεγραμμένη μετακίνηση bitfield: `UBFM Xd, Xn, #r, #s` +- **Λογική μετατόπιση αριστερά**: Προσθέτει 0s από το τέλος μετακινώντας τα άλλα bits προς τα εμπρός (πολλαπλασιάζει με n-φορές 2) +- **Λογική μετατόπιση δεξιά**: Προσθέτει 1s στην αρχή μετακινώντας τα άλλα bits προς τα πίσω (διαιρεί με n-φορές 2 σε μη υπογεγραμμένα) +- **Αριθμητική μετατόπιση δεξιά**: Όπως **`lsr`**, αλλά αντί να προσθέτει 0s αν το πιο σημαντικό bit είναι 1, προστίθενται **1s** (διαιρεί με n-φορές 2 σε υπογεγραμμένα) +- **Μετατόπιση δεξιά με επέκταση**: Όπως **`ror`**, αλλά με τη σημαία μεταφοράς ως "το πιο σημαντικό bit". Έτσι, η σημαία μεταφοράς μετακινείται στο bit 31 και το αφαιρεθέν bit στη σημαία μεταφοράς. +- **`bfm`**: **Μεταφορά Bit Filed**, αυτές οι λειτουργίες **αντιγράφουν bits `0...n`** από μια τιμή και τα τοποθετούν σε θέσεις **`m..m+n`**. Το **`#s`** καθορίζει τη **θέση του αριστερού bit** και το **`#r`** την **ποσότητα μετατόπισης δεξιά**. +- Μεταφορά bitfiled: `BFM Xd, Xn, #r` +- Υπογεγραμμένη μεταφορά bitfield: `SBFM Xd, Xn, #r, #s` +- Μη υπογεγραμμένη μεταφορά bitfield: `UBFM Xd, Xn, #r, #s` - **Εξαγωγή και Εισαγωγή Bitfield:** Αντιγράφει ένα bitfield από έναν καταχωρητή και το αντιγράφει σε έναν άλλο καταχωρητή. - **`BFI X1, X2, #3, #4`** Εισάγει 4 bits από το X2 από το 3ο bit του X1 - **`BFXIL X1, X2, #3, #4`** Εξάγει από το 3ο bit του X2 τέσσερα bits και τα αντιγράφει στο X1 @@ -157,21 +156,21 @@ - **`SBFX X1, X2, #3, #4`** Εξάγει 4 bits ξεκινώντας από το bit 3 από το X2, επεκτείνει το σήμα τους και τοποθετεί το αποτέλεσμα στο X1 - **`UBFIZ X1, X2, #3, #4`** Μηδενίζει 4 bits από το X2 και τα εισάγει στο X1 ξεκινώντας από τη θέση bit 3 μηδενίζοντας τα δεξιά bits - **`UBFX X1, X2, #3, #4`** Εξάγει 4 bits ξεκινώντας από το bit 3 από το X2 και τοποθετεί το μηδενισμένο αποτέλεσμα στο X1. -- **Επέκταση Σημασίας σε X:** Επεκτείνει το σήμα (ή προσθέτει απλώς 0s στην μη υπογεγραμμένη έκδοση) μιας τιμής για να μπορέσει να εκτελέσει λειτουργίες με αυτήν: +- **Επέκταση Σημασίας σε X:** Επεκτείνει το σήμα (ή προσθέτει απλώς 0s στην μη υπογεγραμμένη έκδοση) μιας τιμής για να μπορεί να εκτελεί λειτουργίες με αυτήν: - **`SXTB X1, W2`** Επεκτείνει το σήμα ενός byte **από W2 σε X1** (`W2` είναι το μισό του `X2`) για να γεμίσει τα 64bits -- **`SXTH X1, W2`** Επεκτείνει το σήμα ενός αριθμού 16bit **από W2 σε X1** για να γεμίσει τα 64bits +- **`SXTH X1, W2`** Επεκτείνει το σήμα ενός 16bit αριθμού **από W2 σε X1** για να γεμίσει τα 64bits - **`SXTW X1, W2`** Επεκτείνει το σήμα ενός byte **από W2 σε X1** για να γεμίσει τα 64bits - **`UXTB X1, W2`** Προσθέτει 0s (μη υπογεγραμμένα) σε ένα byte **από W2 σε X1** για να γεμίσει τα 64bits - **`extr`:** Εξάγει bits από ένα καθορισμένο **ζεύγος καταχωρητών που συνδυάζονται**. - Παράδειγμα: `EXTR W3, W2, W1, #3` Αυτό θα **συνδυάσει W1+W2** και θα πάρει **από το bit 3 του W2 έως το bit 3 του W1** και θα το αποθηκεύσει στο W3. -- **`cmp`**: **Συγκρίνετε** δύο καταχωρητές και ρυθμίστε τις σημαίες συνθηκών. Είναι ένα **ψευδώνυμο του `subs`** ρυθμίζοντας τον καταχωρητή προορισμού στο μηδενικό καταχωρητή. Χρήσιμο για να γνωρίζετε αν `m == n`. +- **`cmp`**: **Συγκρίνει** δύο καταχωρητές και ρυθμίζει τις σημαίες συνθηκών. Είναι ένα **ψευδώνυμο του `subs`** ρυθμίζοντας τον καταχωρητή προορισμού στο μηδενικό καταχωρητή. Χρήσιμο για να γνωρίζετε αν `m == n`. - Υποστηρίζει την **ίδια σύνταξη με `subs`** - Παράδειγμα: `cmp x0, x1` — Αυτό συγκρίνει τις τιμές στο `x0` και `x1` και ρυθμίζει τις σημαίες συνθηκών αναλόγως. -- **`cmn`**: **Συγκρίνετε αρνητική** παράμετρο. Σε αυτή την περίπτωση είναι ένα **ψευδώνυμο του `adds`** και υποστηρίζει την ίδια σύνταξη. Χρήσιμο για να γνωρίζετε αν `m == -n`. +- **`cmn`**: **Συγκρίνει αρνητική** παράμετρο. Σε αυτή την περίπτωση είναι ένα **ψευδώνυμο του `adds`** και υποστηρίζει την ίδια σύνταξη. Χρήσιμο για να γνωρίζετε αν `m == -n`. - **`ccmp`**: Συνθήκη σύγκρισης, είναι μια σύγκριση που θα εκτελείται μόνο αν μια προηγούμενη σύγκριση ήταν αληθής και θα ρυθμίσει συγκεκριμένα τα bits nzcv. - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> αν x1 != x2 και x3 < x4, πηγαίνετε στη func - Αυτό συμβαίνει επειδή **`ccmp`** θα εκτελείται μόνο αν η **προηγούμενη `cmp` ήταν `NE`**, αν δεν ήταν τα bits `nzcv` θα ρυθμιστούν σε 0 (που δεν θα ικανοποιήσει τη σύγκριση `blt`). -- Αυτό μπορεί επίσης να χρησιμοποιηθεί ως `ccmn` (ίδιο αλλά αρνητικό, όπως `cmp` έναντι `cmn`). +- Αυτό μπορεί επίσης να χρησιμοποιηθεί ως `ccmn` (το ίδιο αλλά αρνητικό, όπως `cmp` έναντι `cmn`). - **`tst`**: Ελέγχει αν οποιαδήποτε από τις τιμές της σύγκρισης είναι και οι δύο 1 (λειτουργεί όπως και το ANDS χωρίς να αποθηκεύει το αποτέλεσμα οπουδήποτε). Είναι χρήσιμο για να ελέγξετε έναν καταχωρητή με μια τιμή και να δείτε αν οποιοδήποτε από τα bits του καταχωρητή που υποδεικνύεται στην τιμή είναι 1. - Παράδειγμα: `tst X1, #7` Ελέγξτε αν οποιοδήποτε από τα τελευταία 3 bits του X1 είναι 1 - **`teq`**: Λειτουργία XOR απορρίπτοντας το αποτέλεσμα @@ -186,14 +185,14 @@ - **`ret`**: **Επιστροφή** από **υπορουτίνα**, συνήθως χρησιμοποιώντας τη διεύθυνση στο **`x30`**. - Παράδειγμα: `ret` — Αυτό επιστρέφει από την τρέχουσα υπορουτίνα χρησιμοποιώντας τη διεύθυνση επιστροφής στο `x30`. - **`b.`**: Συνθήκες κλάδου -- **`b.eq`**: **Κλάδος αν ίσο**, βασισμένος στην προηγούμενη εντολή `cmp`. -- Παράδειγμα: `b.eq label` — Εάν η προηγούμενη εντολή `cmp` βρήκε δύο ίσες τιμές, αυτό πηγαίνει στην `label`. +- **`b.eq`**: **Κλάδος αν ίσο**, βασισμένο στην προηγούμενη εντολή `cmp`. +- Παράδειγμα: `b.eq label` — Εάν η προηγούμενη εντολή `cmp` βρήκε δύο ίσες τιμές, αυτό πηγαίνει στο `label`. - **`b.ne`**: **Κλάδος αν Όχι Ίσο**. Αυτή η εντολή ελέγχει τις σημαίες συνθηκών (οι οποίες ρυθμίστηκαν από μια προηγούμενη εντολή σύγκρισης), και αν οι συγκρινόμενες τιμές δεν ήταν ίσες, κλάδος σε μια ετικέτα ή διεύθυνση. -- Παράδειγμα: Μετά από μια εντολή `cmp x0, x1`, `b.ne label` — Εάν οι τιμές στο `x0` και `x1` δεν ήταν ίσες, αυτό πηγαίνει στην `label`. -- **`cbz`**: **Συγκρίνετε και Κλάδος σε Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν, και αν είναι ίσοι, κλάδος σε μια ετικέτα ή διεύθυνση. -- Παράδειγμα: `cbz x0, label` — Εάν η τιμή στο `x0` είναι μηδέν, αυτό πηγαίνει στην `label`. -- **`cbnz`**: **Συγκρίνετε και Κλάδος σε Μη Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν, και αν δεν είναι ίσοι, κλάδος σε μια ετικέτα ή διεύθυνση. -- Παράδειγμα: `cbnz x0, label` — Εάν η τιμή στο `x0` είναι μη μηδέν, αυτό πηγαίνει στην `label`. +- Παράδειγμα: Μετά από μια εντολή `cmp x0, x1`, `b.ne label` — Εάν οι τιμές στο `x0` και `x1` δεν ήταν ίσες, αυτό πηγαίνει στο `label`. +- **`cbz`**: **Σύγκριση και Κλάδος στο Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν, και αν είναι ίσοι, κλάδος σε μια ετικέτα ή διεύθυνση. +- Παράδειγμα: `cbz x0, label` — Εάν η τιμή στο `x0` είναι μηδέν, αυτό πηγαίνει στο `label`. +- **`cbnz`**: **Σύγκριση και Κλάδος σε Μη Μηδέν**. Αυτή η εντολή συγκρίνει έναν καταχωρητή με το μηδέν, και αν δεν είναι ίσοι, κλάδος σε μια ετικέτα ή διεύθυνση. +- Παράδειγμα: `cbnz x0, label` — Εάν η τιμή στο `x0` είναι μη μηδέν, αυτό πηγαίνει στο `label`. - **`tbnz`**: Δοκιμή bit και κλάδος σε μη μηδέν - Παράδειγμα: `tbnz x0, #8, label` - **`tbz`**: Δοκιμή bit και κλάδος σε μηδέν @@ -226,7 +225,7 @@ svc 0 ; Κάντε την κλήση συστήματος. ### **Πρόλογος Συνάρτησης** -1. **Αποθηκεύστε τον καταχωρητή σύνδεσης και τον δείκτη πλαισίου στο στοίβα**: +1. **Αποθήκευση του καταχωρητή σύνδεσης και του δείκτη πλαισίου στο στοίβα**: ```armasm stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement the stack pointer ``` @@ -244,12 +243,12 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th ## AARCH32 Κατάσταση Εκτέλεσης -Το Armv8-A υποστηρίζει την εκτέλεση 32-bit προγραμμάτων. **AArch32** μπορεί να εκτελείται σε ένα από **δύο σύνολα εντολών**: **`A32`** και **`T32`** και μπορεί να αλλάξει μεταξύ τους μέσω **`interworking`**.\ +Armv8-A υποστηρίζει την εκτέλεση 32-bit προγραμμάτων. **AArch32** μπορεί να εκτελείται σε ένα από **δύο σύνολα εντολών**: **`A32`** και **`T32`** και μπορεί να αλλάξει μεταξύ τους μέσω **`interworking`**.\ **Προνομιακά** 64-bit προγράμματα μπορούν να προγραμματίσουν την **εκτέλεση 32-bit** προγραμμάτων εκτελώντας μια μεταφορά επιπέδου εξαίρεσης σε χαμηλότερο προνομιακό 32-bit.\ Σημειώστε ότι η μετάβαση από 64-bit σε 32-bit συμβαίνει με χαμηλότερο επίπεδο εξαίρεσης (για παράδειγμα, ένα 64-bit πρόγραμμα σε EL1 που ενεργοποιεί ένα πρόγραμμα σε EL0). Αυτό γίνεται ρυθμίζοντας το **bit 4 του** **`SPSR_ELx`** ειδικού καταχωρητή **σε 1** όταν το νήμα διαδικασίας `AArch32` είναι έτοιμο να εκτελεστεί και το υπόλοιπο του `SPSR_ELx` αποθηκεύει το **`AArch32`** CPSR. Στη συνέχεια, η προνομιακή διαδικασία καλεί την εντολή **`ERET`** ώστε ο επεξεργαστής να μεταβεί σε **`AArch32`** εισερχόμενος σε A32 ή T32 ανάλογα με το CPSR\*\*.\*\* Η **`interworking`** συμβαίνει χρησιμοποιώντας τα bits J και T του CPSR. `J=0` και `T=0` σημαίνει **`A32`** και `J=0` και `T=1` σημαίνει **T32**. Αυτό βασικά μεταφράζεται σε ρύθμιση του **χαμηλότερου bit σε 1** για να υποδείξει ότι το σύνολο εντολών είναι T32.\ -Αυτό ρυθμίζεται κατά τη διάρκεια των **εντολών διακλάδωσης interworking,** αλλά μπορεί επίσης να ρυθμιστεί άμεσα με άλλες εντολές όταν το PC ρυθμίζεται ως ο καταχωρητής προορισμού. Παράδειγμα: +Αυτό ρυθμίζεται κατά τη διάρκεια των **εντολών κλάδου interworking,** αλλά μπορεί επίσης να ρυθμιστεί άμεσα με άλλες εντολές όταν το PC ρυθμίζεται ως ο καταχωρητής προορισμού. Παράδειγμα: Ένα άλλο παράδειγμα: ```armasm @@ -272,7 +271,7 @@ mov r0, #8 - **`r13`**: Δείκτης στοίβας - **`r14`**: Καταχωρητής σύνδεσης -Επιπλέον, οι καταχωρητές αποθηκεύονται σε **`banked registries`**. Αυτά είναι μέρη που αποθηκεύουν τις τιμές των καταχωρητών επιτρέποντας την **γρήγορη εναλλαγή πλαισίου** στη διαχείριση εξαιρέσεων και σε προνομιακές λειτουργίες για να αποφευχθεί η ανάγκη να αποθηκεύονται και να επαναφέρονται οι καταχωρητές κάθε φορά.\ +Επιπλέον, οι καταχωρητές αποθηκεύονται σε **`banked registries`**. Αυτά είναι μέρη που αποθηκεύουν τις τιμές των καταχωρητών επιτρέποντας την **γρήγορη εναλλαγή πλαισίου** στη διαχείριση εξαιρέσεων και σε προνομιακές λειτουργίες για να αποφευχθεί η ανάγκη να αποθηκεύονται και να επαναφέρονται οι καταχωρητές χειροκίνητα κάθε φορά.\ Αυτό γίνεται με **την αποθήκευση της κατάστασης του επεξεργαστή από το `CPSR` στο `SPSR`** της λειτουργίας του επεξεργαστή στην οποία λαμβάνεται η εξαίρεση. Κατά την επιστροφή από την εξαίρεση, το **`CPSR`** επαναφέρεται από το **`SPSR`**. ### CPSR - Current Program Status Register @@ -292,7 +291,7 @@ mov r0, #8 - Η σημαία **`Q`**: Ρυθμίζεται σε 1 όποτε **συμβαίνει κορεσμός ακέραιων αριθμών** κατά την εκτέλεση μιας εξειδικευμένης εντολής αριθμητικής κορεσμού. Μόλις ρυθμιστεί σε **`1`**, θα διατηρήσει την τιμή μέχρι να ρυθμιστεί χειροκίνητα σε 0. Επιπλέον, δεν υπάρχει καμία εντολή που να ελέγχει την τιμή της έμμεσα, πρέπει να γίνει διαβάζοντάς την χειροκίνητα. - Οι σημαίες **`GE`** (Μεγαλύτερο ή ίσο): Χρησιμοποιούνται σε SIMD (Single Instruction, Multiple Data) λειτουργίες, όπως "παράλληλη πρόσθεση" και "παράλληλη αφαίρεση". Αυτές οι λειτουργίες επιτρέπουν την επεξεργασία πολλαπλών σημείων δεδομένων σε μία μόνο εντολή. -Για παράδειγμα, η εντολή **`UADD8`** **προσθέτει τέσσερις ζεύγους byte** (από δύο 32-bit operands) παράλληλα και αποθηκεύει τα αποτελέσματα σε έναν 32-bit καταχωρητή. Στη συνέχεια **ρυθμίζει τις σημαίες `GE` στο `APSR`** με βάση αυτά τα αποτελέσματα. Κάθε σημαία GE αντιστοιχεί σε μία από τις προσθέσεις byte, υποδεικνύοντας αν η πρόσθεση για αυτό το ζεύγος byte **υπερχειλίζει**. +Για παράδειγμα, η εντολή **`UADD8`** **προσθέτει τέσσερις ζεύξεις byte** (από δύο 32-bit operands) παράλληλα και αποθηκεύει τα αποτελέσματα σε έναν 32-bit καταχωρητή. Στη συνέχεια **ρυθμίζει τις σημαίες `GE` στο `APSR`** με βάση αυτά τα αποτελέσματα. Κάθε σημαία GE αντιστοιχεί σε μία από τις προσθέσεις byte, υποδεικνύοντας αν η πρόσθεση για εκείνο το ζεύγος byte **υπερχειλίζει**. Η εντολή **`SEL`** χρησιμοποιεί αυτές τις σημαίες GE για να εκτελέσει συνθήκες. @@ -301,11 +300,11 @@ mov r0, #8 - Τα bits **`J`** και **`T`**: **`J`** πρέπει να είναι 0 και αν **`T`** είναι 0 χρησιμοποιείται το σύνολο εντολών A32, και αν είναι 1, χρησιμοποιείται το T32. - **IT Block State Register** (`ITSTATE`): Αυτά είναι τα bits από 10-15 και 25-26. Αποθηκεύουν συνθήκες για εντολές μέσα σε μια ομάδα με πρόθεμα **`IT`**. - Το bit **`E`**: Υποδεικνύει την **endianness**. -- **Bits Μάσκας Λειτουργίας και Εξαίρεσης** (0-4): Καθορίζουν την τρέχουσα κατάσταση εκτέλεσης. Το **5ο** υποδεικνύει αν το πρόγραμμα εκτελείται ως 32bit (ένα 1) ή 64bit (ένα 0). Τα άλλα 4 αντιπροσωπεύουν την **τρέχουσα κατάσταση εξαίρεσης** (όταν συμβαίνει μια εξαίρεση και διαχειρίζεται). Ο αριθμός που έχει ρυθμιστεί **υποδεικνύει την τρέχουσα προτεραιότητα** σε περίπτωση που προκληθεί άλλη εξαίρεση ενώ αυτή διαχειρίζεται. +- **Bits Μάσκας Λειτουργίας και Εξαίρεσης** (0-4): Καθορίζουν την τρέχουσα κατάσταση εκτέλεσης. Το **5ο** υποδεικνύει αν το πρόγραμμα εκτελείται ως 32bit (ένα 1) ή 64bit (ένα 0). Τα άλλα 4 αντιπροσωπεύουν τη **λειτουργία εξαίρεσης που χρησιμοποιείται αυτή τη στιγμή** (όταν συμβαίνει μια εξαίρεση και διαχειρίζεται). Ο αριθμός που έχει ρυθμιστεί **υποδεικνύει την τρέχουσα προτεραιότητα** σε περίπτωση που προκληθεί άλλη εξαίρεση ενώ αυτή διαχειρίζεται.
-- **`AIF`**: Ορισμένες εξαιρέσεις μπορούν να απενεργοποιηθούν χρησιμοποιώντας τα bits **`A`**, `I`, `F`. Αν **`A`** είναι 1 σημαίνει ότι θα προκληθούν **ασύγχρονοι τερματισμοί**. Το **`I`** ρυθμίζει την αντίδραση σε εξωτερικά αιτήματα διακοπής **Interrupts Requests** (IRQs). και το F σχετίζεται με **Fast Interrupt Requests** (FIRs). +- **`AIF`**: Ορισμένες εξαιρέσεις μπορούν να απενεργοποιηθούν χρησιμοποιώντας τα bits **`A`**, `I`, `F`. Αν **`A`** είναι 1 σημαίνει ότι θα προκληθούν **ασύγχρονοι τερματισμοί**. Το **`I`** ρυθμίζει την αντίδραση σε εξωτερικά αιτήματα διακοπής υλικού **Interrupts Requests** (IRQs). και το F σχετίζεται με **Fast Interrupt Requests** (FIRs). ## macOS @@ -336,13 +335,13 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar ### comm page -Αυτή είναι μια σελίδα μνήμης που ανήκει στον πυρήνα και είναι χαρτογραφημένη στο χώρο διευθύνσεων κάθε διεργασίας χρήστη. Σκοπός της είναι να διευκολύνει τη μετάβαση από τη λειτουργία χρήστη στον χώρο του πυρήνα πιο γρήγορα από τη χρήση syscalls για υπηρεσίες πυρήνα που χρησιμοποιούνται τόσο πολύ ώστε αυτή η μετάβαση θα ήταν πολύ αναποτελεσματική. +Αυτή είναι μια σελίδα μνήμης που ανήκει στον πυρήνα και είναι χαρτογραφημένη στο διευθυνσιολόγιο κάθε διεργασίας χρήστη. Σκοπός της είναι να επιταχύνει τη μετάβαση από τη λειτουργία χρήστη στον χώρο του πυρήνα σε σχέση με τη χρήση syscalls για υπηρεσίες πυρήνα που χρησιμοποιούνται τόσο πολύ ώστε αυτή η μετάβαση θα ήταν πολύ αναποτελεσματική. Για παράδειγμα, η κλήση `gettimeofdate` διαβάζει την τιμή του `timeval` απευθείας από τη σελίδα comm. ### objc_msgSend -Είναι πολύ συνηθισμένο να βρείτε αυτή τη λειτουργία να χρησιμοποιείται σε προγράμματα Objective-C ή Swift. Αυτή η λειτουργία επιτρέπει την κλήση μιας μεθόδου ενός αντικειμένου Objective-C. +Είναι πολύ συνηθισμένο να βρείτε αυτή τη συνάρτηση να χρησιμοποιείται σε προγράμματα Objective-C ή Swift. Αυτή η συνάρτηση επιτρέπει την κλήση μιας μεθόδου ενός αντικειμένου Objective-C. Παράμετροι ([περισσότερες πληροφορίες στα docs](https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend)): @@ -350,7 +349,7 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar - x1: op -> Επιλογέας της μεθόδου - x2... -> Υπόλοιπες παράμετροι της καλούμενης μεθόδου -Έτσι, αν βάλετε σημείο διακοπής πριν από τον κλάδο σε αυτή τη λειτουργία, μπορείτε εύκολα να βρείτε τι καλείται στο lldb με (σε αυτό το παράδειγμα το αντικείμενο καλεί ένα αντικείμενο από το `NSConcreteTask` που θα εκτελέσει μια εντολή): +Έτσι, αν βάλετε σημείο διακοπής πριν από τον κλάδο σε αυτή τη συνάρτηση, μπορείτε εύκολα να βρείτε τι καλείται στο lldb με (σε αυτό το παράδειγμα το αντικείμενο καλεί ένα αντικείμενο από το `NSConcreteTask` που θα εκτελέσει μια εντολή): ```bash # Right in the line were objc_msgSend will be called (lldb) po $x0 @@ -371,23 +370,23 @@ whoami > [!TIP] > Ρυθμίζοντας τη μεταβλητή env **`NSObjCMessageLoggingEnabled=1`** είναι δυνατή η καταγραφή όταν καλείται αυτή η συνάρτηση σε ένα αρχείο όπως το `/tmp/msgSends-pid`. > -> Επιπλέον, ρυθμίζοντας **`OBJC_HELP=1`** και καλώντας οποιοδήποτε δυαδικό, μπορείτε να δείτε άλλες μεταβλητές περιβάλλοντος που θα μπορούσατε να χρησιμοποιήσετε για να **log** όταν συμβαίνουν ορισμένες ενέργειες Objc-C. +> Επιπλέον, ρυθμίζοντας **`OBJC_HELP=1`** και καλώντας οποιοδήποτε δυαδικό μπορείτε να δείτε άλλες μεταβλητές περιβάλλοντος που θα μπορούσατε να χρησιμοποιήσετε για να **log** όταν συμβαίνουν ορισμένες ενέργειες Objc-C. -Όταν καλείται αυτή η συνάρτηση, είναι απαραίτητο να βρείτε τη μέθοδο που καλείται από την υποδεικνυόμενη παρουσία, για αυτό γίνονται διαφορετικές αναζητήσεις: +Όταν καλείται αυτή η συνάρτηση, είναι απαραίτητο να βρείτε τη μέθοδο που καλείται της υποδεικνυόμενης παρουσίας, για αυτό γίνονται διαφορετικές αναζητήσεις: - Εκτέλεση αισιόδοξης αναζήτησης cache: -- Αν είναι επιτυχής, ολοκληρώθηκε +- Αν είναι επιτυχής, τελειώσαμε - Απόκτηση runtimeLock (ανάγνωση) - Αν (realize && !cls->realized) πραγματοποιήστε την πραγματοποίηση της κλάσης - Αν (initialize && !cls->initialized) πραγματοποιήστε την αρχικοποίηση της κλάσης - Δοκιμάστε την cache της κλάσης: -- Αν είναι επιτυχής, ολοκληρώθηκε +- Αν είναι επιτυχής, τελειώσαμε - Δοκιμάστε τη λίστα μεθόδων της κλάσης: -- Αν βρεθεί, γεμίστε την cache και ολοκληρώθηκε +- Αν βρεθεί, γεμίστε την cache και τελειώσαμε - Δοκιμάστε την cache της υπερκλάσης: -- Αν είναι επιτυχής, ολοκληρώθηκε +- Αν είναι επιτυχής, τελειώσαμε - Δοκιμάστε τη λίστα μεθόδων της υπερκλάσης: -- Αν βρεθεί, γεμίστε την cache και ολοκληρώθηκε +- Αν βρεθεί, γεμίστε την cache και τελειώσαμε - Αν (resolver) δοκιμάστε τον επιλυτή μεθόδων και επαναλάβετε από την αναζήτηση κλάσης - Αν είστε ακόμα εδώ (= όλα τα άλλα έχουν αποτύχει) δοκιμάστε τον προωθητή @@ -417,7 +416,7 @@ done ```
-Κώδικας C για τη δοκιμή του shellcode +Κώδικας C για να δοκιμάσετε το shellcode ```c // code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/loader.c // gcc loader.c -o loader @@ -565,7 +564,7 @@ cat_path: .asciz "/bin/cat" .align 2 passwd_path: .asciz "/etc/passwd" ``` -#### Καλέστε την εντολή με sh από ένα fork ώστε η κύρια διαδικασία να μην τερματιστεί +#### Εκτέλεση εντολής με sh από ένα fork ώστε η κύρια διαδικασία να μην τερματιστεί ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main @@ -693,7 +692,7 @@ mov x2, xzr mov x16, #59 svc #0x1337 ``` -#### Αντίστροφη θήκη +#### Reverse shell Από [https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/reverseshell.s](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/reverseshell.s), revshell σε **127.0.0.1:4444** ```armasm 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 4f18bcb6d..212fa5364 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** -x64, γνωστό και ως x86-64, είναι μια αρχιτεκτονική επεξεργαστή 64-bit που χρησιμοποιείται κυρίως σε υπολογιστές επιτραπέζιους και διακομιστές. Προέρχεται από την αρχιτεκτονική x86 που παράγεται από την Intel και αργότερα υιοθετήθηκε από την AMD με την ονομασία AMD64, είναι η κυρίαρχη αρχιτεκτονική στους προσωπικούς υπολογιστές και τους διακομιστές σήμερα. +x64, γνωστός και ως x86-64, είναι μια αρχιτεκτονική επεξεργαστή 64-bit που χρησιμοποιείται κυρίως σε υπολογιστές επιτραπέζιους και διακομιστές. Προέρχεται από την αρχιτεκτονική x86 που παράγεται από την Intel και αργότερα υιοθετήθηκε από την AMD με την ονομασία AMD64, είναι η κυρίαρχη αρχιτεκτονική στους προσωπικούς υπολογιστές και τους διακομιστές σήμερα. ### **Καταχωρητές** @@ -14,7 +14,7 @@ x64 επεκτείνει την αρχιτεκτονική x86, διαθέτον 2. **`rbx`** - Συχνά χρησιμοποιείται ως **βασικός καταχωρητής** για λειτουργίες μνήμης. 3. **`rcx`** - Συνήθως χρησιμοποιείται για **μετρητές βρόχων**. 4. **`rdx`** - Χρησιμοποιείται σε διάφορους ρόλους, συμπεριλαμβανομένων των επεκταμένων αριθμητικών λειτουργιών. -5. **`rbp`** - **Βασικός δείκτης** για το πλαίσιο στοίβας. +5. **`rbp`** - **Βασικός δείκτης** για το πλαίσιο της στοίβας. 6. **`rsp`** - **Δείκτης στοίβας**, παρακολουθεί την κορυφή της στοίβας. 7. **`rsi`** και **`rdi`** - Χρησιμοποιούνται για **δείκτες πηγής** και **προορισμού** σε λειτουργίες συμβολοσειρών/μνήμης. 8. **`r8`** έως **`r15`** - Πρόσθετοι γενικοί καταχωρητές που εισήχθησαν στο x64. @@ -26,7 +26,7 @@ x64 επεκτείνει την αρχιτεκτονική x86, διαθέτον - **Windows**: Οι πρώτες **τέσσερις παραμέτρους** μεταφέρονται στους καταχωρητές **`rcx`**, **`rdx`**, **`r8`**, και **`r9`**. Οι περαιτέρω παράμετροι τοποθετούνται στη στοίβα. Η τιμή επιστροφής είναι στον **`rax`**. - **System V (συνήθως χρησιμοποιούμενη σε συστήματα τύπου UNIX)**: Οι πρώτες **έξι παραμέτρους ακέραιων ή δεικτών** μεταφέρονται στους καταχωρητές **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`**, και **`r9`**. Η τιμή επιστροφής είναι επίσης στον **`rax`**. -Εάν η συνάρτηση έχει περισσότερες από έξι εισόδους, οι **υπόλοιπες θα μεταφερθούν στη στοίβα**. **RSP**, ο δείκτης στοίβας, πρέπει να είναι **ευθυγραμμισμένος 16 bytes**, που σημαίνει ότι η διεύθυνση στην οποία δείχνει πρέπει να είναι διαιρετή με το 16 πριν από οποιαδήποτε κλήση. Αυτό σημαίνει ότι κανονικά θα πρέπει να διασφαλίσουμε ότι το RSP είναι σωστά ευθυγραμμισμένο στον κώδικα μας πριν κάνουμε μια κλήση συνάρτησης. Ωστόσο, στην πράξη, οι κλήσεις συστήματος λειτουργούν πολλές φορές ακόμη και αν αυτή η απαίτηση δεν πληρούται. +Αν η συνάρτηση έχει περισσότερες από έξι εισόδους, οι **υπόλοιπες θα μεταφερθούν στη στοίβα**. **RSP**, ο δείκτης στοίβας, πρέπει να είναι **ευθυγραμμισμένος σε 16 bytes**, που σημαίνει ότι η διεύθυνση στην οποία δείχνει πρέπει να είναι διαιρετή του 16 πριν από οποιαδήποτε κλήση. Αυτό σημαίνει ότι κανονικά θα πρέπει να διασφαλίσουμε ότι το RSP είναι σωστά ευθυγραμμισμένο στον κώδικα μας πριν κάνουμε μια κλήση συνάρτησης. Ωστόσο, στην πράξη, οι κλήσεις συστήματος λειτουργούν πολλές φορές ακόμη και αν αυτή η απαίτηση δεν πληρούται. ### Σύμβαση Κλήσης στο Swift @@ -49,7 +49,7 @@ x64 επεκτείνει την αρχιτεκτονική x86, διαθέτον - **`cmp`**: **Συγκρίνει** δύο τιμές και ρυθμίζει τις σημαίες της CPU με βάση το αποτέλεσμα. - Παράδειγμα: `cmp rax, rdx` — Συγκρίνει το `rax` με το `rdx`. - **`je`, `jne`, `jl`, `jge`, ...**: **Εντολές υπό όρους άλματος** που αλλάζουν τη ροή ελέγχου με βάση τα αποτελέσματα μιας προηγούμενης `cmp` ή δοκιμής. -- Παράδειγμα: Μετά από μια εντολή `cmp rax, rdx`, `je label` — Πηδάει στο `label` αν το `rax` είναι ίσο με το `rdx`. +- Παράδειγμα: Μετά από μια εντολή `cmp rax, rdx`, `je label` — Άλμα στο `label` αν το `rax` είναι ίσο με το `rdx`. - **`syscall`**: Χρησιμοποιείται για **κλήσεις συστήματος** σε ορισμένα συστήματα x64 (όπως οι σύγχρονοι Unix). - **`sysenter`**: Μια βελτιστοποιημένη εντολή **κλήσης συστήματος** σε ορισμένες πλατφόρμες. @@ -69,7 +69,7 @@ x64 επεκτείνει την αρχιτεκτονική x86, διαθέτον ### syscalls -Υπάρχουν διαφορετικές κατηγορίες syscalls, μπορείτε να [**τα βρείτε εδώ**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/osfmk/mach/i386/syscall_sw.h)**:** +Υπάρχουν διαφορετικές κατηγορίες syscalls, μπορείτε να [**τις βρείτε εδώ**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/osfmk/mach/i386/syscall_sw.h)**:** ```c #define SYSCALL_CLASS_NONE 0 /* Invalid */ #define SYSCALL_CLASS_MACH 1 /* Mach */ @@ -78,7 +78,7 @@ x64 επεκτείνει την αρχιτεκτονική x86, διαθέτον #define SYSCALL_CLASS_DIAG 4 /* Diagnostics */ #define SYSCALL_CLASS_IPC 5 /* Mach IPC */ ``` -Τότε, μπορείτε να βρείτε κάθε αριθμό syscall [**σε αυτήν τη διεύθυνση**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**:** +Τότε, μπορείτε να βρείτε κάθε αριθμό syscall [**σε αυτή τη διεύθυνση**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**:** ```c 0 AUE_NULL ALL { int nosys(void); } { indirect syscall } 1 AUE_EXIT ALL { void exit(int rval); } @@ -95,13 +95,13 @@ x64 επεκτείνει την αρχιτεκτονική x86, διαθέτον 12 AUE_CHDIR ALL { int chdir(user_addr_t path); } [...] ``` -Έτσι, για να καλέσετε το `open` syscall (**5**) από την **Unix/BSD κλάση** πρέπει να το προσθέσετε: `0x2000000` +Έτσι, για να καλέσετε το `open` syscall (**5**) από την **Unix/BSD class** πρέπει να το προσθέσετε: `0x2000000` Έτσι, ο αριθμός syscall για να καλέσετε το open θα είναι `0x2000005` ### Shellcodes -Για να κάνετε compile: +Για να το μεταγλωττίσετε: ```bash nasm -f macho64 shell.asm -o shell.o ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib @@ -209,7 +209,7 @@ syscall #### Διαβάστε με cat -Ο στόχος είναι να εκτελέσετε `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, έτσι ώστε το δεύτερο επιχείρημα (x1) να είναι ένας πίνακας παραμέτρων (που στη μνήμη σημαίνει μια στοίβα διευθύνσεων). +Ο στόχος είναι να εκτελέσουμε `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, έτσι ώστε το δεύτερο επιχείρημα (x1) να είναι ένας πίνακας παραμέτρων (που στη μνήμη σημαίνει μια στοίβα διευθύνσεων). ```armasm bits 64 section .text diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md index 0b853702b..84c92a4c2 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -57,7 +57,7 @@ uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .versi ### Memory sections used -Οι περισσότερες από τις δεδομένες πληροφορίες που χρησιμοποιούνται από το ObjectiveC runtime θα αλλάξουν κατά τη διάρκεια της εκτέλεσης, επομένως χρησιμοποιεί ορισμένες ενότητες από το **\_\_DATA** τμήμα στη μνήμη: +Οι περισσότερες από τις δεδομένες που χρησιμοποιούνται από το ObjectiveC runtime θα αλλάξουν κατά τη διάρκεια της εκτέλεσης, επομένως χρησιμοποιεί ορισμένες ενότητες από το **\_\_DATA** τμήμα στη μνήμη: - **`__objc_msgrefs`** (`message_ref_t`): Αναφορές μηνυμάτων - **`__objc_ivar`** (`ivar`): Μεταβλητές στιγμής @@ -140,6 +140,6 @@ data()->setFlags(set); Αυτή η κλάση χρησιμοποιεί μερικά bits του πεδίου isa για να υποδείξει κάποιες πληροφορίες σχετικά με την κλάση. Στη συνέχεια, η δομή έχει έναν δείκτη στη δομή `class_ro_t` που αποθηκεύεται στο δίσκο και περιέχει χαρακτηριστικά της κλάσης όπως το όνομά της, τις βασικές μεθόδους, τις ιδιότητες και τις μεταβλητές στιγμής.\ -Κατά τη διάρκεια της εκτέλεσης, χρησιμοποιείται μια επιπλέον δομή `class_rw_t` που περιέχει δείκτες που μπορούν να τροποποιηθούν, όπως μεθόδους, πρωτόκολλα, ιδιότητες... +Κατά τη διάρκεια της εκτέλεσης, χρησιμοποιείται μια επιπλέον δομή `class_rw_t` που περιέχει δείκτες οι οποίοι μπορούν να τροποποιηθούν, όπως μέθοδοι, πρωτόκολλα, ιδιότητες... {{#include ../../../banners/hacktricks-training.md}} 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 e217cafab..42c3a3c6e 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 @@ -12,20 +12,20 @@ - **/Library**: Πολλοί υποφάκελοι και αρχεία που σχετίζονται με προτιμήσεις, cache και logs μπορούν να βρεθούν εδώ. Ένας φάκελος Library υπάρχει στη ρίζα και στον κατάλογο κάθε χρήστη. - **/private**: Μη τεκμηριωμένο αλλά πολλοί από τους αναφερόμενους φακέλους είναι συμβολικοί σύνδεσμοι προς τον ιδιωτικό κατάλογο. - **/sbin**: Βασικά συστήματα δυαδικών αρχείων (σχετικά με τη διαχείριση) -- **/System**: Αρχεία για να τρέξει το OS X. Θα βρείτε κυρίως μόνο αρχεία συγκεκριμένα της Apple εδώ (όχι τρίτων). +- **/System**: Αρχεία για την εκτέλεση του OS X. Θα βρείτε κυρίως μόνο αρχεία που σχετίζονται με την Apple εδώ (όχι τρίτων). - **/tmp**: Τα αρχεία διαγράφονται μετά από 3 ημέρες (είναι ένας μαλακός σύνδεσμος προς /private/tmp) - **/Users**: Κατάλογος αρχικής για τους χρήστες. - **/usr**: Ρυθμίσεις και δυαδικά αρχεία συστήματος - **/var**: Αρχεία καταγραφής - **/Volumes**: Οι προσαρτημένοι δίσκοι θα εμφανίζονται εδώ. -- **/.vol**: Εκτελώντας `stat a.txt` αποκτάτε κάτι σαν `16777223 7545753 -rw-r--r-- 1 username wheel ...` όπου ο πρώτος αριθμός είναι ο αριθμός ταυτότητας του τόμου όπου υπάρχει το αρχείο και ο δεύτερος είναι ο αριθμός inode. Μπορείτε να αποκτήσετε το περιεχόμενο αυτού του αρχείου μέσω /.vol/ με αυτές τις πληροφορίες εκτελώντας `cat /.vol/16777223/7545753` +- **/.vol**: Εκτελώντας `stat a.txt` αποκτάτε κάτι σαν `16777223 7545753 -rw-r--r-- 1 username wheel ...` όπου ο πρώτος αριθμός είναι ο αριθμός ταυτότητας του τόμου όπου υπάρχει το αρχείο και ο δεύτερος είναι ο αριθμός inode. Μπορείτε να αποκτήσετε πρόσβαση στο περιεχόμενο αυτού του αρχείου μέσω /.vol/ με αυτές τις πληροφορίες εκτελώντας `cat /.vol/16777223/7545753` ### Φάκελοι Εφαρμογών - **Συστήματα εφαρμογών** βρίσκονται κάτω από `/System/Applications` - **Εγκατεστημένες** εφαρμογές συνήθως εγκαθίστανται σε `/Applications` ή σε `~/Applications` -- **Δεδομένα εφαρμογών** μπορούν να βρεθούν σε `/Library/Application Support` για τις εφαρμογές που τρέχουν ως root και `~/Library/Application Support` για τις εφαρμογές που τρέχουν ως χρήστης. -- Οι **daemons** τρίτων εφαρμογών που **χρειάζονται να τρέχουν ως root** συνήθως βρίσκονται σε `/Library/PrivilegedHelperTools/` +- **Δεδομένα εφαρμογών** μπορούν να βρεθούν σε `/Library/Application Support` για τις εφαρμογές που εκτελούνται ως root και `~/Library/Application Support` για τις εφαρμογές που εκτελούνται ως χρήστης. +- Οι **daemons** τρίτων που **χρειάζονται να εκτελούνται ως root** συνήθως βρίσκονται σε `/Library/PrivilegedHelperTools/` - Οι **Sandboxed** εφαρμογές είναι χαρτογραφημένες στον φάκελο `~/Library/Containers`. Κάθε εφαρμογή έχει έναν φάκελο ονομασμένο σύμφωνα με το ID του bundle της εφαρμογής (`com.apple.Safari`). - Ο **kernel** βρίσκεται σε `/System/Library/Kernels/kernel` - Οι **επέκταση πυρήνα της Apple** βρίσκονται σε `/System/Library/Extensions` @@ -58,12 +58,12 @@ macos-installers-abuse.md - `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -` - **`.app`**: Εφαρμογές της Apple που ακολουθούν τη δομή καταλόγου (είναι ένα bundle). - **`.dylib`**: Δυναμικές βιβλιοθήκες (όπως τα αρχεία DLL των Windows) -- **`.pkg`**: Είναι τα ίδια με xar (eXtensible Archive format). Η εντολή εγκατάστασης μπορεί να χρησιμοποιηθεί για να εγκαταστήσει το περιεχόμενο αυτών των αρχείων. +- **`.pkg`**: Είναι τα ίδια με το xar (eXtensible Archive format). Η εντολή εγκατάστασης μπορεί να χρησιμοποιηθεί για την εγκατάσταση των περιεχομένων αυτών των αρχείων. - **`.DS_Store`**: Αυτό το αρχείο βρίσκεται σε κάθε κατάλογο, αποθηκεύει τα χαρακτηριστικά και τις προσαρμογές του καταλόγου. - **`.Spotlight-V100`**: Αυτός ο φάκελος εμφανίζεται στον ριζικό κατάλογο κάθε τόμου στο σύστημα. - **`.metadata_never_index`**: Αν αυτό το αρχείο βρίσκεται στη ρίζα ενός τόμου, το Spotlight δεν θα ευρετηριάσει αυτόν τον τόμο. - **`.noindex`**: Αρχεία και φάκελοι με αυτήν την επέκταση δεν θα ευρετηριαστούν από το Spotlight. -- **`.sdef`**: Αρχεία μέσα σε bundles που καθορίζουν πώς είναι δυνατό να αλληλεπιδράσετε με την εφαρμογή από ένα AppleScript. +- **`.sdef`**: Αρχεία μέσα σε bundles που καθορίζουν πώς είναι δυνατόν να αλληλεπιδράσετε με την εφαρμογή από ένα AppleScript. ### macOS Bundles @@ -115,7 +115,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all Χρησιμοποιώντας τις μεταβλητές περιβάλλοντος: - **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Αυτό θα επιτρέψει τη φόρτωση μιας νέας shared library cache -- **`DYLD_SHARED_CACHE_DIR=avoid`** και χειροκίνητα αντικαταστήστε τις βιβλιοθήκες με symlinks στη shared cache με τις πραγματικές (θα χρειαστεί να τις εξαγάγετε) +- **`DYLD_SHARED_CACHE_DIR=avoid`** και αντικαταστήστε χειροκίνητα τις βιβλιοθήκες με symlinks στη shared cache με τις πραγματικές (θα χρειαστεί να τις εξαγάγετε). ## Special File Permissions @@ -128,27 +128,27 @@ dyldex_all [dyld_shared_cache_path] # Extract all Υπάρχουν ορισμένες σημαίες που μπορούν να οριστούν στα αρχεία που θα κάνουν το αρχείο να συμπεριφέρεται διαφορετικά. Μπορείτε να **ελέγξετε τις σημαίες** των αρχείων μέσα σε έναν κατάλογο με `ls -lO /path/directory` - **`uchg`**: Γνωστή ως σημαία **uchange** θα **αποτρέψει οποιαδήποτε ενέργεια** αλλαγής ή διαγραφής του **αρχείου**. Για να την ορίσετε κάντε: `chflags uchg file.txt` -- Ο χρήστης root θα μπορούσε να **αφαιρέσει τη σημαία** και να τροποποιήσει το αρχείο +- Ο χρήστης root θα μπορούσε να **αφαιρέσει τη σημαία** και να τροποποιήσει το αρχείο. - **`restricted`**: Αυτή η σημαία καθιστά το αρχείο **προστατευμένο από SIP** (δεν μπορείτε να προσθέσετε αυτή τη σημαία σε ένα αρχείο). - **`Sticky bit`**: Αν ένας κατάλογος έχει sticky bit, **μόνο** ο **ιδιοκτήτης του καταλόγου ή ο root μπορεί να μετονομάσει ή να διαγράψει** αρχεία. Συνήθως αυτό ορίζεται στον κατάλογο /tmp για να αποτρέψει τους κανονικούς χρήστες από το να διαγράψουν ή να μετακινήσουν τα αρχεία άλλων χρηστών. Όλες οι σημαίες μπορούν να βρεθούν στο αρχείο `sys/stat.h` (βρείτε το χρησιμοποιώντας `mdfind stat.h | grep stat.h`) και είναι: - `UF_SETTABLE` 0x0000ffff: Μάσκα μεταβλητών που αλλάζουν από τον ιδιοκτήτη. -- `UF_NODUMP` 0x00000001: Μην αποθηκεύετε το αρχείο. +- `UF_NODUMP` 0x00000001: Μην εκφορτώνετε το αρχείο. - `UF_IMMUTABLE` 0x00000002: Το αρχείο δεν μπορεί να αλλάξει. -- `UF_APPEND` 0x00000004: Οι εγγραφές στο αρχείο μπορούν να προστίθενται μόνο. +- `UF_APPEND` 0x00000004: Οι εγγραφές στο αρχείο μπορούν μόνο να προστεθούν. - `UF_OPAQUE` 0x00000008: Ο κατάλογος είναι αδιαφανής σε σχέση με την ένωση. - `UF_COMPRESSED` 0x00000020: Το αρχείο είναι συμπιεσμένο (ορισμένα συστήματα αρχείων). - `UF_TRACKED` 0x00000040: Καμία ειδοποίηση για διαγραφές/μετονομασίες για αρχεία με αυτή τη ρύθμιση. - `UF_DATAVAULT` 0x00000080: Απαιτείται δικαίωμα για ανάγνωση και εγγραφή. - `UF_HIDDEN` 0x00008000: Υπόδειξη ότι αυτό το στοιχείο δεν πρέπει να εμφανίζεται σε GUI. -- `SF_SUPPORTED` 0x009f0000: Μάσκα υποστηριζόμενων σημαίων superuser. +- `SF_SUPPORTED` 0x009f0000: Μάσκα σημαίων που υποστηρίζονται από superuser. - `SF_SETTABLE` 0x3fff0000: Μάσκα μεταβλητών που αλλάζουν από superuser. -- `SF_SYNTHETIC` 0xc0000000: Μάσκα συστημικών αναγνωρίσιμων σημαίων μόνο για ανάγνωση. +- `SF_SYNTHETIC` 0xc0000000: Μάσκα συστημικών αναγνωρίσιμων συνθετικών σημαίων. - `SF_ARCHIVED` 0x00010000: Το αρχείο είναι αρχειοθετημένο. - `SF_IMMUTABLE` 0x00020000: Το αρχείο δεν μπορεί να αλλάξει. -- `SF_APPEND` 0x00040000: Οι εγγραφές στο αρχείο μπορούν να προστίθενται μόνο. +- `SF_APPEND` 0x00040000: Οι εγγραφές στο αρχείο μπορούν μόνο να προστεθούν. - `SF_RESTRICTED` 0x00080000: Απαιτείται δικαίωμα για εγγραφή. - `SF_NOUNLINK` 0x00100000: Το στοιχείο δεν μπορεί να αφαιρεθεί, να μετονομαστεί ή να προσαρτηθεί. - `SF_FIRMLINK` 0x00800000: Το αρχείο είναι firmlink. @@ -196,7 +196,7 @@ ls -RAle / 2>/dev/null | grep -E -B1 "\d: " ### Resource Forks | macOS ADS -Αυτή είναι μια μέθοδος για να αποκτήσετε **Εναλλακτικά Ρεύματα Δεδομένων σε μηχανές MacOS**. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε μια εκτεταμένη ιδιότητα που ονομάζεται **com.apple.ResourceFork** μέσα σε ένα αρχείο αποθηκεύοντάς το σε **file/..namedfork/rsrc**. +Αυτή είναι μια μέθοδος για να αποκτήσετε **Εναλλακτικά Ρεύματα Δεδομένων σε MacOS** μηχανές. Μπορείτε να αποθηκεύσετε περιεχόμενο μέσα σε μια εκτεταμένη ιδιότητα που ονομάζεται **com.apple.ResourceFork** μέσα σε ένα αρχείο αποθηκεύοντάς το σε **file/..namedfork/rsrc**. ```bash echo "Hello" > a.txt echo "Hello Mac ADS" > a.txt/..namedfork/rsrc @@ -215,7 +215,7 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf Η επεκταμένη ιδιότητα `com.apple.decmpfs` υποδεικνύει ότι το αρχείο αποθηκεύεται κρυπτογραφημένο, το `ls -l` θα αναφέρει **μέγεθος 0** και τα συμπιεσμένα δεδομένα βρίσκονται μέσα σε αυτή την ιδιότητα. Όποτε το αρχείο προσπελάζεται, θα αποκρυπτογραφείται στη μνήμη. -Αυτή η ιδιότητα μπορεί να φαίνεται με το `ls -lO` υποδεικνύοντας ότι είναι συμπιεσμένο επειδή τα συμπιεσμένα αρχεία είναι επίσης επισημασμένα με τη σημαία `UF_COMPRESSED`. Αν ένα συμπιεσμένο αρχείο αφαιρεθεί αυτή η σημαία με `chflags nocompressed `, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και επομένως δεν θα μπορεί να αποσυμπιέσει και να προσπελάσει τα δεδομένα (θα νομίζει ότι είναι στην πραγματικότητα κενό). +Αυτή η ιδιότητα μπορεί να φαίνεται με το `ls -lO` υποδεικνύοντας ότι είναι συμπιεσμένο επειδή τα συμπιεσμένα αρχεία είναι επίσης επισημασμένα με την ετικέτα `UF_COMPRESSED`. Εάν ένα συμπιεσμένο αρχείο αφαιρεθεί με αυτή την ετικέτα `chflags nocompressed `, το σύστημα δεν θα γνωρίζει ότι το αρχείο ήταν συμπιεσμένο και επομένως δεν θα μπορεί να το αποσυμπιέσει και να προσπελάσει τα δεδομένα (θα νομίζει ότι είναι στην πραγματικότητα κενό). Το εργαλείο afscexpand μπορεί να χρησιμοποιηθεί για να αναγκάσει την αποσυμπίεση ενός αρχείου. @@ -237,20 +237,20 @@ macos-memory-dumping.md ## Risk Category Files Mac OS -Ο φάκελος `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` είναι όπου αποθηκεύεται πληροφορία σχετικά με τον **κίνδυνο που σχετίζεται με διαφορετικές επεκτάσεις αρχείων**. Αυτός ο φάκελος κατηγοριοποιεί τα αρχεία σε διάφορα επίπεδα κινδύνου, επηρεάζοντας το πώς το Safari χειρίζεται αυτά τα αρχεία κατά τη λήψη τους. Οι κατηγορίες είναι οι εξής: +Ο φάκελος `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` είναι όπου αποθηκεύεται πληροφορία σχετικά με τον **κίνδυνο που σχετίζεται με διαφορετικές επεκτάσεις αρχείων**. Αυτός ο φάκελος κατηγοριοποιεί τα αρχεία σε διάφορα επίπεδα κινδύνου, επηρεάζοντας το πώς το Safari χειρίζεται αυτά τα αρχεία κατά τη λήψη. Οι κατηγορίες είναι οι εξής: - **LSRiskCategorySafe**: Τα αρχεία σε αυτή την κατηγορία θεωρούνται **εντελώς ασφαλή**. Το Safari θα ανοίξει αυτόματα αυτά τα αρχεία μετά τη λήψη τους. - **LSRiskCategoryNeutral**: Αυτά τα αρχεία δεν συνοδεύονται από προειδοποιήσεις και **δεν ανοίγονται αυτόματα** από το Safari. -- **LSRiskCategoryUnsafeExecutable**: Τα αρχεία κάτω από αυτή την κατηγορία **προκαλούν μια προειδοποίηση** υποδεικνύοντας ότι το αρχείο είναι μια εφαρμογή. Αυτό λειτουργεί ως μέτρο ασφαλείας για να ειδοποιήσει τον χρήστη. -- **LSRiskCategoryMayContainUnsafeExecutable**: Αυτή η κατηγορία είναι για αρχεία, όπως τα αρχεία αρχειοθέτησης, που μπορεί να περιέχουν μια εκτελέσιμη εφαρμογή. Το Safari θα **προκαλέσει μια προειδοποίηση** εκτός αν μπορεί να επαληθεύσει ότι όλα τα περιεχόμενα είναι ασφαλή ή ουδέτερα. +- **LSRiskCategoryUnsafeExecutable**: Τα αρχεία κάτω από αυτή την κατηγορία **προκαλούν προειδοποίηση** υποδεικνύοντας ότι το αρχείο είναι εφαρμογή. Αυτό λειτουργεί ως μέτρο ασφαλείας για να ειδοποιήσει τον χρήστη. +- **LSRiskCategoryMayContainUnsafeExecutable**: Αυτή η κατηγορία είναι για αρχεία, όπως τα αρχεία αρχειοθέτησης, που μπορεί να περιέχουν εκτελέσιμο. Το Safari θα **προκαλέσει προειδοποίηση** εκτός αν μπορεί να επαληθεύσει ότι όλα τα περιεχόμενα είναι ασφαλή ή ουδέτερα. ## Log files -- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Περιέχει πληροφορίες σχετικά με τα ληφθέντα αρχεία, όπως τη διεύθυνση URL από όπου λήφθηκαν. -- **`/var/log/system.log`**: Κύριο αρχείο καταγραφής των συστημάτων OSX. Το com.apple.syslogd.plist είναι υπεύθυνο για την εκτέλεση της καταγραφής συστήματος (μπορείτε να ελέγξετε αν είναι απενεργοποιημένο αναζητώντας "com.apple.syslogd" στο `launchctl list`). +- **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Περιέχει πληροφορίες σχετικά με τα ληφθέντα αρχεία, όπως το URL από το οποίο λήφθηκαν. +- **`/var/log/system.log`**: Κύριο αρχείο καταγραφής των συστημάτων OSX. το com.apple.syslogd.plist είναι υπεύθυνο για την εκτέλεση της καταγραφής συστήματος (μπορείτε να ελέγξετε αν είναι απενεργοποιημένο αναζητώντας "com.apple.syslogd" στο `launchctl list`). - **`/private/var/log/asl/*.asl`**: Αυτά είναι τα Apple System Logs που μπορεί να περιέχουν ενδιαφέρουσες πληροφορίες. -- **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Αποθηκεύει πρόσφατα προσπελάσιμα αρχεία και εφαρμογές μέσω του "Finder". -- **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Αποθηκεύει στοιχεία που θα εκκινούν κατά την εκκίνηση του συστήματος. +- **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Αποθηκεύει πρόσφατα προσπελασμένα αρχεία και εφαρμογές μέσω του "Finder". +- **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Αποθηκεύει στοιχεία που θα εκκινούνται κατά την εκκίνηση του συστήματος. - **`$HOME/Library/Logs/DiskUtility.log`**: Αρχείο καταγραφής για την εφαρμογή DiskUtility (πληροφορίες σχετικά με δίσκους, συμπεριλαμβανομένων των USB). - **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Δεδομένα σχετικά με τα ασύρματα σημεία πρόσβασης. - **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Λίστα με τους απενεργοποιημένους δαίμονες. 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 4ead07835..6757a7080 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 @@ -4,11 +4,11 @@ ## Basic Information -Τα bundles στο macOS λειτουργούν ως δοχεία για μια ποικιλία πόρων, συμπεριλαμβανομένων εφαρμογών, βιβλιοθηκών και άλλων απαραίτητων αρχείων, κάνοντάς τα να εμφανίζονται ως ενιαία αντικείμενα στο Finder, όπως τα γνωστά αρχεία `*.app`. Το πιο συχνά συναντώμενο bundle είναι το `.app` bundle, αν και άλλοι τύποι όπως το `.framework`, `.systemextension` και `.kext` είναι επίσης διαδεδομένοι. +Τα bundles στο macOS λειτουργούν ως δοχεία για μια ποικιλία πόρων, συμπεριλαμβανομένων εφαρμογών, βιβλιοθηκών και άλλων απαραίτητων αρχείων, κάνοντάς τα να εμφανίζονται ως ενιαία αντικείμενα στο Finder, όπως τα γνωστά αρχεία `*.app`. Το πιο συχνά συναντώμενο bundle είναι το `.app` bundle, αν και άλλοι τύποι όπως `.framework`, `.systemextension` και `.kext` είναι επίσης διαδεδομένοι. ### Essential Components of a Bundle -Μέσα σε ένα bundle, ιδιαίτερα μέσα στον φάκελο `.app/Contents/`, φιλοξενούνται διάφοροι σημαντικοί πόροι: +Μέσα σε ένα bundle, ιδιαίτερα στον φάκελο `.app/Contents/`, φιλοξενούνται διάφοροι σημαντικοί πόροι: - **\_CodeSignature**: Αυτός ο φάκελος αποθηκεύει λεπτομέρειες υπογραφής κώδικα που είναι ζωτικής σημασίας για την επαλήθευση της ακεραιότητας της εφαρμογής. Μπορείτε να ελέγξετε τις πληροφορίες υπογραφής κώδικα χρησιμοποιώντας εντολές όπως: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%% - **MacOS**: Περιέχει το εκτελέσιμο δυαδικό αρχείο της εφαρμογής που εκτελείται κατά την αλληλεπίδραση του χρήστη. @@ -27,13 +27,13 @@ Για να εξερευνήσετε το περιεχόμενο ενός bundle, όπως το `Safari.app`, μπορεί να χρησιμοποιηθεί η εξής εντολή: `bash ls -lR /Applications/Safari.app/Contents` -Αυτή η εξερεύνηση αποκαλύπτει φακέλους όπως `_CodeSignature`, `MacOS`, `Resources`, και αρχεία όπως το `Info.plist`, καθένα από τα οποία εξυπηρετεί μια μοναδική σκοπιμότητα από την ασφάλιση της εφαρμογής μέχρι τον καθορισμό της διεπαφής χρήστη και των παραμέτρων λειτουργίας. +Αυτή η εξερεύνηση αποκαλύπτει φακέλους όπως `_CodeSignature`, `MacOS`, `Resources`, και αρχεία όπως το `Info.plist`, καθένα από τα οποία εξυπηρετεί μια μοναδική σκοπιμότητα από την ασφάλιση της εφαρμογής μέχρι τον καθορισμό της διεπαφής χρήστη και των λειτουργικών παραμέτρων. #### Additional Bundle Directories Πέρα από τους κοινούς φακέλους, τα bundles μπορεί επίσης να περιλαμβάνουν: -- **Frameworks**: Περιέχει bundled frameworks που χρησιμοποιούνται από την εφαρμογή. Τα frameworks είναι σαν τα dylibs με επιπλέον πόρους. +- **Frameworks**: Περιέχει bundled frameworks που χρησιμοποιούνται από την εφαρμογή. Τα frameworks είναι σαν dylibs με επιπλέον πόρους. - **PlugIns**: Ένας φάκελος για plug-ins και επεκτάσεις που ενισχύουν τις δυνατότητες της εφαρμογής. - **XPCServices**: Περιέχει XPC υπηρεσίες που χρησιμοποιούνται από την εφαρμογή για επικοινωνία εκτός διαδικασίας. 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 78e814cbc..0b183a17f 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 @@ -36,7 +36,7 @@ cpio -i < Scripts ## Βασικές Πληροφορίες DMG -Τα αρχεία DMG, ή Apple Disk Images, είναι μια μορφή αρχείου που χρησιμοποιείται από το macOS της Apple για εικόνες δίσκων. Ένα αρχείο DMG είναι ουσιαστικά μια **εικόνα δίσκου που μπορεί να προσαρτηθεί** (περιέχει το δικό του σύστημα αρχείων) που περιέχει ακατέργωστα δεδομένα μπλοκ, συνήθως συμπιεσμένα και μερικές φορές κρυπτογραφημένα. Όταν ανοίγετε ένα αρχείο DMG, το macOS **το προσαρτά σαν να ήταν φυσικός δίσκος**, επιτρέποντάς σας να έχετε πρόσβαση στα περιεχόμενά του. +Τα αρχεία DMG, ή Apple Disk Images, είναι μια μορφή αρχείου που χρησιμοποιείται από το macOS της Apple για εικόνες δίσκων. Ένα αρχείο DMG είναι ουσιαστικά μια **τοποθετήσιμη εικόνα δίσκου** (περιέχει το δικό του σύστημα αρχείων) που περιέχει ακατέργαστα δεδομένα μπλοκ που συνήθως είναι συμπιεσμένα και μερικές φορές κρυπτογραφημένα. Όταν ανοίγετε ένα αρχείο DMG, το macOS **το τοποθετεί σαν να ήταν φυσικός δίσκος**, επιτρέποντάς σας να έχετε πρόσβαση στα περιεχόμενά του. > [!CAUTION] > Σημειώστε ότι οι εγκαταστάτες **`.dmg`** υποστηρίζουν **τόσες πολλές μορφές** που στο παρελθόν μερικές από αυτές που περιείχαν ευπάθειες χρησιμοποιήθηκαν για να αποκτήσουν **εκτέλεση κώδικα πυρήνα**. @@ -61,7 +61,7 @@ cpio -i < Scripts ### AuthorizationExecuteWithPrivileges -Αυτή είναι μια [δημόσια συνάρτηση](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) που θα καλέσουν αρκετοί εγκαταστάτες και ενημερωτές για να **εκτελέσουν κάτι ως root**. Αυτή η συνάρτηση δέχεται το **μονοπάτι** του **αρχείου** που θα **εκτελεστεί** ως παράμετρο, ωστόσο, αν ένας επιτιθέμενος μπορούσε να **τροποποιήσει** αυτό το αρχείο, θα μπορούσε να **καταχραστεί** την εκτέλεσή του με root για να **κλιμακώσει τα δικαιώματα**. +Αυτή είναι μια [δημόσια συνάρτηση](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) που θα καλέσουν αρκετοί εγκαταστάτες και ενημερωτές για να **εκτελέσουν κάτι ως root**. Αυτή η συνάρτηση δέχεται το **μονοπάτι** του **αρχείου** που θα **εκτελεστεί** ως παράμετρο, ωστόσο, εάν ένας επιτιθέμενος μπορούσε να **τροποποιήσει** αυτό το αρχείο, θα μπορούσε να **καταχραστεί** την εκτέλεσή του με root για να **κλιμακώσει τα δικαιώματα**. ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges @@ -152,9 +152,9 @@ productbuild --distribution dist.xml --package-path myapp.pkg final-installer.pk ``` ## Αναφορές -- [**DEF CON 27 - Αποσυμπίεση Πακέτων Μια Ματιά Μέσα στα Πακέτα Εγκατάστασης Macos και Κοινές Ασφαλιστικές Αδυναμίες**](https://www.youtube.com/watch?v=iASSG0_zobQ) +- [**DEF CON 27 - Αποσυμπίεση Πακέτων Μια Ματιά Μέσα στα Πακέτα Εγκατάστασης macOS και Κοινές Ασφαλιστικές Αδυναμίες**](https://www.youtube.com/watch?v=iASSG0_zobQ) - [**OBTS v4.0: "Ο Άγριος Κόσμος των Εγκαταστάσεων macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg) -- [**DEF CON 27 - Αποσυμπίεση Πακέτων Μια Ματιά Μέσα στα Πακέτα Εγκατάστασης MacOS**](https://www.youtube.com/watch?v=kCXhIYtODBg) +- [**DEF CON 27 - Αποσυμπίεση Πακέτων Μια Ματιά Μέσα στα Πακέτα Εγκατάστασης macOS**](https://www.youtube.com/watch?v=kCXhIYtODBg) - [https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages](https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md index ca6510d68..eca69afaf 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md @@ -18,13 +18,13 @@ ### Memory Pressure Logs -Ένα άλλο σημαντικό αρχείο που σχετίζεται με τη μνήμη στα συστήματα MacOS είναι το **καταγραφικό πίεσης μνήμης**. Αυτά τα αρχεία καταγραφής βρίσκονται στο `/var/log` και περιέχουν λεπτομερείς πληροφορίες σχετικά με τη χρήση μνήμης του συστήματος και τα γεγονότα πίεσης. Μπορούν να είναι ιδιαίτερα χρήσιμα για τη διάγνωση προβλημάτων που σχετίζονται με τη μνήμη ή για την κατανόηση του τρόπου διαχείρισης της μνήμης από το σύστημα με την πάροδο του χρόνου. +Ένα άλλο σημαντικό αρχείο που σχετίζεται με τη μνήμη στα συστήματα MacOS είναι το **log πίεσης μνήμης**. Αυτά τα logs βρίσκονται στο `/var/log` και περιέχουν λεπτομερείς πληροφορίες σχετικά με τη χρήση μνήμης του συστήματος και τα γεγονότα πίεσης. Μπορούν να είναι ιδιαίτερα χρήσιμα για τη διάγνωση προβλημάτων που σχετίζονται με τη μνήμη ή για την κατανόηση του τρόπου διαχείρισης της μνήμης από το σύστημα με την πάροδο του χρόνου. ## Dumping memory with osxpmem Για να κάνετε dump τη μνήμη σε μια μηχανή MacOS μπορείτε να χρησιμοποιήσετε [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip). -**Σημείωση**: Οι παρακάτω οδηγίες θα λειτουργήσουν μόνο για Macs με αρχιτεκτονική Intel. Αυτό το εργαλείο είναι πλέον αρχειοθετημένο και η τελευταία έκδοση ήταν το 2017. Το δυαδικό αρχείο που κατεβάζεται χρησιμοποιώντας τις παρακάτω οδηγίες στοχεύει σε επεξεργαστές Intel καθώς η Apple Silicon δεν υπήρχε το 2017. Είναι πιθανό να μπορέσετε να μεταγλωττίσετε το δυαδικό αρχείο για αρχιτεκτονική arm64, αλλά θα πρέπει να το δοκιμάσετε μόνοι σας. +**Σημείωση**: Οι παρακάτω οδηγίες θα λειτουργήσουν μόνο για Macs με αρχιτεκτονική Intel. Αυτό το εργαλείο είναι πλέον αρχειοθετημένο και η τελευταία έκδοση ήταν το 2017. Το δυαδικό που κατεβάζεται χρησιμοποιώντας τις παρακάτω οδηγίες στοχεύει σε επεξεργαστές Intel καθώς η Apple Silicon δεν υπήρχε το 2017. Είναι πιθανό να μπορέσετε να συντάξετε το δυαδικό για αρχιτεκτονική arm64, αλλά θα πρέπει να το δοκιμάσετε μόνοι σας. ```bash #Dump raw format sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem @@ -39,7 +39,7 @@ sudo kextutil "/tmp/MacPmem.kext" #Allow the kext in "Security & Privacy --> General" sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem ``` -**Άλλα σφάλματα** μπορεί να διορθωθούν **επιτρέποντας τη φόρτωση του kext** στο "Ασφάλεια & Ιδιωτικότητα --> Γενικά", απλά **επιτρέψτε** το. +**Άλλες σφάλματα** μπορεί να διορθωθούν **επιτρέποντας τη φόρτωση του kext** στο "Ασφάλεια & Ιδιωτικότητα --> Γενικά", απλά **επιτρέψτε** το. Μπορείτε επίσης να χρησιμοποιήσετε αυτήν την **εντολή** για να κατεβάσετε την εφαρμογή, να φορτώσετε το kext και να κάνετε dump τη μνήμη: ```bash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md index 1d8e0b988..724a3943f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md @@ -11,9 +11,9 @@ ```bash for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done ``` -[**Σενάρια όπως αυτό**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) ή [**αυτό**](https://github.com/octomagon/davegrohl.git) μπορούν να χρησιμοποιηθούν για να μετατρέψουν το hash σε **μορφή hashcat**. +[**Σενάρια όπως αυτό**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) ή [**αυτό**](https://github.com/octomagon/davegrohl.git) μπορούν να χρησιμοποιηθούν για να μετατρέψουν το hash σε **μορφή** **hashcat**. -Μια εναλλακτική one-liner που θα εκτυπώσει τα creds όλων των μη υπηρεσιακών λογαριασμών σε μορφή hashcat `-m 7100` (macOS PBKDF2-SHA512): +Μια εναλλακτική one-liner που θα εξάγει τα creds όλων των μη υπηρεσιακών λογαριασμών σε μορφή hashcat `-m 7100` (macOS PBKDF2-SHA512): ```bash sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done' ``` @@ -21,7 +21,7 @@ sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex ### /etc/master.passwd -Αυτό το αρχείο χρησιμοποιείται **μόνο** όταν το σύστημα εκτελείται σε **μοναδική λειτουργία χρήστη** (οπότε όχι πολύ συχνά). +Αυτό το αρχείο χρησιμοποιείται **μόνο** όταν το σύστημα εκτελείται σε **λειτουργία ενός χρήστη** (οπότε όχι πολύ συχνά). ### Keychain Dump @@ -43,7 +43,7 @@ security dump-keychain -d #Dump all the info, included secrets (the user will be Ένα εργαλείο που ονομάζεται **keychaindump** έχει αναπτυχθεί για να εξάγει κωδικούς πρόσβασης από τα keychains του macOS, αλλά αντιμετωπίζει περιορισμούς σε νεότερες εκδόσεις του macOS όπως το Big Sur, όπως αναφέρεται σε μια [συζήτηση](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). Η χρήση του **keychaindump** απαιτεί από τον επιτιθέμενο να αποκτήσει πρόσβαση και να αναβαθμίσει τα δικαιώματα σε **root**. Το εργαλείο εκμεταλλεύεται το γεγονός ότι το keychain είναι ξεκλείδωτο από προεπιλογή κατά την είσοδο του χρήστη για ευκολία, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση σε αυτό χωρίς να απαιτείται επανειλημμένα ο κωδικός πρόσβασης του χρήστη. Ωστόσο, αν ένας χρήστης επιλέξει να κλειδώσει το keychain του μετά από κάθε χρήση, το **keychaindump** καθίσταται αναποτελεσματικό. -**Keychaindump** λειτουργεί στοχεύοντας μια συγκεκριμένη διαδικασία που ονομάζεται **securityd**, την οποία περιγράφει η Apple ως ένα daemon για εξουσιοδότηση και κρυπτογραφικές λειτουργίες, κρίσιμη για την πρόσβαση στο keychain. Η διαδικασία εξαγωγής περιλαμβάνει την αναγνώριση ενός **Master Key** που προέρχεται από τον κωδικό πρόσβασης του χρήστη. Αυτό το κλειδί είναι απαραίτητο για την ανάγνωση του αρχείου keychain. Για να εντοπίσει το **Master Key**, το **keychaindump** σ scans τη μνήμη του **securityd** χρησιμοποιώντας την εντολή `vmmap`, αναζητώντας πιθανά κλειδιά σε περιοχές που έχουν σημαδευτεί ως `MALLOC_TINY`. Η ακόλουθη εντολή χρησιμοποιείται για να επιθεωρήσει αυτές τις τοποθεσίες μνήμης: +Το **keychaindump** λειτουργεί στοχεύοντας μια συγκεκριμένη διαδικασία που ονομάζεται **securityd**, την οποία περιγράφει η Apple ως ένα daemon για εξουσιοδότηση και κρυπτογραφικές λειτουργίες, κρίσιμη για την πρόσβαση στο keychain. Η διαδικασία εξαγωγής περιλαμβάνει την αναγνώριση ενός **Master Key** που προέρχεται από τον κωδικό πρόσβασης του χρήστη. Αυτό το κλειδί είναι απαραίτητο για την ανάγνωση του αρχείου keychain. Για να εντοπίσει το **Master Key**, το **keychaindump** σ scans τη μνήμη του **securityd** χρησιμοποιώντας την εντολή `vmmap`, αναζητώντας πιθανά κλειδιά σε περιοχές που έχουν σημαδευτεί ως `MALLOC_TINY`. Η ακόλουθη εντολή χρησιμοποιείται για να επιθεωρήσει αυτές τις τοποθεσίες μνήμης: ```bash sudo vmmap | grep MALLOC_TINY ``` @@ -53,7 +53,7 @@ sudo ./keychaindump ``` ### chainbreaker -[**Chainbreaker**](https://github.com/n0fate/chainbreaker) μπορεί να χρησιμοποιηθεί για την εξαγωγή των παρακάτω τύπων πληροφοριών από ένα OSX keychain με τρόπο που είναι νομικά αποδεκτός: +[**Chainbreaker**](https://github.com/n0fate/chainbreaker) μπορεί να χρησιμοποιηθεί για να εξάγει τους παρακάτω τύπους πληροφοριών από ένα OSX keychain με εγκληματολογικά σωστό τρόπο: - Hashed Keychain password, κατάλληλο για cracking με [hashcat](https://hashcat.net/hashcat/) ή [John the Ripper](https://www.openwall.com/john/) - Internet Passwords @@ -145,7 +145,7 @@ for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.s ``` ## Προτιμήσεις -Στις εφαρμογές macOS, οι προτιμήσεις βρίσκονται στο **`$HOME/Library/Preferences`** και στο iOS βρίσκονται στο `/var/mobile/Containers/Data/Application//Library/Preferences`. +Στις εφαρμογές macOS, οι προτιμήσεις βρίσκονται στο **`$HOME/Library/Preferences`** και στο iOS είναι στο `/var/mobile/Containers/Data/Application//Library/Preferences`. Στο macOS, το εργαλείο cli **`defaults`** μπορεί να χρησιμοποιηθεί για **να τροποποιήσει το αρχείο Προτιμήσεων**. @@ -154,7 +154,7 @@ for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.s ## OpenDirectory permissions.plist Το αρχείο `/System/Library/OpenDirectory/permissions.plist` περιέχει δικαιώματα που εφαρμόζονται σε χαρακτηριστικά κόμβων και είναι προστατευμένο από το SIP.\ -Αυτό το αρχείο παραχωρεί δικαιώματα σε συγκεκριμένους χρήστες με UUID (και όχι uid) ώστε να μπορούν να έχουν πρόσβαση σε συγκεκριμένες ευαίσθητες πληροφορίες όπως `ShadowHashData`, `HeimdalSRPKey` και `KerberosKeys` μεταξύ άλλων: +Αυτό το αρχείο παρέχει δικαιώματα σε συγκεκριμένους χρήστες με UUID (και όχι uid) ώστε να μπορούν να έχουν πρόσβαση σε συγκεκριμένες ευαίσθητες πληροφορίες όπως `ShadowHashData`, `HeimdalSRPKey` και `KerberosKeys` μεταξύ άλλων: ```xml [...] dsRecTypeStandard:Computers @@ -217,8 +217,8 @@ common: com.apple.security.octagon.joined-with-bottle ### Ειδοποιήσεις Apple Push (APN) -Σε αυτή την περίπτωση, οι εφαρμογές μπορούν να εγγραφούν για **θέματα**. Ο πελάτης θα δημιουργήσει ένα διακριτικό επικοινωνώντας με τους διακομιστές της Apple μέσω του **`apsd`**.\ -Στη συνέχεια, οι πάροχοι θα έχουν επίσης δημιουργήσει ένα διακριτικό και θα μπορούν να συνδεθούν με τους διακομιστές της Apple για να στείλουν μηνύματα στους πελάτες. Αυτά τα μηνύματα θα γίνονται τοπικά δεκτά από το **`apsd`** το οποίο θα προωθήσει την ειδοποίηση στην εφαρμογή που την περιμένει. +Σε αυτή την περίπτωση, οι εφαρμογές μπορούν να εγγραφούν για **θέματα**. Ο πελάτης θα δημιουργήσει ένα token επικοινωνώντας με τους διακομιστές της Apple μέσω του **`apsd`**.\ +Στη συνέχεια, οι πάροχοι θα έχουν επίσης δημιουργήσει ένα token και θα μπορούν να συνδεθούν με τους διακομιστές της Apple για να στείλουν μηνύματα στους πελάτες. Αυτά τα μηνύματα θα γίνονται τοπικά δεκτά από το **`apsd`** το οποίο θα προωθήσει την ειδοποίηση στην εφαρμογή που την περιμένει. Οι προτιμήσεις βρίσκονται στο `/Library/Preferences/com.apple.apsd.plist`. @@ -230,12 +230,12 @@ sudo sqlite3 /Library/Application\ Support/ApplePushService/aps.db ```bash /System/Library/PrivateFrameworks/ApplePushService.framework/apsctl status ``` -## User Notifications +## Ειδοποιήσεις Χρήστη Αυτές είναι οι ειδοποιήσεις που θα πρέπει να βλέπει ο χρήστης στην οθόνη: - **`CFUserNotification`**: Αυτή η API παρέχει έναν τρόπο να εμφανίζεται στην οθόνη ένα αναδυόμενο παράθυρο με ένα μήνυμα. -- **The Bulletin Board**: Αυτό εμφανίζει σε iOS μια διαφήμιση που εξαφανίζεται και θα αποθηκευτεί στο Κέντρο Ειδοποιήσεων. -- **`NSUserNotificationCenter`**: Αυτό είναι το bulletin board του iOS στο MacOS. Η βάση δεδομένων με τις ειδοποιήσεις βρίσκεται στο `/var/folders//0/com.apple.notificationcenter/db2/db` +- **Ο Πίνακας Ανακοινώσεων**: Αυτός εμφανίζει σε iOS μια διαφήμιση που εξαφανίζεται και θα αποθηκευτεί στο Κέντρο Ειδοποιήσεων. +- **`NSUserNotificationCenter`**: Αυτός είναι ο πίνακας ανακοινώσεων iOS στο MacOS. Η βάση δεδομένων με τις ειδοποιήσεις βρίσκεται στο `/var/folders//0/com.apple.notificationcenter/db2/db` {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md index 4a7278f4d..18d7127e6 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md @@ -1,78 +1,6 @@ # macOS Universal binaries & Mach-O Format -{{#include ../../../banners/hacktricks-training.md}} - -## Basic Information - -Τα δυαδικά αρχεία Mac OS συνήθως είναι συμπιεσμένα ως **universal binaries**. Ένα **universal binary** μπορεί να **υποστηρίζει πολλαπλές αρχιτεκτονικές στο ίδιο αρχείο**. - -Αυτά τα δυαδικά αρχεία ακολουθούν τη **δομή Mach-O** που βασικά αποτελείται από: - -- Header -- Load Commands -- Data - -![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../images/image (470).png>) - -## Fat Header - -Αναζητήστε το αρχείο με: `mdfind fat.h | grep -i mach-o | grep -E "fat.h$"` - -
#define FAT_MAGIC	0xcafebabe
-#define FAT_CIGAM	0xbebafeca	/* NXSwapLong(FAT_MAGIC) */
-
-struct fat_header {
-	uint32_t	magic;		/* FAT_MAGIC ή FAT_MAGIC_64 */
-	uint32_t	nfat_arch;	/* αριθμός δομών που ακολουθούν */
-};
-
-struct fat_arch {
-cpu_type_t	cputype;	/* καθοριστής cpu (int) */
-cpu_subtype_t	cpusubtype;	/* καθοριστής μηχανής (int) */
-uint32_t	offset;		/* αρχείο offset σε αυτό το αντικείμενο αρχείο */
-uint32_t	size;		/* μέγεθος αυτού του αντικειμένου αρχείου */
-uint32_t	align;		/* ευθυγράμμιση ως δύναμη του 2 */
-};
-
- -Η κεφαλίδα έχει τα **magic** bytes ακολουθούμενα από τον **αριθμό** των **archs** που περιέχει το αρχείο (`nfat_arch`) και κάθε αρχιτεκτονική θα έχει μια δομή `fat_arch`. - -Ελέγξτε το με: - -
% file /bin/ls
-/bin/ls: Mach-O universal binary με 2 αρχιτεκτονικές: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
-/bin/ls (για αρχιτεκτονική x86_64):	Mach-O 64-bit executable x86_64
-/bin/ls (για αρχιτεκτονική arm64e):	Mach-O 64-bit executable arm64e
-
-% otool -f -v /bin/ls
-Fat headers
-fat_magic FAT_MAGIC
-nfat_arch 2
-architecture x86_64
-    cputype CPU_TYPE_X86_64
-cpusubtype CPU_SUBTYPE_X86_64_ALL
-capabilities 0x0
-    offset 16384
-    size 72896
-    align 2^14 (16384)
-architecture arm64e
-    cputype CPU_TYPE_ARM64
-cpusubtype CPU_SUBTYPE_ARM64E
-capabilities PTR_AUTH_VERSION USERSPACE 0
-    offset 98304
-    size 88816
-    align 2^14 (16384)
-
- -ή χρησιμοποιώντας το εργαλείο [Mach-O View](https://sourceforge.net/projects/machoview/): - -
- -Όπως μπορεί να σκέφτεστε, συνήθως ένα universal binary που έχει συμπιεστεί για 2 αρχιτεκτονικές **διπλασιάζει το μέγεθος** ενός που έχει συμπιεστεί μόνο για 1 αρχιτεκτονική. - -## **Mach-O Header** - -Η κεφαλίδα περιέχει βασικές πληροφορίες σχετικά με το αρχείο, όπως τα magic bytes για να το αναγνωρίσει ως αρχείο Mach-O και πληροφορίες σχετικά με την αρχιτεκτονική στόχο. Μπορείτε να το βρείτε σε: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"` +{{# ```c #define MH_MAGIC 0xfeedface /* the mach magic number */ #define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */ @@ -99,9 +27,9 @@ uint32_t flags; /* flags */ uint32_t reserved; /* reserved */ }; ``` -### Mach-O File Types +### Mach-O Τύποι Αρχείων -Υπάρχουν διάφοροι τύποι αρχείων, μπορείτε να τους βρείτε καθορισμένους στον [**κώδικα πηγής για παράδειγμα εδώ**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL_HEADERS/mach-o/loader.h). Οι πιο σημαντικοί είναι: +Υπάρχουν διάφοροι τύποι αρχείων, μπορείτε να τους βρείτε καθορισμένους στον [**πηγαίο κώδικα για παράδειγμα εδώ**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL_HEADERS/mach-o/loader.h). Οι πιο σημαντικοί είναι: - `MH_OBJECT`: Μεταθέσιμο αρχείο αντικειμένου (ενδιάμεσα προϊόντα της μεταγλώττισης, όχι εκτελέσιμα ακόμα). - `MH_EXECUTE`: Εκτελέσιμα αρχεία. @@ -131,7 +59,7 @@ MH_MAGIC_64 ARM64 E USR00 EXECUTE 19 1728 NOUNDEFS DY - `MH_NOUNDEFS`: Χωρίς μη καθορισμένες αναφορές (πλήρως συνδεδεμένο) - `MH_DYLDLINK`: Σύνδεση Dyld - `MH_PREBOUND`: Δυναμικές αναφορές προδεσμευμένες. -- `MH_SPLIT_SEGS`: Το αρχείο διαχωρίζει τα r/o και r/w τμήματα. +- `MH_SPLIT_SEGS`: Το αρχείο διαχωρίζει τα τμήματα r/o και r/w. - `MH_WEAK_DEFINES`: Το δυαδικό έχει αδύνατα καθορισμένα σύμβολα - `MH_BINDS_TO_WEAK`: Το δυαδικό χρησιμοποιεί αδύνατα σύμβολα - `MH_ALLOW_STACK_EXECUTION`: Κάνει τη στοίβα εκτελέσιμη @@ -154,7 +82,7 @@ uint32_t cmd; /* type of load command */ uint32_t cmdsize; /* total size of command in bytes */ }; ``` -Υπάρχουν περίπου **50 διαφορετικοί τύποι εντολών φόρτωσης** που το σύστημα χειρίζεται διαφορετικά. Οι πιο κοινοί είναι: `LC_SEGMENT_64`, `LC_LOAD_DYLINKER`, `LC_MAIN`, `LC_LOAD_DYLIB`, και `LC_CODE_SIGNATURE`. +Υπάρχουν περίπου **50 διαφορετικοί τύποι εντολών φόρτωσης** που το σύστημα χειρίζεται διαφορετικά. Οι πιο κοινοί είναι: `LC_SEGMENT_64`, `LC_LOAD_DYLINKER`, `LC_MAIN`, `LC_LOAD_DYLIB` και `LC_CODE_SIGNATURE`. ### **LC_SEGMENT/LC_SEGMENT_64** @@ -213,15 +141,15 @@ uint32_t reserved3; /* reserved */
-Είναι επίσης δυνατό να αποκτήσετε **πληροφορίες επικεφαλίδας** από τη **γραμμή εντολών** με: +Είναι επίσης δυνατό να αποκτήσετε **πληροφορίες επικεφαλίδων** από τη **γραμμή εντολών** με: ```bash otool -lv /bin/ls ``` -Κοινά τμήματα που φορτώνονται από αυτήν την εντολή: +Κοινά τμήματα που φορτώνονται από αυτή την εντολή: - **`__PAGEZERO`:** Δίνει εντολή στον πυρήνα να **χαρτογραφήσει** τη **διεύθυνση μηδέν** έτσι ώστε να **μην μπορεί να διαβαστεί, να γραφτεί ή να εκτελεστεί**. Οι μεταβλητές maxprot και minprot στη δομή είναι ρυθμισμένες σε μηδέν για να υποδείξουν ότι δεν υπάρχουν **δικαιώματα ανάγνωσης-γραφής-εκτέλεσης σε αυτή τη σελίδα**. - Αυτή η κατανομή είναι σημαντική για να **μειώσει τις ευπάθειες αποδόμησης δείκτη NULL**. Αυτό συμβαίνει επειδή το XNU επιβάλλει μια σκληρή σελίδα μηδέν που διασφαλίζει ότι η πρώτη σελίδα (μόνο η πρώτη) της μνήμης είναι μη προσβάσιμη (εκτός από το i386). Ένα δυαδικό αρχείο θα μπορούσε να πληροί αυτές τις απαιτήσεις δημιουργώντας μια μικρή \_\_PAGEZERO (χρησιμοποιώντας το `-pagezero_size`) για να καλύψει τα πρώτα 4k και να έχει την υπόλοιπη μνήμη 32bit προσβάσιμη τόσο σε λειτουργία χρήστη όσο και σε λειτουργία πυρήνα. -- **`__TEXT`**: Περιέχει **εκτελέσιμο** **κώδικα** με **δικαιώματα ανάγνωσης** και **εκτέλεσης** (όχι εγγράψιμο)**.** Κοινές ενότητες αυτού του τμήματος: +- **`__TEXT`**: Περιέχει **εκτελέσιμο** **κώδικα** με **δικαιώματα ανάγνωσης** και **εκτέλεσης** (όχι εγγράψιμα)**.** Κοινές ενότητες αυτού του τμήματος: - `__text`: Συμπιεσμένος δυαδικός κώδικας - `__const`: Σταθερά δεδομένα (μόνο ανάγνωση) - `__[c/u/os_log]string`: Σταθερές συμβολοσειρές C, Unicode ή os logs @@ -242,12 +170,12 @@ otool -lv /bin/ls - πληροφορίες dyld: Επαναφορά, Μη τεμπέλης/τεμπέλης/ασθενής κωδικοί δέσμευσης και πληροφορίες εξαγωγής - Λειτουργίες εκκίνησης: Πίνακας διευθύνσεων εκκίνησης λειτουργιών - Δεδομένα στον Κώδικα: Νησίδες δεδομένων στο \_\_text -- Πίνακας Συμβόλων: Συμβολισμοί στο δυαδικό -- Πίνακας Έμμεσων Συμβόλων: Δείκτες/συμβολισμοί stub +- Πίνακας Συμβόλων: Συμβολα σε δυαδικό +- Πίνακας Έμμεσων Συμβόλων: Δείκτες/συμβολα στήριξης - Πίνακας Συμβολοσειρών - Υπογραφή Κώδικα -- **`__OBJC`**: Περιέχει πληροφορίες που χρησιμοποιούνται από το Objective-C runtime. Αν και αυτές οι πληροφορίες μπορεί επίσης να βρεθούν στο τμήμα \_\_DATA, εντός διαφόρων τμημάτων \_\_objc\_\*. -- **`__RESTRICT`**: Ένα τμήμα χωρίς περιεχόμενο με μια μόνο ενότητα που ονομάζεται **`__restrict`** (επίσης κενή) που διασφαλίζει ότι κατά την εκτέλεση του δυαδικού, θα αγνοήσει τις μεταβλητές περιβάλλοντος DYLD. +- **`__OBJC`**: Περιέχει πληροφορίες που χρησιμοποιούνται από το Objective-C runtime. Αν και αυτές οι πληροφορίες μπορεί επίσης να βρεθούν στο τμήμα \_\_DATA, μέσα σε διάφορες ενότητες \_\_objc\_\*. +- **`__RESTRICT`**: Ένα τμήμα χωρίς περιεχόμενο με μια μόνο ενότητα που ονομάζεται **`__restrict`** (επίσης κενή) που διασφαλίζει ότι κατά την εκτέλεση του δυαδικού αρχείου, θα αγνοήσει τις μεταβλητές περιβάλλοντος DYLD. Όπως ήταν δυνατόν να δούμε στον κώδικα, **τα τμήματα υποστηρίζουν επίσης σημαίες** (αν και δεν χρησιμοποιούνται πολύ): @@ -258,7 +186,7 @@ otool -lv /bin/ls ### **`LC_UNIXTHREAD/LC_MAIN`** -**`LC_MAIN`** περιέχει το σημείο εισόδου στην **ιδιότητα entryoff.** Κατά τη διάρκεια της φόρτωσης, το **dyld** απλά **προσθέτει** αυτή την τιμή στη (στη μνήμη) **βάση του δυαδικού**, στη συνέχεια **πηδά** σε αυτή την εντολή για να ξεκινήσει την εκτέλεση του κώδικα του δυαδικού. +**`LC_MAIN`** περιέχει το σημείο εισόδου στην **ιδιότητα entryoff.** Κατά τη διάρκεια της φόρτωσης, το **dyld** απλά **προσθέτει** αυτή την τιμή στη (στη μνήμη) **βάση του δυαδικού αρχείου**, στη συνέχεια **πηδά** σε αυτή την εντολή για να ξεκινήσει την εκτέλεση του κώδικα του δυαδικού αρχείου. **`LC_UNIXTHREAD`** περιέχει τις τιμές που πρέπει να έχει ο καταχωρητής κατά την εκκίνηση του κύριου νήματος. Αυτό έχει ήδη αποσυρθεί αλλά το **`dyld`** εξακολουθεί να το χρησιμοποιεί. Είναι δυνατόν να δει κανείς τις τιμές των καταχωρητών που ορίζονται από αυτό με: ```bash @@ -291,7 +219,7 @@ cpsr 0x00000000 ### **`LC_ENCRYPTION_INFO[_64]`** -Υποστήριξη για κρυπτογράφηση δυαδικών αρχείων. Ωστόσο, φυσικά, αν ένας επιτιθέμενος καταφέρει να παραβιάσει τη διαδικασία, θα είναι σε θέση να εκφορτώσει τη μνήμη χωρίς κρυπτογράφηση. +Υποστήριξη για κρυπτογράφηση δυαδικών αρχείων. Ωστόσο, φυσικά, αν ένας επιτιθέμενος καταφέρει να παραβιάσει τη διαδικασία, θα μπορεί να εκφορτώσει τη μνήμη χωρίς κρυπτογράφηση. ### **`LC_LOAD_DYLINKER`** @@ -346,7 +274,7 @@ otool -L /bin/ls > [!NOTE] > Ένα Mach-O δυαδικό μπορεί να περιέχει έναν ή **περισσότερους** **κατασκευαστές**, που θα **εκτελούνται** **πριν** από τη διεύθυνση που καθορίζεται στο **LC_MAIN**.\ -> Οι μετατοπίσεις οποιωνδήποτε κατασκευαστών διατηρούνται στην ενότητα **\_\_mod_init_func** του τμήματος **\_\_DATA_CONST**. +> Οι μετατοπίσεις οποιωνδήποτε κατασκευαστών κρατούνται στην ενότητα **\_\_mod_init_func** του τμήματος **\_\_DATA_CONST**. ## **Δεδομένα Mach-O** @@ -363,23 +291,23 @@ otool -L /bin/ls - **Πίνακας συμβόλων**: Ο οποίος περιέχει πληροφορίες σχετικά με τη εξωτερική συνάρτηση που χρησιμοποιείται από το δυαδικό - Μπορεί επίσης να περιέχει εσωτερικές συναρτήσεις, ονόματα μεταβλητών καθώς και περισσότερα. -Για να το ελέγξετε, μπορείτε να χρησιμοποιήσετε το [**Mach-O View**](https://sourceforge.net/projects/machoview/) εργαλείο: +Για να το ελέγξετε μπορείτε να χρησιμοποιήσετε το [**Mach-O View**](https://sourceforge.net/projects/machoview/) εργαλείο:
-Ή από τη γραμμή εντολών: +Ή από το cli: ```bash size -m /bin/ls ``` ## Objetive-C Κοινές Ενότητες -In `__TEXT` segment (r-x): +Στο `__TEXT` τμήμα (r-x): -- `__objc_classname`: Ονόματα κλάσεων (strings) -- `__objc_methname`: Ονόματα μεθόδων (strings) -- `__objc_methtype`: Τύποι μεθόδων (strings) +- `__objc_classname`: Ονόματα κλάσεων (αλφαριθμητικά) +- `__objc_methname`: Ονόματα μεθόδων (αλφαριθμητικά) +- `__objc_methtype`: Τύποι μεθόδων (αλφαριθμητικά) -In `__DATA` segment (rw-): +Στο `__DATA` τμήμα (rw-): - `__objc_classlist`: Δείκτες σε όλες τις κλάσεις Objetive-C - `__objc_nlclslist`: Δείκτες σε μη-τεμπέλικες κλάσεις Objective-C diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md index 893db3c28..fced7e7c5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md @@ -7,7 +7,7 @@ Μια διαδικασία είναι μια περίπτωση ενός εκτελέσιμου που τρέχει, ωστόσο οι διαδικασίες δεν εκτελούν κώδικα, αυτές είναι νήματα. Επομένως, **οι διαδικασίες είναι απλώς δοχεία για τρέχοντα νήματα** παρέχοντας τη μνήμη, τους περιγραφείς, τις θύρες, τις άδειες... Παραδοσιακά, οι διαδικασίες ξεκινούσαν μέσα σε άλλες διαδικασίες (εκτός από το PID 1) καλώντας **`fork`** που θα δημιουργούσε μια ακριβή αντιγραφή της τρέχουσας διαδικασίας και στη συνέχεια η **παιδική διαδικασία** θα καλούσε γενικά **`execve`** για να φορτώσει το νέο εκτελέσιμο και να το εκτελέσει. Στη συνέχεια, εισήχθη το **`vfork`** για να επιταχύνει αυτή τη διαδικασία χωρίς καμία αντιγραφή μνήμης.\ -Στη συνέχεια, εισήχθη το **`posix_spawn`** συνδυάζοντας **`vfork`** και **`execve`** σε μία κλήση και αποδεχόμενο σημαίες: +Στη συνέχεια εισήχθη το **`posix_spawn`** συνδυάζοντας **`vfork`** και **`execve`** σε μία κλήση και αποδεχόμενο σημαίες: - `POSIX_SPAWN_RESETIDS`: Επαναφορά των αποτελεσματικών ταυτοτήτων στις πραγματικές ταυτότητες - `POSIX_SPAWN_SETPGROUP`: Ορισμός συσχέτισης ομάδας διαδικασιών @@ -31,18 +31,18 @@ ### Process Groups, Sessions & Coalations -**Διαδικασίες** μπορούν να εισαχθούν σε **ομάδες** για να διευκολυνθεί η διαχείρισή τους. Για παράδειγμα, οι εντολές σε ένα script shell θα είναι στην ίδια ομάδα διαδικασιών, έτσι είναι δυνατή η **σήμανση τους μαζί** χρησιμοποιώντας kill για παράδειγμα.\ -Είναι επίσης δυνατή η **ομαδοποίηση διαδικασιών σε συνεδρίες**. Όταν μια διαδικασία ξεκινά μια συνεδρία (`setsid(2)`), οι παιδικές διαδικασίες τοποθετούνται μέσα στη συνεδρία, εκτός αν ξεκινήσουν τη δική τους συνεδρία. +**Διαδικασίες** μπορούν να εισαχθούν σε **ομάδες** για να διευκολυνθεί η διαχείρισή τους. Για παράδειγμα, οι εντολές σε ένα script shell θα είναι στην ίδια ομάδα διαδικασιών, έτσι είναι δυνατό να **σημανθούν μαζί** χρησιμοποιώντας kill για παράδειγμα.\ +Είναι επίσης δυνατό να **ομαδοποιηθούν οι διαδικασίες σε συνεδρίες**. Όταν μια διαδικασία ξεκινά μια συνεδρία (`setsid(2)`), οι παιδικές διαδικασίες τοποθετούνται μέσα στη συνεδρία, εκτός αν ξεκινήσουν τη δική τους συνεδρία. -Η συμμαχία είναι ένας άλλος τρόπος ομαδοποίησης διαδικασιών στο Darwin. Μια διαδικασία που συμμετέχει σε μια συμμαχία της επιτρέπει να έχει πρόσβαση σε πόρους πισίνας, μοιράζοντας ένα βιβλίο ή αντιμετωπίζοντας το Jetsam. Οι συμμαχίες έχουν διαφορετικούς ρόλους: Ηγέτης, Υπηρεσία XPC, Επέκταση. +Η συμμαχία είναι ένας άλλος τρόπος ομαδοποίησης διαδικασιών στο Darwin. Μια διαδικασία που εντάσσεται σε μια συμμαχία της επιτρέπει να έχει πρόσβαση σε πόρους πισίνας, μοιράζοντας ένα βιβλίο ή αντιμετωπίζοντας το Jetsam. Οι συμμαχίες έχουν διαφορετικούς ρόλους: Ηγέτης, Υπηρεσία XPC, Επέκταση. ### Credentials & Personae -Κάθε διαδικασία διατηρεί **διαπιστευτήρια** που **προσδιορίζουν τα προνόμιά** της στο σύστημα. Κάθε διαδικασία θα έχει μία κύρια `uid` και μία κύρια `gid` (αν και μπορεί να ανήκει σε πολλές ομάδες).\ -Είναι επίσης δυνατή η αλλαγή του αναγνωριστικού χρήστη και ομάδας αν το δυαδικό αρχείο έχει το bit `setuid/setgid`.\ +Κάθε διαδικασία διατηρεί **διαπιστευτήρια** που **προσδιορίζουν τα προνόμιά της** στο σύστημα. Κάθε διαδικασία θα έχει μία κύρια `uid` και μία κύρια `gid` (αν και μπορεί να ανήκει σε πολλές ομάδες).\ +Είναι επίσης δυνατό να αλλάξει η ταυτότητα χρήστη και ομάδας αν το δυαδικό αρχείο έχει το bit `setuid/setgid`.\ Υπάρχουν πολλές συναρτήσεις για **ορισμό νέων uids/gids**. -Η syscall **`persona`** παρέχει ένα **εναλλακτικό** σύνολο **διαπιστευτηρίων**. Η υιοθέτηση μιας προσωπικότητας υποθέτει την `uid`, `gid` και τις συμμετοχές ομάδας **ταυτόχρονα**. Στον [**κώδικα πηγής**](https://github.com/apple/darwin-xnu/blob/main/bsd/sys/persona.h) είναι δυνατή η εύρεση της δομής: +Η syscall **`persona`** παρέχει ένα **εναλλακτικό** σύνολο **διαπιστευτηρίων**. Η υιοθέτηση μιας persona υποθέτει την uid, gid και τις συμμετοχές ομάδας **ταυτόχρονα**. Στον [**πηγαίο κώδικα**](https://github.com/apple/darwin-xnu/blob/main/bsd/sys/persona.h) είναι δυνατό να βρείτε τη δομή: ```c struct kpersona_info { uint32_t persona_info_version; uid_t persona_id; /* overlaps with UID */ @@ -76,14 +76,14 @@ char persona_name[MAXLOGNAME + 1]; - **Κανονικός Mutex (Υπογραφή: 0x4D555458):** Τυπικός mutex με αποτύπωμα μνήμης 60 bytes (56 bytes για τον mutex και 4 bytes για την υπογραφή). - **Γρήγορος Mutex (Υπογραφή: 0x4d55545A):** Παρόμοιος με έναν κανονικό mutex αλλά βελτιστοποιημένος για ταχύτερες λειτουργίες, επίσης 60 bytes σε μέγεθος. 2. **Μεταβλητές Συνθηκών:** -- Χρησιμοποιούνται για να περιμένουν να συμβούν ορισμένες συνθήκες, με μέγεθος 44 bytes (40 bytes συν 4 bytes υπογραφή). +- Χρησιμοποιούνται για να περιμένουν να συμβούν ορισμένες συνθήκες, με μέγεθος 44 bytes (40 bytes συν μια υπογραφή 4 bytes). - **Χαρακτηριστικά Μεταβλητών Συνθηκών (Υπογραφή: 0x434e4441):** Χαρακτηριστικά ρύθμισης για μεταβλητές συνθηκών, μεγέθους 12 bytes. -3. **Once Variable (Υπογραφή: 0x4f4e4345):** -- Διασφαλίζει ότι ένα κομμάτι κώδικα αρχικοποίησης εκτελείται μόνο μία φορά. Το μέγεθός του είναι 12 bytes. -4. **Κλειδώματα Ανάγνωσης-Εγγραφής:** +3. **Μεταβλητή Once (Υπογραφή: 0x4f4e4345):** +- Διασφαλίζει ότι ένα κομμάτι κώδικα αρχικοποίησης εκτελείται μόνο μία φορά. Το μέγεθός της είναι 12 bytes. +4. **Κλειδώματα Ανάγνωσης-Γραφής:** - Επιτρέπει σε πολλούς αναγνώστες ή έναν συγγραφέα ταυτόχρονα, διευκολύνοντας την αποδοτική πρόσβαση σε κοινά δεδομένα. -- **Κλείδωμα Ανάγνωσης-Εγγραφής (Υπογραφή: 0x52574c4b):** Μεγέθους 196 bytes. -- **Χαρακτηριστικά Κλειδώματος Ανάγνωσης-Εγγραφής (Υπογραφή: 0x52574c41):** Χαρακτηριστικά για κλειδώματα ανάγνωσης-εγγραφής, 20 bytes σε μέγεθος. +- **Κλείδωμα Ανάγνωσης-Γραφής (Υπογραφή: 0x52574c4b):** Μεγέθους 196 bytes. +- **Χαρακτηριστικά Κλειδώματος Ανάγνωσης-Γραφής (Υπογραφή: 0x52574c41):** Χαρακτηριστικά για κλειδώματα ανάγνωσης-γραφής, 20 bytes σε μέγεθος. > [!TIP] > Τα τελευταία 4 bytes αυτών των αντικειμένων χρησιμοποιούνται για την ανίχνευση υπερχειλίσεων. @@ -102,7 +102,7 @@ tlv_var = 10; ``` Αυτό το απόσπασμα ορίζει το `tlv_var` ως μια μεταβλητή τοπική στο νήμα. Κάθε νήμα που εκτελεί αυτόν τον κώδικα θα έχει τη δική του `tlv_var`, και οι αλλαγές που κάνει ένα νήμα στη `tlv_var` δεν θα επηρεάσουν τη `tlv_var` σε άλλο νήμα. -Στο δυαδικό Mach-O, τα δεδομένα που σχετίζονται με τις τοπικές μεταβλητές νήματος οργανώνονται σε συγκεκριμένες ενότητες: +Στο δυαδικό αρχείο Mach-O, τα δεδομένα που σχετίζονται με τις τοπικές μεταβλητές νήματος οργανώνονται σε συγκεκριμένες ενότητες: - **`__DATA.__thread_vars`**: Αυτή η ενότητα περιέχει τα μεταδεδομένα σχετικά με τις τοπικές μεταβλητές νήματος, όπως τους τύπους τους και την κατάσταση αρχικοποίησης. - **`__DATA.__thread_bss`**: Αυτή η ενότητα χρησιμοποιείται για τις τοπικές μεταβλητές νήματος που δεν έχουν αρχικοποιηθεί ρητά. Είναι ένα μέρος της μνήμης που έχει διατεθεί για δεδομένα που έχουν αρχικοποιηθεί σε μηδέν. @@ -133,19 +133,19 @@ tlv_var = 10; 3. **Χρήση:** - Αυτές οι εργασίες είναι μακροχρόνιες και συνήθως εμφανίζουν έναν δείκτη προόδου (π.χ., λήψη αρχείων, εισαγωγή δεδομένων). Είναι χαμηλότερης προτεραιότητας από τις εργασίες που ξεκινούν οι χρήστες και δεν χρειάζεται να ολοκληρωθούν άμεσα. 4. **Υπόβαθρο:** -- Αυτή η κλάση είναι για εργασίες που λειτουργούν στο παρασκήνιο και δεν είναι ορατές στον χρήστη. Αυτές μπορεί να είναι εργασίες όπως η ευρετηρίαση, η συγχρονισμός ή τα αντίγραφα ασφαλείας. Έχουν την χαμηλότερη προτεραιότητα και ελάχιστη επίδραση στην απόδοση του συστήματος. +- Αυτή η κλάση είναι για εργασίες που λειτουργούν στο παρασκήνιο και δεν είναι ορατές στον χρήστη. Αυτές μπορεί να είναι εργασίες όπως η ευρετηρίαση, η συγχρονισμένη ή οι αντίγραφα ασφαλείας. Έχουν την χαμηλότερη προτεραιότητα και ελάχιστη επίδραση στην απόδοση του συστήματος. -Χρησιμοποιώντας τις κλάσεις QoS, οι προγραμματιστές δεν χρειάζεται να διαχειρίζονται τους ακριβείς αριθμούς προτεραιότητας αλλά να επικεντρώνονται στη φύση της εργασίας, και το σύστημα βελτιστοποιεί τους πόρους CPU αναλόγως. +Χρησιμοποιώντας τις κλάσεις QoS, οι προγραμματιστές δεν χρειάζεται να διαχειρίζονται τους ακριβείς αριθμούς προτεραιότητας αλλά να εστιάζουν στη φύση της εργασίας, και το σύστημα βελτιστοποιεί τους πόρους CPU αναλόγως. -Επιπλέον, υπάρχουν διαφορετικές **πολιτικές προγραμματισμού νημάτων** που ρέουν για να καθορίσουν ένα σύνολο παραμέτρων προγραμματισμού που ο προγραμματιστής θα λάβει υπόψη. Αυτό μπορεί να γίνει χρησιμοποιώντας `thread_policy_[set/get]`. Αυτό μπορεί να είναι χρήσιμο σε επιθέσεις συνθήκης αγώνα. +Επιπλέον, υπάρχουν διαφορετικές **πολιτικές προγραμματισμού νημάτων** που ρέουν για να καθορίσουν ένα σύνολο παραμέτρων προγραμματισμού που ο προγραμματιστής θα λάβει υπόψη. Αυτό μπορεί να γίνει χρησιμοποιώντας το `thread_policy_[set/get]`. Αυτό μπορεί να είναι χρήσιμο σε επιθέσεις συνθήκης αγώνα. ## Κατάχρηση Διαδικασιών MacOS -Το MacOS, όπως κάθε άλλο λειτουργικό σύστημα, παρέχει μια ποικιλία μεθόδων και μηχανισμών για **τις διαδικασίες να αλληλεπιδρούν, να επικοινωνούν και να μοιράζονται δεδομένα**. Ενώ αυτές οι τεχνικές είναι απαραίτητες για την αποδοτική λειτουργία του συστήματος, μπορούν επίσης να καταχραστούν από απειλητικούς παράγοντες για να **εκτελέσουν κακόβουλες δραστηριότητες**. +Το MacOS, όπως κάθε άλλο λειτουργικό σύστημα, παρέχει μια ποικιλία μεθόδων και μηχανισμών για **διαδικασίες να αλληλεπιδρούν, να επικοινωνούν και να μοιράζονται δεδομένα**. Ενώ αυτές οι τεχνικές είναι απαραίτητες για την αποδοτική λειτουργία του συστήματος, μπορούν επίσης να καταχραστούν από απειλητικούς παράγοντες για να **εκτελέσουν κακόβουλες δραστηριότητες**. -### Εισαγωγή Βιβλιοθηκών +### Εισαγωγή Βιβλιοθήκης -Η Εισαγωγή Βιβλιοθηκών είναι μια τεχνική όπου ένας επιτιθέμενος **αναγκάζει μια διαδικασία να φορτώσει μια κακόβουλη βιβλιοθήκη**. Μόλις εισαχθεί, η βιβλιοθήκη εκτελείται στο πλαίσιο της στοχοθετημένης διαδικασίας, παρέχοντας στον επιτιθέμενο τις ίδιες άδειες και πρόσβαση με τη διαδικασία. +Η Εισαγωγή Βιβλιοθήκης είναι μια τεχνική όπου ένας επιτιθέμενος **αναγκάζει μια διαδικασία να φορτώσει μια κακόβουλη βιβλιοθήκη**. Μόλις εισαχθεί, η βιβλιοθήκη εκτελείται στο πλαίσιο της στοχοθετημένης διαδικασίας, παρέχοντας στον επιτιθέμενο τις ίδιες άδειες και πρόσβαση με τη διαδικασία. {{#ref}} macos-library-injection/ @@ -177,7 +177,7 @@ macos-electron-applications-injection.md ### Εισαγωγή Chromium -Είναι δυνατόν να χρησιμοποιηθούν οι σημαίες `--load-extension` και `--use-fake-ui-for-media-stream` για να εκτελέσετε μια **επίθεση man in the browser** επιτρέποντας την κλοπή πληκτρολογήσεων, κυκλοφορίας, cookies, την εισαγωγή scripts σε σελίδες...: +Είναι δυνατόν να χρησιμοποιηθούν οι σημαίες `--load-extension` και `--use-fake-ui-for-media-stream` για να εκτελέσετε μια **επίθεση man in the browser** επιτρέποντας την κλοπή πλήκτρων, κυκλοφορίας, cookies, την εισαγωγή scripts σε σελίδες...: {{#ref}} macos-chromium-injection.md @@ -201,7 +201,7 @@ macos-java-apps-injection.md ### Εισαγωγή Εφαρμογών .Net -Είναι δυνατόν να εισαχθεί κώδικας σε εφαρμογές .Net καταχρώντας τη **λειτουργικότητα αποσφαλμάτωσης .Net** (όχι προστατευμένη από τις προστασίες macOS όπως η σκληροποίηση χρόνου εκτέλεσης). +Είναι δυνατόν να εισαχθεί κώδικας σε εφαρμογές .Net καταχρώντας τη **λειτουργικότητα αποσφαλμάτωσης .Net** (όχι προστατευμένη από τις προστασίες του macOS όπως η σκληροποίηση χρόνου εκτέλεσης). {{#ref}} macos-.net-applications-injection.md @@ -225,15 +225,15 @@ macos-ruby-applications-injection.md ### Εισαγωγή Python -Αν η μεταβλητή περιβάλλοντος **`PYTHONINSPECT`** είναι ρυθμισμένη, η διαδικασία python θα εισέλθει σε μια CLI python μόλις ολοκληρωθεί. Είναι επίσης δυνατόν να χρησιμοποιηθεί το **`PYTHONSTARTUP`** για να υποδείξει ένα σενάριο python που θα εκτελείται στην αρχή μιας διαδραστικής συνεδρίας.\ +Αν η μεταβλητή περιβάλλοντος **`PYTHONINSPECT`** είναι ρυθμισμένη, η διαδικασία python θα εισέλθει σε μια CLI python μόλις ολοκληρωθεί. Είναι επίσης δυνατόν να χρησιμοποιήσετε το **`PYTHONSTARTUP`** για να υποδείξετε ένα σενάριο python που θα εκτελείται στην αρχή μιας διαδραστικής συνεδρίας.\ Ωστόσο, σημειώστε ότι το σενάριο **`PYTHONSTARTUP`** δεν θα εκτελείται όταν το **`PYTHONINSPECT`** δημιουργεί τη διαδραστική συνεδρία. -Άλλες μεταβλητές περιβάλλοντος όπως **`PYTHONPATH`** και **`PYTHONHOME`** θα μπορούσαν επίσης να είναι χρήσιμες για να κάνουν μια εντολή python να εκτελεί αυθαίρετο κώδικα. +Άλλες μεταβλητές περιβάλλοντος όπως **`PYTHONPATH`** και **`PYTHONHOME`** θα μπορούσαν επίσης να είναι χρήσιμες για να κάνετε μια εντολή python να εκτελεί αυθαίρετο κώδικα. Σημειώστε ότι τα εκτελέσιμα αρχεία που έχουν μεταγλωττιστεί με **`pyinstaller`** δεν θα χρησιμοποιούν αυτές τις μεταβλητές περιβάλλοντος ακόμη και αν εκτελούνται χρησιμοποιώντας μια ενσωματωμένη python. > [!CAUTION] -> Γενικά δεν μπόρεσα να βρω έναν τρόπο να κάνω την python να εκτελεί αυθαίρετο κώδικα καταχρώντας τις μεταβλητές περιβάλλοντος.\ +> Γενικά, δεν μπόρεσα να βρω έναν τρόπο να κάνω την python να εκτελεί αυθαίρετο κώδικα καταχρώντας τις μεταβλητές περιβάλλοντος.\ > Ωστόσο, οι περισσότεροι άνθρωποι εγκαθιστούν την python χρησιμοποιώντας **Hombrew**, το οποίο θα εγκαταστήσει την python σε μια **γραφτή τοποθεσία** για τον προεπιλεγμένο διαχειριστή χρήστη. Μπορείτε να την καταλάβετε με κάτι τέτοιο: > > ```bash @@ -257,7 +257,7 @@ macos-ruby-applications-injection.md - Χρησιμοποιώντας **Μεταβλητές Περιβάλλοντος**: Θα παρακολουθεί την παρουσία οποιασδήποτε από τις παρακάτω μεταβλητές περιβάλλοντος: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** και **`ELECTRON_RUN_AS_NODE`** - Χρησιμοποιώντας κλήσεις **`task_for_pid`**: Για να βρει πότε μια διαδικασία θέλει να αποκτήσει το **task port μιας άλλης** που επιτρέπει την εισαγωγή κώδικα στη διαδικασία. - **Παράμετροι εφαρμογών Electron**: Κάποιος μπορεί να χρησιμοποιήσει τα **`--inspect`**, **`--inspect-brk`** και **`--remote-debugging-port`** επιχειρήματα γραμμής εντολών για να ξεκινήσει μια εφαρμογή Electron σε λειτουργία αποσφαλμάτωσης, και έτσι να εισάγει κώδικα σε αυτήν. -- Χρησιμοποιώντας **συμβολικούς συνδέσμους** ή **σκληρούς συνδέσμους**: Συνήθως η πιο κοινή κατάχρηση είναι να **τοποθετήσετε έναν σύνδεσμο με τα δικαιώματα του χρήστη μας**, και **να τον δείξετε σε μια τοποθεσία υψηλότερης άδειας**. Η ανίχνευση είναι πολύ απλή και για τους σκληρούς και για τους συμβολικούς συνδέσμους. Αν η διαδικασία που δημιουργεί τον σύνδεσμο έχει **διαφορετικό επίπεδο άδειας** από το αρχείο στόχο, δημιουργούμε μια **ειδοποίηση**. Δυστυχώς, στην περίπτωση των συμβολικών συνδέσμων, η απαγόρευση δεν είναι δυνατή, καθώς δεν έχουμε πληροφορίες σχετικά με τον προορισμό του συνδέσμου πριν από τη δημιουργία του. Αυτή είναι μια περιοριστική του πλαισίου EndpointSecuriy της Apple. +- Χρησιμοποιώντας **συμβολικούς συνδέσμους** ή **σκληρούς συνδέσμους**: Συνήθως η πιο κοινή κατάχρηση είναι να **τοποθετήσετε έναν σύνδεσμο με τα δικαιώματα του χρήστη μας**, και **να τον δείξετε σε μια τοποθεσία υψηλότερης άδειας**. Η ανίχνευση είναι πολύ απλή και για τους σκληρούς και για τους συμβολικούς συνδέσμους. Αν η διαδικασία που δημιουργεί τον σύνδεσμο έχει **διαφορετικό επίπεδο άδειας** από το αρχείο στόχο, δημιουργούμε μια **ειδοποίηση**. Δυστυχώς, στην περίπτωση των συμβολικών συνδέσμων, η απαγόρευση δεν είναι δυνατή, καθώς δεν έχουμε πληροφορίες σχετικά με τον προορισμό του συνδέσμου πριν από τη δημιουργία του. Αυτή είναι μια περιοριστική δυνατότητα του πλαισίου EndpointSecuriy της Apple. ### Κλήσεις που γίνονται από άλλες διαδικασίες diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md index 430008d64..aa0d86200 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md @@ -93,7 +93,7 @@ vmmap -pages 35829 | grep "rwx/rwx" ``` Η τοποθέτηση ενός σημείου για την επαναγραφή ενός δείκτη συνάρτησης είναι απαραίτητη, και στο .NET Core, αυτό μπορεί να γίνει στοχεύοντας τον **Dynamic Function Table (DFT)**. Αυτός ο πίνακας, που περιγράφεται στο [`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h), χρησιμοποιείται από το runtime για τις βοηθητικές συναρτήσεις JIT compilation. -Για συστήματα x64, η αναζήτηση υπογραφών μπορεί να χρησιμοποιηθεί για να βρει μια αναφορά στο σύμβολο `_hlpDynamicFuncTable` στο `libcorclr.dll`. +Για συστήματα x64, η αναζήτηση υπογραφών μπορεί να χρησιμοποιηθεί για να βρεθεί μια αναφορά στο σύμβολο `_hlpDynamicFuncTable` στο `libcorclr.dll`. Η συνάρτηση debugger `MT_GetDCB` παρέχει χρήσιμες πληροφορίες, συμπεριλαμβανομένης της διεύθυνσης μιας βοηθητικής συνάρτησης, `m_helperRemoteStartAddr`, που υποδεικνύει την τοποθεσία του `libcorclr.dll` στη μνήμη της διαδικασίας. Αυτή η διεύθυνση χρησιμοποιείται στη συνέχεια για να ξεκινήσει μια αναζήτηση για το DFT και να επαναγραφεί ένας δείκτης συνάρτησης με τη διεύθυνση του shellcode. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md index d32316f39..dc34aca8a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md @@ -4,7 +4,7 @@ ## Basic Information -Οι περιηγητές που βασίζονται στο Chromium, όπως το Google Chrome, το Microsoft Edge, το Brave και άλλοι. Αυτοί οι περιηγητές είναι χτισμένοι πάνω στο έργο ανοιχτού κώδικα Chromium, που σημαίνει ότι μοιράζονται μια κοινή βάση και, επομένως, έχουν παρόμοιες λειτουργίες και επιλογές προγραμματιστή. +Οι περιηγητές που βασίζονται στο Chromium, όπως το Google Chrome, το Microsoft Edge, το Brave και άλλοι. Αυτοί οι περιηγητές είναι χτισμένοι πάνω στο έργο ανοιχτού κώδικα Chromium, που σημαίνει ότι μοιράζονται μια κοινή βάση και, επομένως, έχουν παρόμοιες λειτουργίες και επιλογές προγραμματιστών. #### `--load-extension` Flag @@ -12,7 +12,7 @@ #### `--use-fake-ui-for-media-stream` Flag -Η σημαία `--use-fake-ui-for-media-stream` είναι μια άλλη επιλογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί για να ξεκινήσει περιηγητές που βασίζονται στο Chromium. Αυτή η σημαία έχει σχεδιαστεί για να **παρακάμπτει τις κανονικές προτροπές χρήστη που ζητούν άδεια για πρόσβαση σε ροές μέσων από την κάμερα και το μικρόφωνο**. Όταν χρησιμοποιείται αυτή η σημαία, ο περιηγητής χορηγεί αυτόματα άδεια σε οποιαδήποτε ιστοσελίδα ή εφαρμογή ζητά πρόσβαση στην κάμερα ή το μικρόφωνο. +Η σημαία `--use-fake-ui-for-media-stream` είναι μια άλλη επιλογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί για να ξεκινήσει περιηγητές που βασίζονται στο Chromium. Αυτή η σημαία έχει σχεδιαστεί για να **παρακάμπτει τις κανονικές προτροπές του χρήστη που ζητούν άδεια για πρόσβαση σε ροές μέσων από την κάμερα και το μικρόφωνο**. Όταν χρησιμοποιείται αυτή η σημαία, ο περιηγητής χορηγεί αυτόματα άδεια σε οποιαδήποτε ιστοσελίδα ή εφαρμογή ζητά πρόσβαση στην κάμερα ή το μικρόφωνο. ### Tools diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md index 4ce6137ec..42c205d30 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md @@ -17,7 +17,7 @@ 1. **Αρχική Ρύθμιση**: - Δημιουργήστε ένα νέο αρχείο NIB χρησιμοποιώντας το XCode. - Προσθέστε ένα Αντικείμενο στην διεπαφή, ρυθμίζοντας την κλάση του σε `NSAppleScript`. -- Ρυθμίστε την αρχική ιδιότητα `source` μέσω των Χαρακτηριστικών Χρόνου Εκτέλεσης που Ορίζονται από τον Χρήστη. +- Ρυθμίστε την αρχική ιδιότητα `source` μέσω των User Defined Runtime Attributes. 2. **Gadget Εκτέλεσης Κώδικα**: - Η ρύθμιση διευκολύνει την εκτέλεση AppleScript κατόπιν αιτήματος. - Ενσωματώστε ένα κουμπί για να ενεργοποιήσετε το αντικείμενο `Apple Script`, ενεργοποιώντας συγκεκριμένα τον επιλεγέα `executeAndReturnError:`. @@ -30,13 +30,13 @@ set theDialogText to "PWND" display dialog theDialogText ``` -- Δοκιμάστε εκτελώντας το στον αποσφαλματωτή XCode και κάνοντας κλικ στο κουμπί. +- Δοκιμάστε εκτελώντας το στον debugger του XCode και κάνοντας κλικ στο κουμπί. #### Στοχοποίηση μιας Εφαρμογής (Παράδειγμα: Pages) 1. **Προετοιμασία**: - Αντιγράψτε την στοχοθετημένη εφαρμογή (π.χ., Pages) σε έναν ξεχωριστό φάκελο (π.χ., `/tmp/`). -- Ξεκινήστε την εφαρμογή για να παρακάμψετε τα ζητήματα του Gatekeeper και να την αποθηκεύσετε στην κρυφή μνήμη. +- Ξεκινήστε την εφαρμογή για να παρακάμψετε τα προβλήματα του Gatekeeper και να την αποθηκεύσετε στην κρυφή μνήμη. 2. **Αντικατάσταση Αρχείου NIB**: - Αντικαταστήστε ένα υπάρχον αρχείο NIB (π.χ., About Panel NIB) με το κατασκευασμένο αρχείο DirtyNIB. 3. **Εκτέλεση**: @@ -48,7 +48,7 @@ display dialog theDialogText ### Δείγμα Κώδικα: Κακόβουλο Αρχείο .xib -- Αποκτήστε πρόσβαση και αναθεωρήστε ένα [**δείγμα κακόβουλου αρχείου .xib**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4) που δείχνει την εκτέλεση αυθαίρετου κώδικα. +- Αποκτήστε πρόσβαση και ελέγξτε ένα [**δείγμα κακόβουλου αρχείου .xib**](https://gist.github.com/xpn/16bfbe5a3f64fedfcc1822d0562636b4) που δείχνει την εκτέλεση αυθαίρετου κώδικα. ### Άλλο Παράδειγμα diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md index 793a8ba33..e349433f7 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -12,14 +12,14 @@ Αυτές οι τεχνικές θα συζητηθούν στη συνέχεια, αλλά πρόσφατα το Electron έχει προσθέσει αρκετές **σημαίες ασφαλείας για να τις αποτρέψει**. Αυτές είναι οι [**Electron Fuses**](https://www.electronjs.org/docs/latest/tutorial/fuses) και αυτές είναι οι οποίες χρησιμοποιούνται για να **αποτρέψουν** τις εφαρμογές Electron στο macOS από το **να φορτώνουν αυθαίρετο κώδικα**: - **`RunAsNode`**: Αν είναι απενεργοποιημένο, αποτρέπει τη χρήση της μεταβλητής περιβάλλοντος **`ELECTRON_RUN_AS_NODE`** για την έγχυση κώδικα. -- **`EnableNodeCliInspectArguments`**: Αν είναι απενεργοποιημένο, παράμετροι όπως `--inspect`, `--inspect-brk` δεν θα γίνουν σεβαστοί. Αποφεύγοντας αυτόν τον τρόπο για να εγχύσουν κώδικα. +- **`EnableNodeCliInspectArguments`**: Αν είναι απενεργοποιημένο, παράμετροι όπως `--inspect`, `--inspect-brk` δεν θα γίνουν σεβαστοί. Αποφεύγοντας αυτόν τον τρόπο για να εγχυθεί κώδικας. - **`EnableEmbeddedAsarIntegrityValidation`**: Αν είναι ενεργοποιημένο, το φορτωμένο **`asar`** **αρχείο** θα **επικυρωθεί** από το macOS. **Αποτρέποντας** με αυτόν τον τρόπο **την έγχυση κώδικα** τροποποιώντας τα περιεχόμενα αυτού του αρχείου. - **`OnlyLoadAppFromAsar`**: Αν αυτό είναι ενεργοποιημένο, αντί να ψάχνει να φορτώσει με την εξής σειρά: **`app.asar`**, **`app`** και τελικά **`default_app.asar`**. Θα ελέγξει και θα χρησιμοποιήσει μόνο το app.asar, διασφαλίζοντας έτσι ότι όταν **συνδυάζεται** με τη σημαία **`embeddedAsarIntegrityValidation`** είναι **αδύνατο** να **φορτωθεί μη επικυρωμένος κώδικας**. - **`LoadBrowserProcessSpecificV8Snapshot`**: Αν είναι ενεργοποιημένο, η διαδικασία του προγράμματος περιήγησης χρησιμοποιεί το αρχείο που ονομάζεται `browser_v8_context_snapshot.bin` για το V8 snapshot της. Μια άλλη ενδιαφέρουσα σημαία που δεν θα αποτρέπει την έγχυση κώδικα είναι: -- **EnableCookieEncryption**: Αν είναι ενεργοποιημένο, το cookie store στον δίσκο είναι κρυπτογραφημένο χρησιμοποιώντας κλειδιά κρυπτογραφίας επιπέδου OS. +- **EnableCookieEncryption**: Αν είναι ενεργοποιημένο, το cookie store στον δίσκο κρυπτογραφείται χρησιμοποιώντας κλειδιά κρυπτογραφίας επιπέδου OS. ### Checking Electron Fuses @@ -46,11 +46,11 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches ``` -Μπορείτε να φορτώσετε αυτό το αρχείο στο [https://hexed.it/](https://hexed.it/) και να αναζητήσετε την προηγούμενη συμβολοσειρά. Μετά από αυτή τη συμβολοσειρά μπορείτε να δείτε σε ASCII έναν αριθμό "0" ή "1" που υποδεικνύει αν κάθε ασφάλεια είναι απενεργοποιημένη ή ενεργοποιημένη. Απλά τροποποιήστε τον κωδικό hex (`0x30` είναι `0` και `0x31` είναι `1`) για **να τροποποιήσετε τις τιμές ασφάλειας**. +Μπορείτε να φορτώσετε αυτό το αρχείο στο [https://hexed.it/](https://hexed.it/) και να αναζητήσετε την προηγούμενη συμβολοσειρά. Μετά από αυτή τη συμβολοσειρά μπορείτε να δείτε σε ASCII έναν αριθμό "0" ή "1" που υποδεικνύει αν κάθε ασφάλεια είναι απενεργοποιημένη ή ενεργοποιημένη. Απλώς τροποποιήστε τον κωδικό hex (`0x30` είναι `0` και `0x31` είναι `1`) για να **τροποποιήσετε τις τιμές ασφάλειας**.
-Σημειώστε ότι αν προσπαθήσετε να **επικαλύψετε** το **`Electron Framework`** δυαδικό αρχείο μέσα σε μια εφαρμογή με αυτούς τους τροποποιημένους byte, η εφαρμογή δεν θα εκτελείται. +Σημειώστε ότι αν προσπαθήσετε να **επικαλύψετε** το **`Electron Framework`** δυαδικό αρχείο μέσα σε μια εφαρμογή με αυτά τα bytes τροποποιημένα, η εφαρμογή δεν θα εκτελείται. ## RCE προσθήκη κώδικα σε εφαρμογές Electron @@ -64,7 +64,7 @@ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions > > Κάνοντάς το αυτό το μονοπάτι επίθεσης πιο περίπλοκο (ή αδύνατο). -Σημειώστε ότι είναι δυνατόν να παρακαμφθεί η απαίτηση της **`kTCCServiceSystemPolicyAppBundles`** αντιγράφοντας την εφαρμογή σε άλλο κατάλογο (όπως **`/tmp`**), μετονομάζοντας τον φάκελο **`app.app/Contents`** σε **`app.app/NotCon`**, **τροποποιώντας** το αρχείο **asar** με τον **κακόβουλο** κώδικά σας, μετονομάζοντάς το πίσω σε **`app.app/Contents`** και εκτελώντας το. +Σημειώστε ότι είναι δυνατόν να παρακάμψετε την απαίτηση της **`kTCCServiceSystemPolicyAppBundles`** αντιγράφοντας την εφαρμογή σε άλλο κατάλογο (όπως **`/tmp`**), μετονομάζοντας τον φάκελο **`app.app/Contents`** σε **`app.app/NotCon`**, **τροποποιώντας** το αρχείο **asar** με τον **κακόβουλο** κώδικά σας, μετονομάζοντάς το πίσω σε **`app.app/Contents`** και εκτελώντας το. Μπορείτε να αποσυμπιέσετε τον κώδικα από το αρχείο asar με: ```bash @@ -123,7 +123,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord ``` > [!CAUTION] -> Αν ο διακόπτης **`EnableNodeOptionsEnvironmentVariable`** είναι **απενεργοποιημένος**, η εφαρμογή θα **αγνοήσει** τη μεταβλητή περιβάλλοντος **NODE_OPTIONS** κατά την εκκίνηση, εκτός αν η μεταβλητή περιβάλλοντος **`ELECTRON_RUN_AS_NODE`** είναι ρυθμισμένη, η οποία θα **αγνοηθεί** επίσης αν ο διακόπτης **`RunAsNode`** είναι απενεργοποιημένος. +> Αν η ασφάλεια **`EnableNodeOptionsEnvironmentVariable`** είναι **απενεργοποιημένη**, η εφαρμογή θα **αγνοήσει** τη μεταβλητή περιβάλλοντος **NODE_OPTIONS** κατά την εκκίνηση, εκτός αν η μεταβλητή περιβάλλοντος **`ELECTRON_RUN_AS_NODE`** είναι ρυθμισμένη, η οποία θα **αγνοηθεί** επίσης αν η ασφάλεια **`RunAsNode`** είναι απενεργοποιημένη. > > Αν δεν ρυθμίσετε **`ELECTRON_RUN_AS_NODE`**, θα βρείτε το **σφάλμα**: `Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.` @@ -169,7 +169,11 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00", ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}') print(ws.recv() ``` -Σε [**αυτή την ανάρτηση**](https://hackerone.com/reports/1274695), αυτή η αποσφαλμάτωση κακοποιείται για να κάνει ένα headless chrome **να κατεβάζει αυθαίρετα αρχεία σε αυ +Σε [**αυτήν την ανάρτηση**](https://hackerone.com/reports/1274695), αυτή η αποσφαλμάτωση κακοποιείται για να κάνει ένα headless chrome **να κατεβάζει αυθαίρετα αρχεία σε αυθαίρετες τοποθεσίες**. + +### Εισαγωγή από το App Plist + +Μπορείτε να κακοποιήσετε αυτήν την env μεταβλητή σε ένα plist για να διατηρήσετε την επιμονή προσθέτοντας αυτά τα κλειδιά: ```xml ProgramArguments diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md index b598110d6..4b7135e80 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md @@ -6,7 +6,7 @@ Δημιουργήστε ένα **dylib** με μια ενότητα **`__interpose` (`__DATA___interpose`)** (ή μια ενότητα με σημαία **`S_INTERPOSING`**) που περιέχει ζεύγη **δείκτες συναρτήσεων** που αναφέρονται στις **αρχικές** και **αντικαταστάσιμες** συναρτήσεις. -Στη συνέχεια, **εισάγετε** το dylib με **`DYLD_INSERT_LIBRARIES`** (η διαμεσολάβηση πρέπει να συμβαίνει πριν φορτωθεί η κύρια εφαρμογή). Προφανώς, οι [**περιορισμοί** που εφαρμόζονται στη χρήση του **`DYLD_INSERT_LIBRARIES`** ισχύουν και εδώ](macos-library-injection/#check-restrictions). +Στη συνέχεια, **εισάγετε** το dylib με **`DYLD_INSERT_LIBRARIES`** (η διαμεσολάβηση πρέπει να συμβαίνει πριν φορτωθεί η κύρια εφαρμογή). Προφανώς, οι [**περιορισμοί** που ισχύουν για τη χρήση του **`DYLD_INSERT_LIBRARIES`** ισχύουν και εδώ](macos-library-injection/#check-restrictions). ### Interpose printf @@ -78,15 +78,15 @@ DYLD_INSERT_LIBRARIES=./interpose2.dylib ./hello Hello from interpose ``` > [!WARNING] -> Η **`DYLD_PRINT_INTERPOSTING`** μεταβλητή περιβάλλοντος μπορεί να χρησιμοποιηθεί για την αποσφαλμάτωση της παρεμβολής και θα εκτυπώσει τη διαδικασία παρεμβολής. +> Η μεταβλητή περιβάλλοντος **`DYLD_PRINT_INTERPOSTING`** μπορεί να χρησιμοποιηθεί για την αποσφαλμάτωση της διαμεσολάβησης και θα εκτυπώσει τη διαδικασία διαμεσολάβησης. -Επίσης σημειώστε ότι **η παρεμβολή συμβαίνει μεταξύ της διαδικασίας και των φορτωμένων βιβλιοθηκών**, δεν λειτουργεί με την κρυφή μνήμη κοινών βιβλιοθηκών. +Επίσης, σημειώστε ότι **η διαμεσολάβηση συμβαίνει μεταξύ της διαδικασίας και των φορτωμένων βιβλιοθηκών**, δεν λειτουργεί με την κρυφή μνήμη κοινών βιβλιοθηκών. -### Δυναμική Παρεμβολή +### Δυναμική Διαμεσολάβηση -Τώρα είναι επίσης δυνατό να παρεμβληθεί μια συνάρτηση δυναμικά χρησιμοποιώντας τη συνάρτηση **`dyld_dynamic_interpose`**. Αυτό επιτρέπει την προγραμματική παρεμβολή μιας συνάρτησης σε πραγματικό χρόνο αντί να το κάνετε μόνο από την αρχή. +Τώρα είναι επίσης δυνατό να διαμεσολαβήσετε μια συνάρτηση δυναμικά χρησιμοποιώντας τη συνάρτηση **`dyld_dynamic_interpose`**. Αυτό επιτρέπει την προγραμματική διαμεσολάβηση μιας συνάρτησης σε πραγματικό χρόνο αντί να το κάνετε μόνο από την αρχή. -Απλώς χρειάζεται να υποδείξετε τα **ζεύγη** της **συνάρτησης που θα αντικατασταθεί και της συνάρτησης αντικατάστασης**. +Απλώς χρειάζεται να υποδείξετε τα **tuples** της **συνάρτησης που θα αντικατασταθεί και της συνάρτησης αντικατάστασης**. ```c struct dyld_interpose_tuple { const void* replacement; @@ -95,20 +95,20 @@ const void* replacee; extern void dyld_dynamic_interpose(const struct mach_header* mh, const struct dyld_interpose_tuple array[], size_t count); ``` -## Μέθοδος Swizzling +## Method Swizzling -Στο ObjectiveC, έτσι καλείται μια μέθοδος: **`[myClassInstance nameOfTheMethodFirstParam:param1 secondParam:param2]`** +Στην ObjectiveC, έτσι καλείται μια μέθοδος: **`[myClassInstance nameOfTheMethodFirstParam:param1 secondParam:param2]`** Απαιτείται το **αντικείμενο**, η **μέθοδος** και οι **παράμετροι**. Και όταν καλείται μια μέθοδος, ένα **msg αποστέλλεται** χρησιμοποιώντας τη συνάρτηση **`objc_msgSend`**: `int i = ((int (*)(id, SEL, NSString *, NSString *))objc_msgSend)(someObject, @selector(method1p1:p2:), value1, value2);` -Το αντικείμενο είναι **`someObject`**, η μέθοδος είναι **`@selector(method1p1:p2:)`** και οι παράμετροι είναι **value1**, **value2**. +Το αντικείμενο είναι **`someObject`**, η μέθοδος είναι **`@selector(method1p1:p2:)`** και τα επιχειρήματα είναι **value1**, **value2**. Ακολουθώντας τις δομές αντικειμένων, είναι δυνατή η πρόσβαση σε ένα **πίνακα μεθόδων** όπου οι **ονομασίες** και οι **δείκτες** στον κώδικα της μεθόδου είναι **τοποθετημένοι**. > [!CAUTION] > Σημειώστε ότι επειδή οι μέθοδοι και οι κλάσεις προσπελάζονται με βάση τα ονόματά τους, αυτές οι πληροφορίες αποθηκεύονται στο δυαδικό αρχείο, επομένως είναι δυνατή η ανάκτησή τους με `otool -ov ` ή [`class-dump `](https://github.com/nygard/class-dump) -### Πρόσβαση στις ακατέργαστες μεθόδους +### Accessing the raw methods Είναι δυνατή η πρόσβαση στις πληροφορίες των μεθόδων όπως το όνομα, ο αριθμός παραμέτρων ή η διεύθυνση όπως στο παρακάτω παράδειγμα: ```objectivec @@ -226,7 +226,7 @@ return 0; } ``` > [!WARNING] -> Σε αυτή την περίπτωση, αν ο **κωδικός υλοποίησης της νόμιμης** μεθόδου **ελέγχει** το **όνομα** της **μεθόδου**, θα μπορούσε να **ανιχνεύσει** αυτή τη swizzling και να την αποτρέψει από το να εκτελεστεί. +> Σε αυτή την περίπτωση, αν ο **κωδικός υλοποίησης της νόμιμης** μεθόδου **επαληθεύει** το **όνομα** της **μεθόδου**, θα μπορούσε να **ανιχνεύσει** αυτή τη swizzling και να την αποτρέψει από το να εκτελεστεί. > > Η παρακάτω τεχνική δεν έχει αυτόν τον περιορισμό. @@ -290,11 +290,11 @@ return 0; Σε αυτή τη σελίδα συζητήθηκαν διάφοροι τρόποι για να γίνει hook σε συναρτήσεις. Ωστόσο, περιλάμβαναν **την εκτέλεση κώδικα μέσα στη διαδικασία για επίθεση**. -Για να το κάνετε αυτό, η πιο εύκολη τεχνική είναι να εισάγετε ένα [Dyld μέσω μεταβλητών περιβάλλοντος ή hijacking](macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md). Ωστόσο, υποθέτω ότι αυτό θα μπορούσε επίσης να γίνει μέσω [Dylib process injection](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port). +Για να το κάνετε αυτό, η πιο εύκολη τεχνική που μπορείτε να χρησιμοποιήσετε είναι να εισάγετε ένα [Dyld μέσω μεταβλητών περιβάλλοντος ή hijacking](macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md). Ωστόσο, υποθέτω ότι αυτό θα μπορούσε επίσης να γίνει μέσω [Dylib process injection](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port). Ωστόσο, και οι δύο επιλογές είναι **περιορισμένες** σε **μη προστατευμένα** δυαδικά αρχεία/διαδικασίες. Ελέγξτε κάθε τεχνική για να μάθετε περισσότερα σχετικά με τους περιορισμούς. -Ωστόσο, μια επίθεση hooking function είναι πολύ συγκεκριμένη, ένας επιτιθέμενος θα το κάνει αυτό για να **κλέψει ευαίσθητες πληροφορίες από μέσα σε μια διαδικασία** (αν όχι, θα κάνατε απλώς μια επίθεση injection διαδικασίας). Και αυτές οι ευαίσθητες πληροφορίες μπορεί να βρίσκονται σε εφαρμογές που έχει κατεβάσει ο χρήστης, όπως το MacPass. +Ωστόσο, μια επίθεση hooking function είναι πολύ συγκεκριμένη, ένας επιτιθέμενος θα το κάνει αυτό για να **κλέψει ευαίσθητες πληροφορίες από μέσα σε μια διαδικασία** (αν όχι, θα κάνατε απλώς μια επίθεση injection διαδικασίας). Και αυτές οι ευαίσθητες πληροφορίες μπορεί να βρίσκονται σε εφαρμογές που έχουν κατεβάσει οι χρήστες, όπως το MacPass. Έτσι, το vector του επιτιθέμενου θα ήταν είτε να βρει μια ευπάθεια είτε να αφαιρέσει την υπογραφή της εφαρμογής, εισάγοντας τη μεταβλητή περιβάλλοντος **`DYLD_INSERT_LIBRARIES`** μέσω του Info.plist της εφαρμογής προσθέτοντας κάτι όπως: ```xml diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md index 558c8ba44..d01ee7569 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md @@ -20,7 +20,7 @@ Τα δικαιώματα θύρας, τα οποία καθορίζουν ποιες λειτουργίες μπορεί να εκτελέσει μια task, είναι κλειδί για αυτή την επικοινωνία. Τα πιθανά **δικαιώματα θύρας** είναι ([ορισμοί από εδώ](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στη θύρα. Οι Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε θύρα** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφές αρχείων στο αναγνωστικό άκρο ενός σωλήνα). +- **Δικαίωμα λήψης**, το οποίο επιτρέπει τη λήψη μηνυμάτων που αποστέλλονται στη θύρα. Οι Mach ports είναι MPSC (πολλοί παραγωγοί, ένας καταναλωτής) ουρές, που σημαίνει ότι μπορεί να υπάρχει μόνο **ένα δικαίωμα λήψης για κάθε θύρα** σε ολόκληρο το σύστημα (σε αντίθεση με τους σωλήνες, όπου πολλές διαδικασίες μπορούν να κατέχουν περιγραφείς αρχείων στο αναγνωριστικό ανάγνωσης ενός σωλήνα). - Μια **task με το Δικαίωμα Λήψης** μπορεί να λαμβάνει μηνύματα και **να δημιουργεί Δικαιώματα Αποστολής**, επιτρέποντάς της να στέλνει μηνύματα. Αρχικά μόνο η **δική της task έχει Δικαίωμα Λήψης πάνω στη θύρα** της. - Εάν ο ιδιοκτήτης του Δικαιώματος Λήψης **πεθάνει** ή το σκοτώσει, το **δικαίωμα αποστολής γίνεται άχρηστο (νεκρό όνομα).** - **Δικαίωμα αποστολής**, το οποίο επιτρέπει την αποστολή μηνυμάτων στη θύρα. @@ -35,7 +35,7 @@ ### File Ports -Οι θύρες αρχείων επιτρέπουν την ενσωμάτωση περιγραφών αρχείων σε Mach ports (χρησιμοποιώντας δικαιώματα Mach port). Είναι δυνατή η δημιουργία ενός `fileport` από μια δεδομένη FD χρησιμοποιώντας `fileport_makeport` και η δημιουργία μιας FD από μια fileport χρησιμοποιώντας `fileport_makefd`. +Οι θύρες αρχείων επιτρέπουν την ενσωμάτωση περιγραφέων αρχείων σε Mach ports (χρησιμοποιώντας δικαιώματα Mach port). Είναι δυνατή η δημιουργία ενός `fileport` από έναν δεδομένο FD χρησιμοποιώντας το `fileport_makeport` και η δημιουργία ενός FD από μια fileport χρησιμοποιώντας το `fileport_makefd`. ### Establishing a communication @@ -43,12 +43,12 @@ Για αυτό, εμπλέκεται ο **bootstrap server** (**launchd** στο mac), καθώς **ο καθένας μπορεί να αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στον bootstrap server**, είναι δυνατή η αίτηση για ένα δικαίωμα να στείλει ένα μήνυμα σε μια άλλη διαδικασία: -1. Η task **A** δημιουργεί μια **νέα θύρα**, αποκτώντας το **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** πάνω της. -2. Η task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για τη θύρα**. -3. Η task **A** καθορίζει μια **σύνδεση** με τον **bootstrap server**, και **του στέλνει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** για τη θύρα που δημιούργησε στην αρχή. +1. Η Task **A** δημιουργεί μια **νέα θύρα**, αποκτώντας το **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** πάνω της. +2. Η Task **A**, ως κάτοχος του Δικαιώματος Λήψης, **δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ για τη θύρα**. +3. Η Task **A** καθορίζει μια **σύνδεση** με τον **bootstrap server**, και **του στέλνει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** για τη θύρα που δημιούργησε στην αρχή. - Θυμηθείτε ότι ο καθένας μπορεί να αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στον bootstrap server. -4. Η task A στέλνει ένα μήνυμα `bootstrap_register` στον bootstrap server για **να συσχετίσει τη δεδομένη θύρα με ένα όνομα** όπως `com.apple.taska` -5. Η task **B** αλληλεπιδρά με τον **bootstrap server** για να εκτελέσει μια bootstrap **αναζήτηση για το όνομα υπηρεσίας** (`bootstrap_lookup`). Έτσι, ο bootstrap server μπορεί να απαντήσει, η task B θα του στείλει ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ σε μια θύρα που δημιούργησε προηγουμένως** μέσα στο μήνυμα αναζήτησης. Εάν η αναζήτηση είναι επιτυχής, ο **server διπλασιάζει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** που έλαβε από την Task A και **το μεταδίδει στην Task B**. +4. Η Task A στέλνει ένα μήνυμα `bootstrap_register` στον bootstrap server για **να συσχετίσει τη δεδομένη θύρα με ένα όνομα** όπως `com.apple.taska` +5. Η Task **B** αλληλεπιδρά με τον **bootstrap server** για να εκτελέσει μια bootstrap **αναζήτηση για την υπηρεσία** ονόματος (`bootstrap_lookup`). Έτσι, ο bootstrap server μπορεί να απαντήσει, η task B θα του στείλει ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ σε μια θύρα που δημιούργησε προηγουμένως** μέσα στο μήνυμα αναζήτησης. Εάν η αναζήτηση είναι επιτυχής, ο **server διπλασιάζει το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ** που έλαβε από την Task A και **το μεταδίδει στην Task B**. - Θυμηθείτε ότι ο καθένας μπορεί να αποκτήσει ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στον bootstrap server. 6. Με αυτό το ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, η **Task B** είναι ικανή να **στείλει** ένα **μήνυμα** **στην Task A**. 7. Για μια αμφίδρομη επικοινωνία, συνήθως η task **B** δημιουργεί μια νέα θύρα με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). @@ -59,13 +59,13 @@ Για αυτές τις προκαθορισμένες υπηρεσίες, η **διαδικασία αναζήτησης διαφέρει ελαφρώς**. Όταν αναζητείται ένα όνομα υπηρεσίας, το launchd ξεκινά την υπηρεσία δυναμικά. Η νέα ροή εργασίας είναι ως εξής: -- Η task **B** ξεκινά μια bootstrap **αναζήτηση** για ένα όνομα υπηρεσίας. +- Η Task **B** ξεκινά μια bootstrap **αναζήτηση** για ένα όνομα υπηρεσίας. - Ο **launchd** ελέγχει αν η task εκτελείται και αν δεν εκτελείται, **την ξεκινά**. -- Η task **A** (η υπηρεσία) εκτελεί μια **bootstrap check-in** (`bootstrap_check_in()`). Εδώ, ο **bootstrap** server δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, το διατηρεί και **μεταφέρει το ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ στην Task A**. +- Η Task **A** (η υπηρεσία) εκτελεί μια **bootstrap check-in** (`bootstrap_check_in()`). Εδώ, ο **bootstrap** server δημιουργεί ένα ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ, το διατηρεί και **μεταφέρει το ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ στην Task A**. - Ο launchd διπλασιάζει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ και το στέλνει στην Task B**. -- Η task **B** δημιουργεί μια νέα θύρα με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). +- Η Task **B** δημιουργεί μια νέα θύρα με ένα **ΔΙΚΑΙΩΜΑ ΛΗΨΗΣ** και ένα **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ**, και δίνει το **ΔΙΚΑΙΩΜΑ ΑΠΟΣΤΟΛΗΣ στην Task A** (την svc) ώστε να μπορεί να στέλνει μηνύματα στην TASK B (αμφίδρομη επικοινωνία). -Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks λειτουργούν όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παρενόχληση. +Ωστόσο, αυτή η διαδικασία ισχύει μόνο για προκαθορισμένες συστημικές tasks. Οι μη συστημικές tasks λειτουργούν ακόμα όπως περιγράφηκε αρχικά, γεγονός που θα μπορούσε δυνητικά να επιτρέψει την παριστάνουσα. > [!CAUTION] > Επομένως, ο launchd δεν πρέπει ποτέ να καταρρεύσει ή ολόκληρο το σύστημα θα καταρρεύσει. @@ -87,9 +87,9 @@ mach_msg_id_t msgh_id; ``` Διεργασίες που κατέχουν ένα _**δικαίωμα λήψης**_ μπορούν να λαμβάνουν μηνύματα σε μια θύρα Mach. Αντίθετα, οι **αποστολείς** έχουν ένα _**δικαίωμα αποστολής**_ ή ένα _**δικαίωμα αποστολής-μία φορά**_. Το δικαίωμα αποστολής-μία φορά προορίζεται αποκλειστικά για την αποστολή ενός μόνο μηνύματος, μετά το οποίο καθίσταται άκυρο. -Το αρχικό πεδίο **`msgh_bits`** είναι μια bitmap: +Το αρχικό πεδίο **`msgh_bits`** είναι ένα bitmap: -- Το πρώτο bit (το πιο σημαντικό) χρησιμοποιείται για να υποδείξει ότι ένα μήνυμα είναι σύνθετο (περισσότερα για αυτό παρακάτω) +- Το πρώτο bit (το πιο σημαντικό) χρησιμοποιείται για να υποδείξει ότι ένα μήνυμα είναι σύνθετο (περισσότερα σχετικά με αυτό παρακάτω) - Τα 3ο και 4ο χρησιμοποιούνται από τον πυρήνα - Τα **5 λιγότερο σημαντικά bits του 2ου byte** μπορούν να χρησιμοποιηθούν για **voucher**: ένας άλλος τύπος θύρας για την αποστολή συνδυασμών κλειδιού/τιμής. - Τα **5 λιγότερο σημαντικά bits του 3ου byte** μπορούν να χρησιμοποιηθούν για **τοπική θύρα** @@ -123,7 +123,7 @@ mach_msg_id_t msgh_id; - `msgh_id`: το ID αυτού του μηνύματος, το οποίο ερμηνεύεται από τον παραλήπτη. > [!CAUTION] -> Σημειώστε ότι **τα mach μηνύματα αποστέλλονται μέσω μιας `mach port`**, η οποία είναι ένα **κανάλι επικοινωνίας με έναν μόνο παραλήπτη**, **πολλούς αποστολείς** που είναι ενσωματωμένο στον πυρήνα mach. **Πολλές διαδικασίες** μπορούν να **στείλουν μηνύματα** σε μια mach port, αλλά σε οποιαδήποτε στιγμή μόνο **μία διαδικασία μπορεί να διαβάσει** από αυτήν. +> Σημειώστε ότι **τα mach μηνύματα αποστέλλονται μέσω μιας `mach port`**, η οποία είναι ένα **κανάλι επικοινωνίας με έναν μόνο παραλήπτη**, **πολλούς αποστολείς** ενσωματωμένο στον πυρήνα mach. **Πολλές διαδικασίες** μπορούν να **στείλουν μηνύματα** σε μια mach port, αλλά σε οποιαδήποτε στιγμή μόνο **μία διαδικασία μπορεί να διαβάσει** από αυτήν. Τα μηνύματα σχηματίζονται από την κεφαλίδα **`mach_msg_header_t`** ακολουθούμενη από το **σώμα** και από το **trailer** (αν υπάρχει) και μπορεί να παραχωρήσει άδεια για να απαντηθεί. Σε αυτές τις περιπτώσεις, ο πυρήνας χρειάζεται απλώς να περάσει το μήνυμα από μια εργασία στην άλλη. @@ -150,12 +150,12 @@ unsigned int pad3 : 24; mach_msg_descriptor_type_t type : 8; } mach_msg_type_descriptor_t; ``` -Σε 32bit, όλοι οι περιγραφείς είναι 12B και ο τύπος του περιγραφέα βρίσκεται στον 11ο. Σε 64bit, τα μεγέθη ποικίλλουν. +Σε 32bit, όλοι οι περιγραφείς είναι 12B και ο τύπος του περιγραφέα είναι στον 11ο. Σε 64bit, τα μεγέθη ποικίλλουν. > [!CAUTION] -> Ο πυρήνας θα αντιγράψει τους περιγραφείς από μια εργασία στην άλλη αλλά πρώτα **δημιουργώντας ένα αντίγραφο στη μνήμη του πυρήνα**. Αυτή η τεχνική, γνωστή ως "Feng Shui", έχει καταχραστεί σε πολλές εκμεταλλεύσεις για να κάνει τον **πυρήνα να αντιγράψει δεδομένα στη μνήμη του**, κάνοντάς τον διαδικασία να στείλει περιγραφείς στον εαυτό της. Στη συνέχεια, η διαδικασία μπορεί να λάβει τα μηνύματα (ο πυρήνας θα τα απελευθερώσει). +> Ο πυρήνας θα αντιγράψει τους περιγραφείς από μια εργασία στην άλλη αλλά πρώτα **δημιουργώντας ένα αντίγραφο στη μνήμη του πυρήνα**. Αυτή η τεχνική, γνωστή ως "Feng Shui", έχει καταχραστεί σε πολλές εκμεταλλεύσεις για να κάνει τον **πυρήνα να αντιγράψει δεδομένα στη μνήμη του**, κάνοντάς μια διαδικασία να στείλει περιγραφείς στον εαυτό της. Στη συνέχεια, η διαδικασία μπορεί να λάβει τα μηνύματα (ο πυρήνας θα τα απελευθερώσει). > -> Είναι επίσης δυνατό να **σταλεί δικαίωμα θύρας σε μια ευάλωτη διαδικασία**, και τα δικαιώματα θύρας θα εμφανιστούν απλώς στη διαδικασία (ακόμα και αν δεν τα χειρίζεται). +> Είναι επίσης δυνατό να **σταλεί δικαίωμα θύρας σε μια ευάλωτη διαδικασία**, και τα δικαιώματα θύρας θα εμφανιστούν απλώς στη διαδικασία (ακόμα κι αν δεν τα χειρίζεται). ### Mac Ports APIs @@ -217,7 +217,7 @@ mach_port_name_t rcv_name, mach_msg_timeout_t timeout, mach_port_name_t notify); ``` -Αποκτήστε τις τιμές από τα μητρώα: +Πάρτε τις τιμές από τα μητρώα: ```armasm reg read $x0 $x1 $x2 $x3 $x4 $x5 $x6 x0 = 0x0000000124e04ce8 ;mach_msg_header_t (*msg) @@ -268,10 +268,10 @@ name ipc-object rights flags boost reqs recv send sonce oref q [...] ``` Το **όνομα** είναι το προεπιλεγμένο όνομα που δίνεται στην θύρα (ελέγξτε πώς **αυξάνεται** στα πρώτα 3 bytes). Το **`ipc-object`** είναι ο **αποκρυπτογραφημένος** μοναδικός **ταυτοποιητής** της θύρας.\ -Σημειώστε επίσης πώς οι θύρες με μόνο δικαίωμα **`send`** είναι **ταυτοποιώντας τον κάτοχό** τους (όνομα θύρας + pid).\ +Σημειώστε επίσης πώς οι θύρες με μόνο **`send`** δικαίωμα **αναγνωρίζουν τον κάτοχό** τους (όνομα θύρας + pid).\ Σημειώστε επίσης τη χρήση του **`+`** για να υποδείξετε **άλλες εργασίες που συνδέονται με την ίδια θύρα**. -Είναι επίσης δυνατό να χρησιμοποιήσετε [**procesxp**](https://www.newosxbook.com/tools/procexp.html) για να δείτε επίσης τα **καταχωρημένα ονόματα υπηρεσιών** (με SIP απενεργοποιημένο λόγω της ανάγκης για `com.apple.system-task-port`): +Είναι επίσης δυνατό να χρησιμοποιήσετε [**procesxp**](https://www.newosxbook.com/tools/procexp.html) για να δείτε επίσης τα **καταχωρημένα ονόματα υπηρεσιών** (με το SIP απενεργοποιημένο λόγω της ανάγκης του `com.apple.system-task-port`): ``` procesp 1 ports ``` @@ -407,25 +407,25 @@ printf("Sent a message\n"); ## Ιδιωτικά Θύρες -Υπάρχουν ορισμένες ειδικές θύρες που επιτρέπουν να **εκτελούνται ορισμένες ευαίσθητες ενέργειες ή να αποκτάται πρόσβαση σε ορισμένα ευαίσθητα δεδομένα** σε περίπτωση που μια εργασία έχει τα **SEND** δικαιώματα πάνω τους. Αυτό καθιστά αυτές τις θύρες πολύ ενδιαφέρουσες από την προοπτική ενός επιτιθέμενου, όχι μόνο λόγω των δυνατοτήτων τους, αλλά και επειδή είναι δυνατή η **κοινή χρήση των SEND δικαιωμάτων μεταξύ των εργασιών**. +Υπάρχουν ορισμένες ειδικές θύρες που επιτρέπουν να **εκτελούνται ορισμένες ευαίσθητες ενέργειες ή να αποκτάται πρόσβαση σε ορισμένα ευαίσθητα δεδομένα** σε περίπτωση που μια εργασία έχει τα δικαιώματα **SEND** πάνω τους. Αυτό καθιστά αυτές τις θύρες πολύ ενδιαφέρουσες από την προοπτική ενός επιτιθέμενου, όχι μόνο λόγω των δυνατοτήτων τους αλλά και επειδή είναι δυνατή η **κοινή χρήση δικαιωμάτων SEND μεταξύ εργασιών**. ### Ειδικές Θύρες Φιλοξενίας Αυτές οι θύρες εκπροσωπούνται από έναν αριθμό. -**SEND** δικαιώματα μπορούν να αποκτηθούν καλώντας **`host_get_special_port`** και **RECEIVE** δικαιώματα καλώντας **`host_set_special_port`**. Ωστόσο, και οι δύο κλήσεις απαιτούν την θύρα **`host_priv`** στην οποία μπορεί να έχει πρόσβαση μόνο ο root. Επιπλέον, στο παρελθόν, ο root μπορούσε να καλέσει **`host_set_special_port`** και να καταλάβει αυθαίρετα, κάτι που επέτρεπε, για παράδειγμα, την παράκαμψη των υπογραφών κώδικα καταλαμβάνοντας την `HOST_KEXTD_PORT` (το SIP τώρα το αποτρέπει). +Τα δικαιώματα **SEND** μπορούν να αποκτηθούν καλώντας **`host_get_special_port`** και τα δικαιώματα **RECEIVE** καλώντας **`host_set_special_port`**. Ωστόσο, και οι δύο κλήσεις απαιτούν την θύρα **`host_priv`** στην οποία μπορεί να έχει πρόσβαση μόνο ο root. Επιπλέον, στο παρελθόν ο root μπορούσε να καλέσει **`host_set_special_port`** και να καταλάβει αυθαίρετα, κάτι που επέτρεπε, για παράδειγμα, την παράκαμψη υπογραφών κώδικα καταλαμβάνοντας την `HOST_KEXTD_PORT` (το SIP τώρα το αποτρέπει). -Αυτές χωρίζονται σε 2 ομάδες: Οι **πρώτες 7 θύρες ανήκουν στον πυρήνα** με την 1 `HOST_PORT`, την 2 `HOST_PRIV_PORT`, την 3 `HOST_IO_MASTER_PORT` και την 7 είναι `HOST_MAX_SPECIAL_KERNEL_PORT`.\ +Αυτές χωρίζονται σε 2 ομάδες: Οι **πρώτες 7 θύρες ανήκουν στον πυρήνα** και είναι η 1 `HOST_PORT`, η 2 `HOST_PRIV_PORT`, η 3 `HOST_IO_MASTER_PORT` και η 7 είναι `HOST_MAX_SPECIAL_KERNEL_PORT`.\ Αυτές που ξεκινούν **από** τον αριθμό **8** ανήκουν σε **συστήματα δαίμονες** και μπορούν να βρεθούν δηλωμένες στο [**`host_special_ports.h`**](https://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/host_special_ports.h.auto.html). -- **Θύρα Φιλοξενίας**: Αν μια διαδικασία έχει **SEND** προνόμιο πάνω σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** σχετικά με το **σύστημα** καλώντας τις ρουτίνες της όπως: +- **Θύρα Φιλοξενίας**: Εάν μια διαδικασία έχει **SEND** προνόμιο πάνω σε αυτή τη θύρα, μπορεί να αποκτήσει **πληροφορίες** σχετικά με το **σύστημα** καλώντας τις ρουτίνες της όπως: - `host_processor_info`: Λάβετε πληροφορίες επεξεργαστή - `host_info`: Λάβετε πληροφορίες φιλοξενίας - `host_virtual_physical_table_info`: Πίνακας εικονικής/φυσικής μνήμης (απαιτεί MACH_VMDEBUG) - `host_statistics`: Λάβετε στατιστικά στοιχεία φιλοξενίας - `mach_memory_info`: Λάβετε διάταξη μνήμης πυρήνα -- **Θύρα Priv φιλοξενίας**: Μια διαδικασία με **SEND** δικαίωμα πάνω σε αυτή τη θύρα μπορεί να εκτελέσει **προνομιακές ενέργειες** όπως η εμφάνιση δεδομένων εκκίνησης ή η προσπάθεια φόρτωσης μιας επέκτασης πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. -- Επιπλέον, προκειμένου να καλέσει την API **`kext_request`**, απαιτείται να έχει άλλες εξουσιοδοτήσεις **`com.apple.private.kext*`** που δίνονται μόνο σε δυαδικά αρχεία της Apple. +- **Θύρα Ιδιωτικού Φιλοξενίας**: Μια διαδικασία με δικαίωμα **SEND** πάνω σε αυτή τη θύρα μπορεί να εκτελέσει **προνομιακές ενέργειες** όπως η εμφάνιση δεδομένων εκκίνησης ή η προσπάθεια φόρτωσης μιας επέκτασης πυρήνα. Η **διαδικασία πρέπει να είναι root** για να αποκτήσει αυτή την άδεια. +- Επιπλέον, για να καλέσει την API **`kext_request`** απαιτείται να έχει άλλες εξουσιοδοτήσεις **`com.apple.private.kext*`** που δίνονται μόνο σε δυαδικά αρχεία της Apple. - Άλλες ρουτίνες που μπορούν να κληθούν είναι: - `host_get_boot_info`: Λάβετε `machine_boot_info()` - `host_priv_statistics`: Λάβετε προνομιακά στατιστικά στοιχεία @@ -489,7 +489,7 @@ world.*/ - Αυτοί είναι οι περιορισμοί για την πρόσβαση στη θύρα (από το `macos_task_policy` από το εκτελέσιμο `AppleMobileFileIntegrity`): - Εάν η εφαρμογή έχει **`com.apple.security.get-task-allow` entitlement** διαδικασίες από τον **ίδιο χρήστη μπορούν να έχουν πρόσβαση στη θύρα εργασίας** (συνήθως προστίθεται από το Xcode για αποσφαλμάτωση). Η διαδικασία **notarization** δεν θα το επιτρέψει σε παραγωγικές εκδόσεις. - Εφαρμογές με το **`com.apple.system-task-ports`** entitlement μπορούν να αποκτήσουν τη **θύρα εργασίας για οποιαδήποτε** διαδικασία, εκτός από τον πυρήνα. Σε παλαιότερες εκδόσεις ονομαζόταν **`task_for_pid-allow`**. Αυτό χορηγείται μόνο σε εφαρμογές της Apple. -- **Ο Root μπορεί να έχει πρόσβαση σε θύρες εργασίας** εφαρμογών **που δεν** έχουν μεταγλωττιστεί με **σκληρή** εκτέλεση (και όχι από την Apple). +- **Ο Root μπορεί να έχει πρόσβαση σε θύρες εργασίας** εφαρμογών **που δεν** έχουν μεταγλωττιστεί με μια **σκληρυμένη** εκτέλεση (και όχι από την Apple). **Η θύρα ονόματος εργασίας:** Μια μη προνομιούχος έκδοση της _θύρας εργασίας_. Αναφέρεται στην εργασία, αλλά δεν επιτρέπει τον έλεγχο της. Το μόνο πράγμα που φαίνεται να είναι διαθέσιμο μέσω αυτής είναι το `task_info()`. @@ -772,13 +772,13 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject > [!TIP] > Για να λειτουργήσει αυτό στο iOS, χρειάζεστε την εξουσιοδότηση `dynamic-codesigning` προκειμένου να μπορείτε να δημιουργήσετε ένα εκτελέσιμο μνήμης που είναι εγγράψιμο. -### Εισαγωγή Dylib σε νήμα μέσω Task port +### Dylib Injection σε νήμα μέσω Task port -Στο macOS, **νήματα** μπορεί να χειριστούν μέσω **Mach** ή χρησιμοποιώντας **posix `pthread` api**. Το νήμα που δημιουργήσαμε στην προηγούμενη εισαγωγή, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμβατό με posix**. +Στο macOS, **νήματα** μπορεί να χειριστούν μέσω **Mach** ή χρησιμοποιώντας **posix `pthread` api**. Το νήμα που δημιουργήσαμε στην προηγούμενη ένεση, δημιουργήθηκε χρησιμοποιώντας το Mach api, οπότε **δεν είναι συμβατό με posix**. -Ήταν δυνατό να **εισαχθεί ένας απλός κώδικας shell** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργεί με apis συμβατά με posix**, μόνο με Mach. **Πιο σύνθετες εισαγωγές** θα χρειάζονταν το **νήμα** να είναι επίσης **συμβατό με posix**. +Ήταν δυνατό να **ενσωματωθεί ένας απλός shellcode** για να εκτελέσει μια εντολή επειδή **δεν χρειαζόταν να λειτουργεί με apis συμβατές με posix**, μόνο με Mach. **Πιο σύνθετες ενέσεις** θα χρειάζονταν το **νήμα** να είναι επίσης **συμβατό με posix**. -Επομένως, για να **βελτιωθεί το νήμα**, θα πρέπει να καλέσει **`pthread_create_from_mach_thread`** που θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread θα μπορούσε να **καλέσει dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι ώστε αντί να γράφει νέο κώδικα shell για να εκτελέσει διάφορες ενέργειες, είναι δυνατό να φορτώσει προσαρμοσμένες βιβλιοθήκες. +Επομένως, για να **βελτιωθεί το νήμα**, θα πρέπει να καλέσει **`pthread_create_from_mach_thread`** που θα **δημιουργήσει ένα έγκυρο pthread**. Στη συνέχεια, αυτό το νέο pthread θα μπορούσε να **καλέσει dlopen** για να **φορτώσει ένα dylib** από το σύστημα, έτσι ώστε αντί να γράφει νέο shellcode για να εκτελέσει διάφορες ενέργειες, είναι δυνατό να φορτώσει προσαρμοσμένες βιβλιοθήκες. Μπορείτε να βρείτε **παραδείγματα dylibs** σε (για παράδειγμα, αυτό που δημιουργεί ένα log και στη συνέχεια μπορείτε να το ακούσετε): @@ -1080,7 +1080,7 @@ macos-thread-injection-via-task-port.md Όταν συμβαίνει μια εξαίρεση σε ένα νήμα, αυτή η εξαίρεση αποστέλλεται στο καθορισμένο port εξαίρεσης του νήματος. Αν το νήμα δεν την χειριστεί, τότε αποστέλλεται στα ports εξαίρεσης της διαδικασίας. Αν η διαδικασία δεν την χειριστεί, τότε αποστέλλεται στο host port, το οποίο διαχειρίζεται το launchd (όπου θα αναγνωριστεί). Αυτό ονομάζεται triage εξαίρεσης. -Σημειώστε ότι στο τέλος, συνήθως αν δεν χειριστεί σωστά, η αναφορά θα καταλήξει να χειρίζεται από τον δαίμονα ReportCrash. Ωστόσο, είναι δυνατόν για ένα άλλο νήμα στην ίδια διαδικασία να διαχειριστεί την εξαίρεση, αυτό είναι που κάνουν τα εργαλεία αναφοράς κρασών όπως το `PLCreashReporter`. +Σημειώστε ότι στο τέλος, συνήθως αν δεν χειριστεί σωστά, η αναφορά θα καταλήξει να διαχειρίζεται από τον δαίμονα ReportCrash. Ωστόσο, είναι δυνατόν για ένα άλλο νήμα στην ίδια διαδικασία να διαχειριστεί την εξαίρεση, αυτό είναι που κάνουν τα εργαλεία αναφοράς κρασών όπως το `PLCreashReporter`. ## Other Objects @@ -1089,7 +1089,7 @@ macos-thread-injection-via-task-port.md Οποιοσδήποτε χρήστης μπορεί να έχει πρόσβαση σε πληροφορίες σχετικά με το ρολόι, ωστόσο για να ρυθμίσει την ώρα ή να τροποποιήσει άλλες ρυθμίσεις, πρέπει να είναι root. Για να αποκτήσει πληροφορίες, είναι δυνατόν να καλέσει συναρτήσεις από το υποσύστημα `clock`, όπως: `clock_get_time`, `clock_get_attributtes` ή `clock_alarm`\ -Για να τροποποιήσει τιμές, το υποσύστημα `clock_priv` μπορεί να χρησιμοποιηθεί με συναρτήσεις όπως `clock_set_time` και `clock_set_attributes`. +Για να τροποποιήσει τιμές, το υποσύστημα `clock_priv` μπορεί να χρησιμοποιηθεί με συναρτήσεις όπως `clock_set_time` και `clock_set_attributes` ### Processors and Processor Set @@ -1104,7 +1104,7 @@ macos-thread-injection-via-task-port.md - `processor_set_stack_usage` - `processor_set_info` -Όπως αναφέρθηκε σε [**αυτή την ανάρτηση**](https://reverse.put.as/2014/05/05/about-the-processor_set_tasks-access-to-kernel-memory-vulnerability/), στο παρελθόν αυτό επέτρεπε την παράκαμψη της προηγουμένως αναφερόμενης προστασίας για την απόκτηση ports διαδικασίας σε άλλες διαδικασίες για τον έλεγχο τους καλώντας **`processor_set_tasks`** και αποκτώντας ένα host port σε κάθε διαδικασία.\ +Όπως αναφέρθηκε σε [**αυτή την ανάρτηση**](https://reverse.put.as/2014/05/05/about-the-processor_set_tasks-access-to-kernel-memory-vulnerability/), στο παρελθόν αυτό επέτρεπε την παράκαμψη της προηγουμένως αναφερόμενης προστασίας για να αποκτήσει ports διαδικασίας σε άλλες διαδικασίες για να τις ελέγξει καλώντας **`processor_set_tasks`** και αποκτώντας ένα host port σε κάθε διαδικασία.\ Σήμερα χρειάζεστε root για να χρησιμοποιήσετε αυτή τη λειτουργία και αυτή είναι προστατευμένη, οπότε θα μπορείτε να αποκτήσετε αυτά τα ports μόνο σε μη προστατευμένες διαδικασίες. Μπορείτε να το δοκιμάσετε με: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md index 726556764..f67212d39 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md @@ -10,9 +10,9 @@ MIG δημιουργήθηκε για να **απλοποιήσει τη δια Αυτοί οι ορισμοί έχουν 5 ενότητες: -- **Δήλωση υποσυστήματος**: Η λέξη-κλειδί subsystem χρησιμοποιείται για να υποδείξει το **όνομα** και το **id**. Είναι επίσης δυνατό να το επισημάνετε ως **`KernelServer`** αν ο server πρέπει να εκτελείται στον πυρήνα. -- **Εισαγωγές και imports**: Το MIG χρησιμοποιεί τον C-preprocessor, οπότε μπορεί να χρησιμοποιεί imports. Επιπλέον, είναι δυνατό να χρησιμοποιηθούν `uimport` και `simport` για κώδικα που έχει παραχθεί από χρήστη ή server. -- **Δηλώσεις τύπων**: Είναι δυνατό να οριστούν τύποι δεδομένων αν και συνήθως θα εισάγει `mach_types.defs` και `std_types.defs`. Για προσαρμοσμένους τύπους μπορεί να χρησιμοποιηθεί κάποια σύνταξη: +- **Δήλωση υποσυστήματος**: Η λέξη-κλειδί subsystem χρησιμοποιείται για να υποδείξει το **όνομα** και το **id**. Είναι επίσης δυνατή η σήμανση ως **`KernelServer`** αν ο server πρέπει να εκτελείται στον πυρήνα. +- **Εισαγωγές και imports**: Το MIG χρησιμοποιεί τον C-preprocessor, επομένως μπορεί να χρησιμοποιεί imports. Επιπλέον, είναι δυνατή η χρήση `uimport` και `simport` για κώδικα που έχει παραχθεί από χρήστη ή server. +- **Δηλώσεις τύπων**: Είναι δυνατή η ορισμός τύπων δεδομένων αν και συνήθως θα εισάγει `mach_types.defs` και `std_types.defs`. Για προσαρμοσμένους τύπους μπορεί να χρησιμοποιηθεί κάποια σύνταξη: - \[i`n/out]tran`: Συνάρτηση που πρέπει να μεταφραστεί από ένα εισερχόμενο ή σε ένα εξερχόμενο μήνυμα - `c[user/server]type`: Χαρτογράφηση σε άλλο τύπο C. - `destructor`: Καλέστε αυτή τη συνάρτηση όταν ο τύπος απελευθερωθεί. @@ -89,7 +89,7 @@ routine[1]; {{#endtab}} {{#endtabs}} -Βασισμένη στη προηγούμενη δομή, η συνάρτηση **`myipc_server_routine`** θα λάβει το **ID μηνύματος** και θα επιστρέψει τη σωστή συνάρτηση για κλήση: +Βασισμένη στην προηγούμενη δομή, η συνάρτηση **`myipc_server_routine`** θα πάρει το **ID μηνύματος** και θα επιστρέψει τη σωστή συνάρτηση για κλήση: ```c mig_external mig_routine_t myipc_server_routine (mach_msg_header_t *InHeadP) @@ -108,7 +108,7 @@ return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine; Αν η συνάρτηση αναμενόταν να στείλει μια **απάντηση**, η συνάρτηση `mig_internal kern_return_t __MIG_check__Reply__` θα υπήρχε επίσης. -Στην πραγματικότητα, είναι δυνατόν να προσδιοριστεί αυτή η σχέση στη δομή **`subsystem_to_name_map_myipc`** από **`myipcServer.h`** (**`subsystem*to_name_map*\***`\*\* σε άλλα αρχεία): +Στην πραγματικότητα, είναι δυνατόν να προσδιοριστεί αυτή η σχέση στη δομή **`subsystem_to_name_map_myipc`** από το **`myipcServer.h`** (**`subsystem*to_name_map*\***`\*\* σε άλλα αρχεία): ```c #ifndef subsystem_to_name_map_myipc #define subsystem_to_name_map_myipc \ @@ -217,31 +217,31 @@ USERPREFSubtract(port, 40, 2); ### Το NDR_record -Το NDR_record εξάγεται από το `libsystem_kernel.dylib`, και είναι μια δομή που επιτρέπει στο MIG να **μετασχηματίζει δεδομένα ώστε να είναι ανεξάρτητα από το σύστημα** στο οποίο χρησιμοποιείται, καθώς το MIG σχεδιάστηκε για να χρησιμοποιείται μεταξύ διαφορετικών συστημάτων (και όχι μόνο στην ίδια μηχανή). +Το NDR_record εξάγεται από το `libsystem_kernel.dylib` και είναι μια δομή που επιτρέπει στο MIG να **μετασχηματίζει δεδομένα ώστε να είναι ανεξάρτητα από το σύστημα** στο οποίο χρησιμοποιείται, καθώς το MIG σχεδιάστηκε για να χρησιμοποιείται μεταξύ διαφορετικών συστημάτων (και όχι μόνο στην ίδια μηχανή). -Αυτό είναι ενδιαφέρον γιατί αν το `_NDR_record` βρεθεί σε ένα δυαδικό αρχείο ως εξάρτηση (`jtool2 -S | grep NDR` ή `nm`), σημαίνει ότι το δυαδικό αρχείο είναι πελάτης ή διακομιστής MIG. +Αυτό είναι ενδιαφέρον γιατί αν βρεθεί το `_NDR_record` σε ένα δυαδικό αρχείο ως εξάρτηση (`jtool2 -S | grep NDR` ή `nm`), σημαίνει ότι το δυαδικό αρχείο είναι πελάτης ή διακομιστής MIG. Επιπλέον, οι **διακομιστές MIG** έχουν τον πίνακα διανομής στο `__DATA.__const` (ή στο `__CONST.__constdata` στον πυρήνα macOS και `__DATA_CONST.__const` σε άλλους πυρήνες \*OS). Αυτό μπορεί να αποθηκευτεί με **`jtool2`**. Και οι **πελάτες MIG** θα χρησιμοποιήσουν το `__NDR_record` για να στείλουν με `__mach_msg` στους διακομιστές. -## Ανάλυση Δυαδικών +## Ανάλυση Δυαδικών Αρχείων ### jtool -Καθώς πολλά δυαδικά αρχεία χρησιμοποιούν τώρα το MIG για να εκθέσουν mach ports, είναι ενδιαφέρον να γνωρίζουμε πώς να **αναγνωρίσουμε ότι χρησιμοποιήθηκε το MIG** και τις **λειτουργίες που εκτελεί το MIG** με κάθε ID μηνύματος. +Καθώς πολλά δυαδικά αρχεία χρησιμοποιούν τώρα το MIG για να εκθέσουν mach ports, είναι ενδιαφέρον να γνωρίζουμε πώς να **εντοπίσουμε ότι χρησιμοποιήθηκε το MIG** και τις **λειτουργίες που εκτελεί το MIG** με κάθε ID μηνύματος. -[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) μπορεί να αναλύσει πληροφορίες MIG από ένα δυαδικό Mach-O υποδεικνύοντας το ID μηνύματος και αναγνωρίζοντας τη λειτουργία που πρέπει να εκτελεστεί: +[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) μπορεί να αναλύσει πληροφορίες MIG από ένα Mach-O δυαδικό αρχείο υποδεικνύοντας το ID μηνύματος και προσδιορίζοντας τη λειτουργία που πρέπει να εκτελεστεί: ```bash jtool2 -d __DATA.__const myipc_server | grep MIG ``` -Επιπλέον, οι λειτουργίες MIG είναι απλώς περιτυλίγματα της πραγματικής λειτουργίας που καλείται, πράγμα που σημαίνει ότι αν αποκτήσετε την αποσυναρμολόγησή της και κάνετε grep για BL, μπορεί να είστε σε θέση να βρείτε την πραγματική λειτουργία που καλείται: +Επιπλέον, οι λειτουργίες MIG είναι απλώς περιτυλίγματα της πραγματικής λειτουργίας που καλείται, που σημαίνει ότι αν αποκτήσετε την αποσυναρμολόγησή της και κάνετε grep για BL, μπορεί να είστε σε θέση να βρείτε την πραγματική λειτουργία που καλείται: ```bash jtool2 -d __DATA.__const myipc_server | grep BL ``` ### Assembly -Αναφέρθηκε προηγουμένως ότι η συνάρτηση που θα φροντίσει για **την κλήση της σωστής συνάρτησης ανάλογα με το αναγνωριστικό μηνύματος που έχει ληφθεί** ήταν η `myipc_server`. Ωστόσο, συνήθως δεν θα έχετε τα σύμβολα του δυαδικού (χωρίς ονόματα συναρτήσεων), οπότε είναι ενδιαφέρον να **ελέγξετε πώς φαίνεται αποσυμπιεσμένο** καθώς θα είναι πάντα πολύ παρόμοιο (ο κώδικας αυτής της συνάρτησης είναι ανεξάρτητος από τις εκτεθειμένες συναρτήσεις): +Αναφέρθηκε προηγουμένως ότι η συνάρτηση που θα φροντίσει για **την κλήση της σωστής συνάρτησης ανάλογα με το αναγνωριστικό μηνύματος που ελήφθη** ήταν η `myipc_server`. Ωστόσο, συνήθως δεν θα έχετε τα σύμβολα του δυαδικού (χωρίς ονόματα συναρτήσεων), οπότε είναι ενδιαφέρον να **ελέγξετε πώς φαίνεται αποσυμπιεσμένο** καθώς θα είναι πάντα πολύ παρόμοιο (ο κώδικας αυτής της συνάρτησης είναι ανεξάρτητος από τις εκτεθειμένες συναρτήσεις): {{#tabs}} {{#tab name="myipc_server decompiled 1"}} @@ -365,7 +365,7 @@ return r0; {{#endtab}} {{#endtabs}} -Στην πραγματικότητα, αν πάτε στη συνάρτηση **`0x100004000`** θα βρείτε τον πίνακα των **`routine_descriptor`** δομών. Το πρώτο στοιχείο της δομής είναι η **διεύθυνση** όπου είναι υλοποιημένη η **συνάρτηση**, και η **δομή καταλαμβάνει 0x28 bytes**, οπότε κάθε 0x28 bytes (ξεκινώντας από το byte 0) μπορείτε να πάρετε 8 bytes και αυτό θα είναι η **διεύθυνση της συνάρτησης** που θα κληθεί: +Στην πραγματικότητα, αν πάτε στη συνάρτηση **`0x100004000`** θα βρείτε τον πίνακα των **`routine_descriptor`** δομών. Το πρώτο στοιχείο της δομής είναι η **διεύθυνση** όπου η **συνάρτηση** είναι υλοποιημένη, και η **δομή καταλαμβάνει 0x28 bytes**, οπότε κάθε 0x28 bytes (ξεκινώντας από το byte 0) μπορείτε να πάρετε 8 bytes και αυτό θα είναι η **διεύθυνση της συνάρτησης** που θα κληθεί:
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md index 0ab1fde5c..c1a95ce32 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md @@ -9,31 +9,31 @@ ## 1. Thread Hijacking -Αρχικά, η συνάρτηση **`task_threads()`** καλείται στην θύρα εργασίας για να αποκτήσει μια λίστα νημάτων από την απομακρυσμένη εργασία. Ένα νήμα επιλέγεται για hijacking. Αυτή η προσέγγιση αποκλίνει από τις συμβατικές μεθόδους έγχυσης κώδικα καθώς η δημιουργία ενός νέου απομακρυσμένου νήματος απαγορεύεται λόγω της νέας μείωσης που μπλοκάρει το `thread_create_running()`. +Αρχικά, η συνάρτηση **`task_threads()`** καλείται στην θύρα εργασίας για να αποκτήσει μια λίστα νημάτων από την απομακρυσμένη εργασία. Ένα νήμα επιλέγεται για κατάληψη. Αυτή η προσέγγιση αποκλίνει από τις συμβατικές μεθόδους έγχυσης κώδικα, καθώς η δημιουργία ενός νέου απομακρυσμένου νήματος απαγορεύεται λόγω της νέας μείωσης που μπλοκάρει το `thread_create_running()`. -Για να ελεγχθεί το νήμα, καλείται το **`thread_suspend()`**, σταματώντας την εκτέλεσή του. +Για να ελεγχθεί το νήμα, καλείται η **`thread_suspend()`**, σταματώντας την εκτέλεσή του. Οι μόνοι επιτρεπόμενοι χειρισμοί στο απομακρυσμένο νήμα περιλαμβάνουν **σταμάτημα** και **εκκίνηση** αυτού, **ανάκτηση** και **τροποποίηση** των τιμών των καταχωρητών του. Οι απομακρυσμένες κλήσεις συναρτήσεων ξεκινούν με την ρύθμιση των καταχωρητών `x0` έως `x7` στις **παραμέτρους**, ρυθμίζοντας το **`pc`** για να στοχεύσει τη επιθυμητή συνάρτηση και ενεργοποιώντας το νήμα. Η διασφάλιση ότι το νήμα δεν θα καταρρεύσει μετά την επιστροφή απαιτεί ανίχνευση της επιστροφής. -Μια στρατηγική περιλαμβάνει **καταχώρηση ενός χειριστή εξαιρέσεων** για το απομακρυσμένο νήμα χρησιμοποιώντας το `thread_set_exception_ports()`, ρυθμίζοντας τον καταχωρητή `lr` σε μια μη έγκυρη διεύθυνση πριν από την κλήση της συνάρτησης. Αυτό προκαλεί μια εξαίρεση μετά την εκτέλεση της συνάρτησης, στέλνοντας ένα μήνυμα στην θύρα εξαίρεσης, επιτρέποντας την επιθεώρηση της κατάστασης του νήματος για την ανάκτηση της τιμής επιστροφής. Εναλλακτικά, όπως υιοθετήθηκε από την εκμετάλλευση triple_fetch του Ian Beer, το `lr` ρυθμίζεται να επαναλαμβάνεται άπειρα. Οι καταχωρητές του νήματος παρακολουθούνται συνεχώς μέχρι το **`pc` να δείχνει σε αυτή την εντολή**. +Μια στρατηγική περιλαμβάνει **καταχώρηση ενός χειριστή εξαιρέσεων** για το απομακρυσμένο νήμα χρησιμοποιώντας το `thread_set_exception_ports()`, ρυθμίζοντας τον καταχωρητή `lr` σε μια μη έγκυρη διεύθυνση πριν από την κλήση της συνάρτησης. Αυτό προκαλεί μια εξαίρεση μετά την εκτέλεση της συνάρτησης, στέλνοντας ένα μήνυμα στη θύρα εξαίρεσης, επιτρέποντας την επιθεώρηση της κατάστασης του νήματος για την ανάκτηση της τιμής επιστροφής. Εναλλακτικά, όπως υιοθετήθηκε από την εκμετάλλευση triple_fetch του Ian Beer, ο `lr` ρυθμίζεται να επαναλαμβάνεται άπειρα. Οι καταχωρητές του νήματος παρακολουθούνται συνεχώς μέχρι το **`pc` να δείχνει σε αυτή την εντολή**. ## 2. Mach ports for communication -Η επόμενη φάση περιλαμβάνει την εγκαθίδρυση Mach ports για να διευκολύνει την επικοινωνία με το απομακρυσμένο νήμα. Αυτές οι θύρες είναι καθοριστικές για τη μεταφορά αυθαίρετων δικαιωμάτων αποστολής και λήψης μεταξύ των εργασιών. +Η επόμενη φάση περιλαμβάνει τη δημιουργία Mach ports για να διευκολύνει την επικοινωνία με το απομακρυσμένο νήμα. Αυτές οι θύρες είναι καθοριστικές για τη μεταφορά αυθαίρετων δικαιωμάτων αποστολής και λήψης μεταξύ των εργασιών. Για αμφίδρομη επικοινωνία, δημιουργούνται δύο δικαιώματα λήψης Mach: ένα στην τοπική και ένα στην απομακρυσμένη εργασία. Στη συνέχεια, ένα δικαίωμα αποστολής για κάθε θύρα μεταφέρεται στην αντίστοιχη εργασία, επιτρέποντας την ανταλλαγή μηνυμάτων. Εστιάζοντας στην τοπική θύρα, το δικαίωμα λήψης κατέχεται από την τοπική εργασία. Η θύρα δημιουργείται με το `mach_port_allocate()`. Η πρόκληση έγκειται στη μεταφορά ενός δικαιώματος αποστολής σε αυτή τη θύρα στην απομακρυσμένη εργασία. -Μια στρατηγική περιλαμβάνει την εκμετάλλευση του `thread_set_special_port()` για να τοποθετήσει ένα δικαίωμα αποστολής στην τοπική θύρα στην `THREAD_KERNEL_PORT` του απομακρυσμένου νήματος. Στη συνέχεια, το απομακρυσμένο νήμα καθοδηγείται να καλέσει το `mach_thread_self()` για να ανακτήσει το δικαίωμα αποστολής. +Μια στρατηγική περιλαμβάνει την εκμετάλλευση του `thread_set_special_port()` για να τοποθετήσει ένα δικαίωμα αποστολής στη τοπική θύρα στην `THREAD_KERNEL_PORT` του απομακρυσμένου νήματος. Στη συνέχεια, το απομακρυσμένο νήμα καθοδηγείται να καλέσει το `mach_thread_self()` για να ανακτήσει το δικαίωμα αποστολής. Για την απομακρυσμένη θύρα, η διαδικασία είναι ουσιαστικά αντίστροφη. Το απομακρυσμένο νήμα καθοδηγείται να δημιουργήσει μια θύρα Mach μέσω του `mach_reply_port()` (καθώς το `mach_port_allocate()` δεν είναι κατάλληλο λόγω του μηχανισμού επιστροφής του). Μετά τη δημιουργία της θύρας, καλείται το `mach_port_insert_right()` στο απομακρυσμένο νήμα για να καθιερώσει ένα δικαίωμα αποστολής. Αυτό το δικαίωμα αποθηκεύεται στη μνήμη του πυρήνα χρησιμοποιώντας το `thread_set_special_port()`. Επιστρέφοντας στην τοπική εργασία, χρησιμοποιείται το `thread_get_special_port()` στο απομακρυσμένο νήμα για να αποκτήσει ένα δικαίωμα αποστολής στη νεοδημιουργημένη θύρα Mach στην απομακρυσμένη εργασία. -Η ολοκλήρωση αυτών των βημάτων έχει ως αποτέλεσμα την εγκαθίδρυση Mach ports, θέτοντας τα θεμέλια για αμφίδρομη επικοινωνία. +Η ολοκλήρωση αυτών των βημάτων έχει ως αποτέλεσμα τη δημιουργία Mach ports, θέτοντας τα θεμέλια για αμφίδρομη επικοινωνία. ## 3. Basic Memory Read/Write Primitives -Σε αυτή την ενότητα, η εστίαση είναι στη χρήση του εκτελέσιμου πρωτοκόλλου για την εγκαθίδρυση βασικών πρωτοκόλλων ανάγνωσης και εγγραφής μνήμης. Αυτά τα αρχικά βήματα είναι κρίσιμα για την απόκτηση περισσότερου ελέγχου πάνω στη απομακρυσμένη διαδικασία, αν και τα πρωτόκολλα σε αυτό το στάδιο δεν θα εξυπηρετήσουν πολλούς σκοπούς. Σύντομα, θα αναβαθμιστούν σε πιο προηγμένες εκδόσεις. +Σε αυτή την ενότητα, η εστίαση είναι στη χρήση του εκτελέσιμου πρωτοκόλλου για την καθιέρωση βασικών πρωτοκόλλων ανάγνωσης και εγγραφής μνήμης. Αυτά τα αρχικά βήματα είναι κρίσιμα για την απόκτηση περισσότερου ελέγχου πάνω στη απομακρυσμένη διαδικασία, αν και τα πρωτόκολλα σε αυτό το στάδιο δεν θα εξυπηρετήσουν πολλούς σκοπούς. Σύντομα, θα αναβαθμιστούν σε πιο προηγμένες εκδόσεις. ### Memory Reading and Writing Using Execute Primitive @@ -86,7 +86,7 @@ _xpc_int64_set_value(address - 0x18, value) ## 4. Ρύθμιση Κοινής Μνήμης -Ο στόχος είναι να καθιερωθεί κοινή μνήμη μεταξύ τοπικών και απομακρυσμένων εργασιών, απλοποιώντας τη μεταφορά δεδομένων και διευκολύνοντας την κλήση συναρτήσεων με πολλαπλά επιχειρήματα. Η προσέγγιση περιλαμβάνει την αξιοποίηση του `libxpc` και του τύπου αντικειμένου `OS_xpc_shmem`, ο οποίος βασίζεται σε καταχωρίσεις μνήμης Mach. +Ο στόχος είναι να καθιερωθεί κοινή μνήμη μεταξύ τοπικών και απομακρυσμένων εργασιών, απλοποιώντας τη μεταφορά δεδομένων και διευκολύνοντας την κλήση συναρτήσεων με πολλαπλά επιχειρήματα. Η προσέγγιση περιλαμβάνει την εκμετάλλευση του `libxpc` και του τύπου αντικειμένου `OS_xpc_shmem`, ο οποίος βασίζεται σε καταχωρίσεις μνήμης Mach. ### Επισκόπηση Διαδικασίας: @@ -103,7 +103,7 @@ _xpc_int64_set_value(address - 0x18, value) 3. **Διόρθωση της Καταχώρισης Μνήμης Mach**: - Χρησιμοποιήστε τη μέθοδο `thread_set_special_port()` για να εισάγετε ένα δικαίωμα αποστολής για την καταχώριση μνήμης Mach στην απομακρυσμένη εργασία. -- Διορθώστε το πεδίο καταχώρισης μνήμης Mach στη θέση `0x18` αντικαθιστώντας το με το όνομα της απομακρυσμένης καταχώρισης μνήμης. +- Διορθώστε το πεδίο καταχώρισης μνήμης Mach στη θέση `0x18` αντικαθιστώντας το με το όνομα της καταχώρισης μνήμης απομακρυσμένης. 4. **Ολοκλήρωση Ρύθμισης Κοινής Μνήμης**: - Επικυρώστε το απομακρυσμένο αντικείμενο `OS_xpc_shmem`. @@ -149,8 +149,8 @@ thread_set_special_port(); // for inserting send right ## Σημαντικές Σκέψεις: -- Διασφαλίστε τη σωστή χρήση του `memcpy()` για λειτουργίες ανάγνωσης/εγγραφής μνήμης για να διατηρήσετε τη σταθερότητα του συστήματος και την ακεραιότητα των δεδομένων. -- Κατά τη μεταφορά Mach ports ή περιγραφέων αρχείων, ακολουθήστε τους σωστούς πρωτοκόλλους και χειριστείτε τους πόρους υπεύθυνα για να αποτρέψετε διαρροές ή μη προγραμματισμένη πρόσβαση. +- Διασφαλίστε τη σωστή χρήση του `memcpy()` για τις λειτουργίες ανάγνωσης/εγγραφής μνήμης για να διατηρήσετε τη σταθερότητα του συστήματος και την ακεραιότητα των δεδομένων. +- Όταν μεταφέρετε Mach ports ή περιγραφείς αρχείων, ακολουθήστε τους σωστούς πρωτοκόλλους και χειριστείτε τους πόρους υπεύθυνα για να αποτρέψετε διαρροές ή μη προγραμματισμένη πρόσβαση. Ακολουθώντας αυτές τις οδηγίες και χρησιμοποιώντας τη βιβλιοθήκη `threadexec`, μπορεί κανείς να διαχειριστεί και να αλληλεπιδράσει με διαδικασίες σε λεπτομερές επίπεδο, επιτυγχάνοντας πλήρη έλεγχο της στοχευμένης διαδικασίας. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md index aeded4a3a..601ca9dca 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md @@ -68,12 +68,12 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist - **`xpc_object_t`** -Κάθε μήνυμα XPC είναι ένα αντικείμενο λεξικού που απλοποιεί τη σειριοποίηση και την αποσειριοποίηση. Επιπλέον, η `libxpc.dylib` δηλώνει τους περισσότερους τύπους δεδομένων, επομένως είναι δυνατό να διασφαλιστεί ότι τα ληφθέντα δεδομένα είναι του αναμενόμενου τύπου. Στο C API, κάθε αντικείμενο είναι ένα `xpc_object_t` (και ο τύπος του μπορεί να ελεγχθεί χρησιμοποιώντας `xpc_get_type(object)`).\ +Κάθε μήνυμα XPC είναι ένα αντικείμενο λεξικού που απλοποιεί τη σειριοποίηση και την αποσειριοποίηση. Επιπλέον, η `libxpc.dylib` δηλώνει τους περισσότερους τύπους δεδομένων, οπότε είναι δυνατό να διασφαλιστεί ότι τα ληφθέντα δεδομένα είναι του αναμενόμενου τύπου. Στο C API, κάθε αντικείμενο είναι ένα `xpc_object_t` (και ο τύπος του μπορεί να ελεγχθεί χρησιμοποιώντας `xpc_get_type(object)`).\ Επιπλέον, η συνάρτηση `xpc_copy_description(object)` μπορεί να χρησιμοποιηθεί για να αποκτήσει μια συμβολοσειρά αναπαράστασης του αντικειμένου που μπορεί να είναι χρήσιμη για σκοπούς αποσφαλμάτωσης.\ -Αυτά τα αντικείμενα έχουν επίσης μερικές μεθόδους που μπορούν να κληθούν όπως `xpc__copy`, `xpc__equal`, `xpc__hash`, `xpc__serialize`, `xpc__deserialize`... +Αυτά τα αντικείμενα έχουν επίσης κάποιες μεθόδους που μπορούν να κληθούν όπως `xpc__copy`, `xpc__equal`, `xpc__hash`, `xpc__serialize`, `xpc__deserialize`... Τα `xpc_object_t` δημιουργούνται καλώντας τη συνάρτηση `xpc__create`, η οποία εσωτερικά καλεί το `_xpc_base_create(Class, Size)` όπου υποδεικνύεται ο τύπος της κλάσης του αντικειμένου (ένας από τους `XPC_TYPE_*`) και το μέγεθός του (κάποια επιπλέον 40B θα προστεθούν στο μέγεθος για μεταδεδομένα). Αυτό σημαίνει ότι τα δεδομένα του αντικειμένου θα ξεκινούν από την απόσταση 40B.\ -Επομένως, το `xpc__t` είναι κάπως υποκλάση του `xpc_object_t`, το οποίο θα ήταν υποκλάση του `os_object_t*`. +Επομένως, το `xpc__t` είναι κάπως μια υποκλάση του `xpc_object_t`, η οποία θα ήταν μια υποκλάση του `os_object_t*`. > [!WARNING] > Σημειώστε ότι θα πρέπει να είναι ο προγραμματιστής που χρησιμοποιεί `xpc_dictionary_[get/set]_` για να αποκτήσει ή να ορίσει τον τύπο και την πραγματική τιμή ενός κλειδιού. @@ -83,9 +83,9 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist Ένα **`xpc_pipe`** είναι ένας σωλήνας FIFO που οι διαδικασίες μπορούν να χρησιμοποιήσουν για να επικοινωνήσουν (η επικοινωνία χρησιμοποιεί μηνύματα Mach).\ Είναι δυνατό να δημιουργηθεί ένας XPC server καλώντας `xpc_pipe_create()` ή `xpc_pipe_create_from_port()` για να τον δημιουργήσει χρησιμοποιώντας μια συγκεκριμένη θύρα Mach. Στη συνέχεια, για να λάβει μηνύματα, είναι δυνατό να καλέσει `xpc_pipe_receive` και `xpc_pipe_try_receive`. -Σημειώστε ότι το αντικείμενο **`xpc_pipe`** είναι ένα **`xpc_object_t`** με πληροφορίες στη δομή του σχετικά με τις δύο θύρες Mach που χρησιμοποιούνται και το όνομα (αν υπάρχει). Το όνομα, για παράδειγμα, ο δαίμονας `secinitd` στην plist του `/System/Library/LaunchDaemons/com.apple.secinitd.plist` ρυθμίζει τον σωλήνα που ονομάζεται `com.apple.secinitd`. +Σημειώστε ότι το αντικείμενο **`xpc_pipe`** είναι ένα **`xpc_object_t`** με πληροφορίες στη δομή του σχετικά με τις δύο θύρες Mach που χρησιμοποιούνται και το όνομα (αν υπάρχει). Το όνομα, για παράδειγμα, ο daemon `secinitd` στο plist του `/System/Library/LaunchDaemons/com.apple.secinitd.plist` ρυθμίζει τον σωλήνα που ονομάζεται `com.apple.secinitd`. -Ένα παράδειγμα ενός **`xpc_pipe`** είναι ο **bootstrap pip**e που δημιουργείται από **`launchd`** καθιστώντας δυνατή την κοινή χρήση θύρων Mach. +Ένα παράδειγμα ενός **`xpc_pipe`** είναι ο **bootstrap pip**e που δημιουργείται από τον **`launchd`** καθιστώντας δυνατή την κοινή χρήση θύρων Mach. - **`NSXPC*`** @@ -103,7 +103,7 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist ### Εκκίνηση μιας Υπηρεσίας -Η εφαρμογή προσπαθεί να **συνδεθεί** με μια υπηρεσία XPC χρησιμοποιώντας `xpc_connection_create_mach_service`, στη συνέχεια, ο launchd εντοπίζει τον δαίμονα και εκκινεί το **`xpcproxy`**. Το **`xpcproxy`** επιβάλλει τις ρυθμισμένες περιορισμούς και δημιουργεί την υπηρεσία με τις παρεχόμενες FDs και θύρες Mach. +Η εφαρμογή προσπαθεί να **συνδεθεί** με μια υπηρεσία XPC χρησιμοποιώντας `xpc_connection_create_mach_service`, στη συνέχεια ο launchd εντοπίζει τον daemon και εκκινεί τον **`xpcproxy`**. Ο **`xpcproxy`** επιβάλλει τις ρυθμισμένες περιορισμούς και δημιουργεί την υπηρεσία με τις παρεχόμενες FDs και θύρες Mach. Για να βελτιωθεί η ταχύτητα αναζήτησης της υπηρεσίας XPC, χρησιμοποιείται μια κρυφή μνήμη. @@ -111,7 +111,7 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist ```bash supraudit S -C -o /tmp/output /dev/auditpipe ``` -Η βιβλιοθήκη XPC χρησιμοποιεί `kdebug` για να καταγράψει ενέργειες καλώντας `xpc_ktrace_pid0` και `xpc_ktrace_pid1`. Οι κωδικοί που χρησιμοποιεί δεν είναι τεκμηριωμένοι, οπότε είναι απαραίτητο να τους προσθέσετε στο `/usr/share/misc/trace.codes`. Έχουν το πρόθεμα `0x29` και για παράδειγμα ένας είναι `0x29000004`: `XPC_serializer_pack`.\ +Η βιβλιοθήκη XPC χρησιμοποιεί `kdebug` για να καταγράψει ενέργειες καλώντας `xpc_ktrace_pid0` και `xpc_ktrace_pid1`. Οι κωδικοί που χρησιμοποιεί δεν είναι τεκμηριωμένοι, επομένως είναι απαραίτητο να τους προσθέσετε στο `/usr/share/misc/trace.codes`. Έχουν το πρόθεμα `0x29` και για παράδειγμα ένας είναι `0x29000004`: `XPC_serializer_pack`.\ Το εργαλείο `xpcproxy` χρησιμοποιεί το πρόθεμα `0x22`, για παράδειγμα: `0x2200001c: xpcproxy:will_do_preexec`. ## XPC Event Messages @@ -128,7 +128,7 @@ macos-xpc-connecting-process-check/ ## XPC Authorization -Η Apple επιτρέπει επίσης στις εφαρμογές να **ρυθμίζουν ορισμένα δικαιώματα και πώς να τα αποκτούν**, ώστε αν η καλούσα διαδικασία τα έχει, να είναι **επιτρεπτό να καλέσει μια μέθοδο** από την υπηρεσία XPC: +Η Apple επιτρέπει επίσης στις εφαρμογές να **ρυθμίζουν ορισμένα δικαιώματα και πώς να τα αποκτούν**, έτσι ώστε αν η καλούσα διαδικασία τα έχει, θα **επιτρέπεται να καλέσει μια μέθοδο** από την υπηρεσία XPC: {{#ref}} macos-xpc-authorization.md @@ -446,7 +446,7 @@ return; Μόλις χρησιμοποιηθεί το connect και συγκεντρωθεί το socket `fd` της υπηρεσίας, είναι δυνατή η χρήση της κλάσης `remote_xpc_connection_*`. -Είναι δυνατή η απόκτηση πληροφοριών σχετικά με τις απομακρυσμένες υπηρεσίες χρησιμοποιώντας το cli εργαλείο `/usr/libexec/remotectl` με παραμέτρους όπως: +Είναι δυνατή η απόκτηση πληροφοριών σχετικά με τις απομακρυσμένες υπηρεσίες χρησιμοποιώντας το cli εργαλείο `/usr/libexec/remotectl` χρησιμοποιώντας παραμέτρους όπως: ```bash /usr/libexec/remotectl list # Get bridge devices /usr/libexec/remotectl show ...# Get device properties and services diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md index c7e4a6c2c..c4e4ff6af 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md @@ -27,7 +27,7 @@ newConnection.exportedObject = self; return YES; } ``` -Για περισσότερες πληροφορίες σχετικά με το πώς να ρυθμίσετε σωστά αυτήν την επιθεώρηση: +Για περισσότερες πληροφορίες σχετικά με το πώς να ρυθμίσετε σωστά αυτήν την επαλήθευση: {{#ref}} macos-xpc-connecting-process-check/ @@ -35,7 +35,7 @@ macos-xpc-connecting-process-check/ ### Δικαιώματα εφαρμογής -Ωστόσο, υπάρχει κάποια **εξουσιοδότηση που συμβαίνει όταν καλείται μια μέθοδος από το HelperTool**. +Ωστόσο, υπάρχει κάποια **εξουσιοδότηση που εκτελείται όταν καλείται μια μέθοδος από το HelperTool**. Η συνάρτηση **`applicationDidFinishLaunching`** από το `App/AppDelegate.m` θα δημιουργήσει μια κενή αναφορά εξουσιοδότησης μετά την εκκίνηση της εφαρμογής. Αυτό θα πρέπει πάντα να λειτουργεί.\ Στη συνέχεια, θα προσπαθήσει να **προσθέσει κάποια δικαιώματα** σε αυτήν την αναφορά εξουσιοδότησης καλώντας το `setupAuthorizationRights`: @@ -62,7 +62,7 @@ if (self->_authRef) { [self.window makeKeyAndOrderFront:self]; } ``` -Η συνάρτηση `setupAuthorizationRights` από το `Common/Common.m` θα αποθηκεύσει στη βάση δεδομένων auth `/var/db/auth.db` τα δικαιώματα της εφαρμογής. Σημειώστε πώς θα προσθέσει μόνο τα δικαιώματα που δεν είναι ακόμη στη βάση δεδομένων: +Η συνάρτηση `setupAuthorizationRights` από το `Common/Common.m` θα αποθηκεύσει στη βάση δεδομένων auth `/var/db/auth.db` τα δικαιώματα της εφαρμογής. Σημειώστε πώς θα προσθέσει μόνο τα δικαιώματα που δεν είναι ακόμα στη βάση δεδομένων: ```objectivec + (void)setupAuthorizationRights:(AuthorizationRef)authRef // See comment in header. @@ -249,14 +249,14 @@ security authorizationdb read com.apple.safaridriver.allow Μπορείτε να βρείτε **όλες τις ρυθμίσεις αδειών** [**εδώ**](https://www.dssw.co.uk/reference/authorization-rights/), αλλά οι συνδυασμοί που δεν θα απαιτούν αλληλεπίδραση από τον χρήστη θα είναι: 1. **'authenticate-user': 'false'** -- Αυτό είναι το πιο άμεσο κλειδί. Αν οριστεί σε `false`, καθορίζει ότι ένας χρήστης δεν χρειάζεται να παρέχει πιστοποίηση για να αποκτήσει αυτό το δικαίωμα. +- Αυτό είναι το πιο άμεσο κλειδί. Εάν οριστεί σε `false`, καθορίζει ότι ένας χρήστης δεν χρειάζεται να παρέχει πιστοποίηση για να αποκτήσει αυτό το δικαίωμα. - Χρησιμοποιείται σε **συνδυασμό με ένα από τα 2 παρακάτω ή υποδεικνύοντας μια ομάδα** στην οποία πρέπει να ανήκει ο χρήστης. 2. **'allow-root': 'true'** -- Αν ένας χρήστης λειτουργεί ως ο χρήστης root (ο οποίος έχει ανυψωμένα δικαιώματα), και αυτό το κλειδί είναι ορισμένο σε `true`, ο χρήστης root θα μπορούσε ενδεχομένως να αποκτήσει αυτό το δικαίωμα χωρίς περαιτέρω πιστοποίηση. Ωστόσο, συνήθως, η απόκτηση καθεστώτος χρήστη root απαιτεί ήδη πιστοποίηση, οπότε αυτό δεν είναι ένα σενάριο "χωρίς πιστοποίηση" για τους περισσότερους χρήστες. +- Εάν ένας χρήστης λειτουργεί ως ο χρήστης root (ο οποίος έχει ανυψωμένα δικαιώματα), και αυτό το κλειδί είναι ορισμένο σε `true`, ο χρήστης root θα μπορούσε ενδεχομένως να αποκτήσει αυτό το δικαίωμα χωρίς περαιτέρω πιστοποίηση. Ωστόσο, συνήθως, η απόκτηση καθεστώτος χρήστη root απαιτεί ήδη πιστοποίηση, οπότε αυτό δεν είναι ένα σενάριο "χωρίς πιστοποίηση" για τους περισσότερους χρήστες. 3. **'session-owner': 'true'** -- Αν οριστεί σε `true`, ο κάτοχος της συνεδρίας (ο τρέχων συνδεδεμένος χρήστης) θα αποκτήσει αυτό το δικαίωμα αυτόματα. Αυτό μπορεί να παρακάμψει πρόσθετη πιστοποίηση αν ο χρήστης είναι ήδη συνδεδεμένος. +- Εάν οριστεί σε `true`, ο κάτοχος της συνεδρίας (ο τρέχων συνδεδεμένος χρήστης) θα αποκτήσει αυτό το δικαίωμα αυτόματα. Αυτό μπορεί να παρακάμψει πρόσθετη πιστοποίηση εάν ο χρήστης είναι ήδη συνδεδεμένος. 4. **'shared': 'true'** -- Αυτό το κλειδί δεν παρέχει δικαιώματα χωρίς πιστοποίηση. Αντίθετα, αν οριστεί σε `true`, σημαίνει ότι μόλις το δικαίωμα έχει πιστοποιηθεί, μπορεί να μοιραστεί μεταξύ πολλών διαδικασιών χωρίς να χρειάζεται η κάθε μία να επαναπιστοποιηθεί. Αλλά η αρχική χορήγηση του δικαιώματος θα απαιτεί ακόμα πιστοποίηση εκτός αν συνδυαστεί με άλλα κλειδιά όπως το `'authenticate-user': 'false'`. +- Αυτό το κλειδί δεν παρέχει δικαιώματα χωρίς πιστοποίηση. Αντίθετα, εάν οριστεί σε `true`, σημαίνει ότι μόλις το δικαίωμα έχει πιστοποιηθεί, μπορεί να μοιραστεί μεταξύ πολλών διαδικασιών χωρίς να χρειάζεται η κάθε μία να επαναπιστοποιηθεί. Αλλά η αρχική χορήγηση του δικαιώματος θα απαιτεί ακόμα πιστοποίηση εκτός αν συνδυαστεί με άλλα κλειδιά όπως το `'authenticate-user': 'false'`. Μπορείτε να [**χρησιμοποιήσετε αυτό το σενάριο**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9) για να αποκτήσετε τα ενδιαφέροντα δικαιώματα: ```bash @@ -273,7 +273,7 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se ### Έλεγχος αν χρησιμοποιείται το EvenBetterAuthorization -Αν βρείτε τη συνάρτηση: **`[HelperTool checkAuthorization:command:]`** είναι πιθανό ότι η διαδικασία χρησιμοποιεί το προηγουμένως αναφερόμενο σχήμα για εξουσιοδότηση: +Αν βρείτε τη συνάρτηση: **`[HelperTool checkAuthorization:command:]`** πιθανότατα η διαδικασία χρησιμοποιεί το προηγουμένως αναφερόμενο σχήμα για εξουσιοδότηση:
@@ -291,7 +291,7 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se Σε αυτή την περίπτωση, έχουμε το ίδιο όπως στο EvenBetterAuthorizationSample, [**ελέγξτε αυτή τη γραμμή**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94). -Γνωρίζοντας το όνομα του χρησιμοποιούμενου πρωτοκόλλου, είναι δυνατό να **εκφορτώσετε τον ορισμό της κεφαλίδας του** με: +Γνωρίζοντας το όνομα του χρησιμοποιούμενου πρωτοκόλλου, είναι δυνατό να **dump its header definition** με: ```bash class-dump /Library/PrivilegedHelperTools/com.example.HelperTool @@ -305,7 +305,7 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool @end [...] ``` -Τέλος, πρέπει απλώς να γνωρίζουμε το **όνομα της εκτεθειμένης Υπηρεσίας Mach** προκειμένου να καθορίσουμε μια επικοινωνία μαζί της. Υπάρχουν αρκετοί τρόποι για να το βρούμε αυτό: +Τέλος, χρειάζεται απλώς να γνωρίζουμε το **όνομα της εκτεθειμένης Υπηρεσίας Mach** προκειμένου να καθορίσουμε μια επικοινωνία μαζί της. Υπάρχουν αρκετοί τρόποι για να το βρούμε αυτό: - Στο **`[HelperTool init]`** όπου μπορείτε να δείτε την Υπηρεσία Mach που χρησιμοποιείται: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md index 4542ad090..5deb89c55 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md @@ -8,17 +8,17 @@ 1. Έλεγχος αν η **διαδικασία που συνδέεται είναι υπογεγραμμένη με πιστοποιητικό υπογεγραμμένο από την Apple** (δίδεται μόνο από την Apple). - Αν αυτό **δεν επαληθευτεί**, ένας επιτιθέμενος θα μπορούσε να δημιουργήσει ένα **ψεύτικο πιστοποιητικό** για να ταιριάζει με οποιονδήποτε άλλο έλεγχο. -2. Έλεγχος αν η διαδικασία που συνδέεται είναι υπογεγραμμένη με το **πιστοποιητικό της οργάνωσης** (έλεγχος ταυτότητας ομάδας). +2. Έλεγχος αν η διαδικασία που συνδέεται είναι υπογεγραμμένη με το **πιστοποιητικό της οργάνωσης** (επικύρωση ID ομάδας). - Αν αυτό **δεν επαληθευτεί**, **οποιοδήποτε πιστοποιητικό προγραμματιστή** από την Apple μπορεί να χρησιμοποιηθεί για υπογραφή και σύνδεση με την υπηρεσία. 3. Έλεγχος αν η διαδικασία που συνδέεται **περιέχει ένα κατάλληλο bundle ID**. - Αν αυτό **δεν επαληθευτεί**, οποιοδήποτε εργαλείο **υπογεγραμμένο από την ίδια οργάνωση** θα μπορούσε να χρησιμοποιηθεί για αλληλεπίδραση με την υπηρεσία XPC. -4. (4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει **κατάλληλο αριθμό έκδοσης λογισμικού**. -- Αν αυτό **δεν επαληθευτεί**, παλιοί, ανασφαλείς πελάτες, ευάλωτοι σε ένεση διαδικασίας θα μπορούσαν να χρησιμοποιηθούν για σύνδεση με την υπηρεσία XPC ακόμη και με τους άλλους ελέγχους σε εφαρμογή. +4. (4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει έναν **κατάλληλο αριθμό έκδοσης λογισμικού**. +- Αν αυτό **δεν επαληθευτεί**, παλιοί, ανασφαλείς πελάτες, ευάλωτοι σε διαδικαστική ένεση, θα μπορούσαν να χρησιμοποιηθούν για σύνδεση με την υπηρεσία XPC ακόμη και με τους άλλους ελέγχους σε εφαρμογή. 5. (4 ή 5) Έλεγχος αν η διαδικασία που συνδέεται έχει σκληρυμένο χρόνο εκτέλεσης χωρίς επικίνδυνες εξουσιοδοτήσεις (όπως αυτές που επιτρέπουν τη φόρτωση αυθαίρετων βιβλιοθηκών ή τη χρήση μεταβλητών περιβάλλοντος DYLD). 1. Αν αυτό **δεν επαληθευτεί**, ο πελάτης μπορεί να είναι **ευάλωτος σε ένεση κώδικα**. 6. Έλεγχος αν η διαδικασία που συνδέεται έχει μια **εξουσιοδότηση** που της επιτρέπει να συνδεθεί με την υπηρεσία. Αυτό ισχύει για τα δυαδικά αρχεία της Apple. -7. Η **επικύρωση** πρέπει να είναι **βασισμένη** στο **token ελέγχου του πελάτη** **αντί** για το ID διαδικασίας του (**PID**) καθώς το πρώτο αποτρέπει **επιθέσεις επαναχρησιμοποίησης PID**. -- Οι προγραμματιστές **σπάνια χρησιμοποιούν το API token ελέγχου** καθώς είναι **ιδιωτικό**, οπότε η Apple θα μπορούσε να **αλλάξει** οποιαδήποτε στιγμή. Επιπλέον, η χρήση ιδιωτικών API δεν επιτρέπεται σε εφαρμογές του Mac App Store. +7. Η **επικύρωση** πρέπει να είναι **βασισμένη** στο **token ελέγχου του πελάτη** **αντί** για το ID διαδικασίας του (**PID**) καθώς το πρώτο αποτρέπει τις **επιθέσεις επαναχρησιμοποίησης PID**. +- Οι προγραμματιστές **σπάνια χρησιμοποιούν το API token ελέγχου** καθώς είναι **ιδιωτικό**, οπότε η Apple θα μπορούσε να **αλλάξει** ανά πάσα στιγμή. Επιπλέον, η χρήση ιδιωτικών API δεν επιτρέπεται σε εφαρμογές του Mac App Store. - Αν η μέθοδος **`processIdentifier`** χρησιμοποιηθεί, μπορεί να είναι ευάλωτη. - **`xpc_dictionary_get_audit_token`** θα πρέπει να χρησιμοποιείται αντί για **`xpc_connection_get_audit_token`**, καθώς η τελευταία θα μπορούσε επίσης να είναι [ευάλωτη σε ορισμένες καταστάσεις](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/). diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md index 77b52d013..b393ecba5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md @@ -4,13 +4,13 @@ ## PID Reuse -Όταν μια υπηρεσία **XPC** στο macOS ελέγχει τη διαδικασία που καλείται με βάση το **PID** και όχι το **audit token**, είναι ευάλωτη σε επίθεση επαναχρησιμοποίησης PID. Αυτή η επίθεση βασίζεται σε μια **κατάσταση αγώνα** όπου μια **εκμετάλλευση** θα **στείλει μηνύματα στην υπηρεσία XPC** **καταχρώντας** τη λειτουργικότητα και μόλις **μετά** από αυτό, εκτελώντας **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** με το **επιτρεπόμενο** δυαδικό αρχείο. +Όταν μια υπηρεσία **XPC** του macOS ελέγχει τη διαδικασία που καλείται με βάση το **PID** και όχι το **audit token**, είναι ευάλωτη σε επίθεση επαναχρησιμοποίησης PID. Αυτή η επίθεση βασίζεται σε μια **κατάσταση αγώνα** όπου μια **εκμετάλλευση** θα **στείλει μηνύματα στην υπηρεσία XPC** **καταχρώντας** τη λειτουργικότητα και μόλις **μετά** από αυτό, εκτελώντας **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** με το **επιτρεπόμενο** δυαδικό. -Αυτή η συνάρτηση θα κάνει το **επιτρεπόμενο δυαδικό αρχείο να κατέχει το PID** αλλά το **κακόβουλο μήνυμα XPC θα έχει σταλεί** ακριβώς πριν. Έτσι, αν η υπηρεσία **XPC** **χρησιμοποιεί** το **PID** για να **επαληθεύσει** τον αποστολέα και το ελέγξει **ΜΕΤΑ** την εκτέλεση του **`posix_spawn`**, θα νομίζει ότι προέρχεται από μια **εξουσιοδοτημένη** διαδικασία. +Αυτή η συνάρτηση θα κάνει το **επιτρεπόμενο δυαδικό να κατέχει το PID** αλλά το **κακόβουλο μήνυμα XPC θα έχει σταλεί** ακριβώς πριν. Έτσι, αν η υπηρεσία **XPC** **χρησιμοποιεί** το **PID** για να **επαληθεύσει** τον αποστολέα και το ελέγξει **ΜΕΤΑ** την εκτέλεση του **`posix_spawn`**, θα νομίζει ότι προέρχεται από μια **εξουσιοδοτημένη** διαδικασία. ### Παράδειγμα εκμετάλλευσης -Αν βρείτε τη συνάρτηση **`shouldAcceptNewConnection`** ή μια συνάρτηση που καλείται από αυτή που **καλεί** **`processIdentifier`** και δεν καλεί **`auditToken`**. Είναι πολύ πιθανό να σημαίνει ότι **επαληθεύει το PID της διαδικασίας** και όχι το audit token.\ +Αν βρείτε τη συνάρτηση **`shouldAcceptNewConnection`** ή μια συνάρτηση που καλείται από αυτή **καλώντας** **`processIdentifier`** και όχι **`auditToken`**. Είναι πολύ πιθανό να σημαίνει ότι **επαληθεύει το PID της διαδικασίας** και όχι το audit token.\ Όπως για παράδειγμα σε αυτή την εικόνα (παρμένη από την αναφορά):
https://wojciechregula.blog/images/2020/04/pid.png
@@ -21,7 +21,7 @@ - **Κάθε fork** θα **στείλει** το **payload** στην υπηρεσία XPC ενώ εκτελεί **`posix_spawn`** αμέσως μετά την αποστολή του μηνύματος. > [!CAUTION] -> Για να λειτουργήσει η εκμετάλλευση είναι σημαντικό να ` export`` `` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** ή να το βάλετε μέσα στην εκμετάλλευση: +> Για να λειτουργήσει η εκμετάλλευση είναι σημαντικό να ` export`` `` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** ή να τοποθετήσετε μέσα στην εκμετάλλευση: > > ```objectivec > asm(".section __DATA,__objc_fork_ok\n" diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md index 2eb3bf51f..b677ed8c0 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md @@ -17,7 +17,7 @@ ## XPC Connection -Αν δεν ξέρετε πώς να καθιερωθεί μια XPC σύνδεση, ελέγξτε: +Αν δεν ξέρετε πώς να καθιερώσετε μια XPC σύνδεση, ελέγξτε: {{#ref}} ../ @@ -33,8 +33,8 @@ Αν και η προηγούμενη κατάσταση ακούγεται υποσχόμενη, υπάρχουν ορισμένα σενάρια όπου αυτό δεν θα προκαλέσει προβλήματα ([από εδώ](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)): -- Τα audit tokens χρησιμοποιούνται συχνά για έναν έλεγχο εξουσιοδότησης για να αποφασιστεί αν θα γίνει αποδεκτή μια σύνδεση. Καθώς αυτό συμβαίνει χρησιμοποιώντας ένα μήνυμα προς την υπηρεσία port, **δεν έχει καθιερωθεί καμία σύνδεση ακόμα**. Περισσότερα μηνύματα σε αυτό το port θα αντιμετωπιστούν απλώς ως επιπλέον αιτήματα σύνδεσης. Έτσι, οποιοσδήποτε **έλεγχος πριν από την αποδοχή μιας σύνδεσης δεν είναι ευάλωτος** (αυτό σημαίνει επίσης ότι μέσα στο `-listener:shouldAcceptNewConnection:` το audit token είναι ασφαλές). Επομένως, **αναζητούμε XPC συνδέσεις που επαληθεύουν συγκεκριμένες ενέργειες**. -- Οι χειριστές γεγονότων XPC διαχειρίζονται συγχρονισμένα. Αυτό σημαίνει ότι ο χειριστής γεγονότος για ένα μήνυμα πρέπει να ολοκληρωθεί πριν από την κλήση του για το επόμενο, ακόμη και σε ταυτόχρονες ουρές εκτέλεσης. Έτσι, μέσα σε έναν **χειριστή γεγονότος XPC, το audit token δεν μπορεί να αντικατασταθεί** από άλλα κανονικά (μη απαντητικά!) μηνύματα. +- Τα audit tokens χρησιμοποιούνται συχνά για έναν έλεγχο εξουσιοδότησης για να αποφασιστεί αν θα γίνει αποδεκτή μια σύνδεση. Καθώς αυτό συμβαίνει χρησιμοποιώντας ένα μήνυμα προς την υπηρεσία, **δεν έχει καθιερωθεί ακόμη καμία σύνδεση**. Περισσότερα μηνύματα σε αυτό το port θα αντιμετωπιστούν απλώς ως επιπλέον αιτήματα σύνδεσης. Έτσι, οποιοσδήποτε **έλεγχος πριν από την αποδοχή μιας σύνδεσης δεν είναι ευάλωτος** (αυτό σημαίνει επίσης ότι μέσα στο `-listener:shouldAcceptNewConnection:` το audit token είναι ασφαλές). Επομένως, **αναζητούμε XPC συνδέσεις που επαληθεύουν συγκεκριμένες ενέργειες**. +- Οι χειριστές γεγονότων XPC διαχειρίζονται συγχρονισμένα. Αυτό σημαίνει ότι ο χειριστής γεγονότος για ένα μήνυμα πρέπει να ολοκληρωθεί πριν κληθεί για το επόμενο, ακόμη και σε ταυτόχρονες ουρές εκτέλεσης. Έτσι, μέσα σε έναν **χειριστή γεγονότος XPC, το audit token δεν μπορεί να αντικατασταθεί** από άλλα κανονικά (μη απαντητικά!) μηνύματα. Δύο διαφορετικές μέθοδοι που μπορεί να είναι εκμεταλλεύσιμες: @@ -44,11 +44,11 @@ - Η υπηρεσία **A** καλεί **`xpc_connection_get_audit_token`** ενώ _**δεν**_ είναι μέσα στον **χειριστή γεγονότων** για μια σύνδεση σε μια **`dispatch_async`**. - Έτσι, ένα **διαφορετικό** μήνυμα θα μπορούσε να **αντικαταστήσει το Audit Token** επειδή αποστέλλεται ασύγχρονα έξω από τον χειριστή γεγονότων. - Η εκμετάλλευση περνά στην **υπηρεσία B το δικαίωμα ΑΠΟΣΤΟΛΗΣ στην υπηρεσία A**. -- Έτσι, η svc **B** θα είναι στην πραγματικότητα **στέλνοντας** τα **μηνύματα** στην υπηρεσία **A**. -- Η **εκμετάλλευση** προσπαθεί να **καλέσει** την **προνομιακή ενέργεια.** Σε μια RC svc **A** **ελέγχει** την εξουσιοδότηση αυτής της **ενέργειας** ενώ **svc B αντικαθιστά το Audit token** (δίνοντας στην εκμετάλλευση πρόσβαση για να καλέσει την προνομιακή ενέργεια). +- Έτσι, η svc **B** θα είναι στην πραγματικότητα **αποστέλλοντας** τα **μηνύματα** στην υπηρεσία **A**. +- Η **εκμετάλλευση** προσπαθεί να **καλέσει** την **προνομιακή ενέργεια.** Σε μια RC η svc **A** **ελέγχει** την εξουσιοδότηση αυτής της **ενέργειας** ενώ **η svc B αντικαθιστά το Audit token** (δίνοντας στην εκμετάλλευση πρόσβαση για να καλέσει την προνομιακή ενέργεια). 2. Variant 2: - Η υπηρεσία **B** μπορεί να καλέσει μια **προνομιακή λειτουργία** στην υπηρεσία A που ο χρήστης δεν μπορεί -- Η εκμετάλλευση συνδέεται με **την υπηρεσία A**, η οποία **στέλνει** στην εκμετάλλευση ένα **μήνυμα που αναμένει απάντηση** σε μια συγκεκριμένη **θύρα απάντησης**. +- Η εκμετάλλευση συνδέεται με **την υπηρεσία A** που **στέλνει** στην εκμετάλλευση ένα **μήνυμα που αναμένει απάντηση** σε μια συγκεκριμένη **θύρα απάντησης**. - Η εκμετάλλευση στέλνει **στην υπηρεσία** B ένα μήνυμα περνώντας **αυτή τη θύρα απάντησης**. - Όταν η υπηρεσία **B απαντά**, στέλνει το μήνυμα στην υπηρεσία A, **ενώ** η **εκμετάλλευση** στέλνει ένα διαφορετικό **μήνυμα στην υπηρεσία A** προσπαθώντας να **φτάσει σε μια προνομιακή λειτουργία** και αναμένοντας ότι η απάντηση από την υπηρεσία B θα αντικαταστήσει το Audit token τη σωστή στιγμή (Race Condition). @@ -66,25 +66,25 @@ Αυτό συνέβη με **`A`** ως `smd` και **`B`** ως `diagnosticd`. Η λειτουργία [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) από το smb μπορεί να χρησιμοποιηθεί για να εγκαταστήσει ένα νέο προνομιακό βοηθητικό εργαλείο (ως **root**). Αν μια **διαδικασία που εκτελείται ως root επικοινωνήσει** με **smd**, δεν θα εκτελούνται άλλοι έλεγχοι. -Επομένως, η υπηρεσία **B** είναι **`diagnosticd`** επειδή εκτελείται ως **root** και μπορεί να χρησιμοποιηθεί για να **παρακολουθεί** μια διαδικασία, οπότε μόλις ξεκινήσει η παρακολούθηση, θα **στέλνει πολλαπλά μηνύματα ανά δευτερόλεπτο.** +Επομένως, η υπηρεσία **B** είναι **`diagnosticd`** επειδή εκτελείται ως **root** και μπορεί να χρησιμοποιηθεί για να **παρακολουθήσει** μια διαδικασία, οπότε μόλις ξεκινήσει η παρακολούθηση, θα **στέλνει πολλαπλά μηνύματα ανά δευτερόλεπτο.** Για να εκτελέσετε την επίθεση: 1. Ξεκινήστε μια **σύνδεση** με την υπηρεσία που ονομάζεται `smd` χρησιμοποιώντας το πρότυπο XPC. 2. Δημιουργήστε μια δευτερεύουσα **σύνδεση** με `diagnosticd`. Αντίθετα με τη φυσιολογική διαδικασία, αντί να δημιουργήσετε και να στείλετε δύο νέες mach ports, το δικαίωμα αποστολής του πελάτη αντικαθίσταται με ένα αντίγραφο του **δικαιώματος αποστολής** που σχετίζεται με τη σύνδεση `smd`. -3. Ως αποτέλεσμα, τα XPC μηνύματα μπορούν να αποσταλούν στο `diagnosticd`, αλλά οι απαντήσεις από το `diagnosticd` ανακατευθύνονται στο `smd`. Για το `smd`, φαίνεται ότι τα μηνύματα και από τον χρήστη και από το `diagnosticd` προέρχονται από την ίδια σύνδεση. +3. Ως αποτέλεσμα, τα μηνύματα XPC μπορούν να αποστέλλονται στο `diagnosticd`, αλλά οι απαντήσεις από το `diagnosticd` ανακατευθύνονται στο `smd`. Για το `smd`, φαίνεται ότι τα μηνύματα και από τον χρήστη και από το `diagnosticd` προέρχονται από την ίδια σύνδεση. ![Image depicting the exploit process](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png) -4. Το επόμενο βήμα περιλαμβάνει την εντολή στο `diagnosticd` να ξεκινήσει την παρακολούθηση μιας επιλεγμένης διαδικασίας (πιθανώς της δικής του του χρήστη). Ταυτόχρονα, μια πλημμύρα κανονικών 1004 μηνυμάτων αποστέλλεται στο `smd`. Ο σκοπός εδώ είναι να εγκαταστήσει ένα εργαλείο με ανυψωμένα δικαιώματα. -5. Αυτή η ενέργεια προκαλεί μια race condition μέσα στη λειτουργία `handle_bless`. Ο χρόνος είναι κρίσιμος: η κλήση της λειτουργίας `xpc_connection_get_pid` πρέπει να επιστρέψει το PID της διαδικασίας του χρήστη (καθώς το προνομιακό εργαλείο βρίσκεται στο πακέτο εφαρμογής του χρήστη). Ωστόσο, η λειτουργία `xpc_connection_get_audit_token`, συγκεκριμένα μέσα στη υπορουτίνα `connection_is_authorized`, πρέπει να αναφέρεται στο audit token που ανήκει στο `diagnosticd`. +4. Το επόμενο βήμα περιλαμβάνει την εντολή στο `diagnosticd` να ξεκινήσει την παρακολούθηση μιας επιλεγμένης διαδικασίας (πιθανώς της δικής του του χρήστη). Ταυτόχρονα, μια πλημμύρα κανονικών 1004 μηνυμάτων αποστέλλεται στο `smd`. Ο σκοπός εδώ είναι να εγκαταστήσει ένα εργαλείο με αυξημένα προνόμια. +5. Αυτή η ενέργεια προκαλεί μια race condition μέσα στη λειτουργία `handle_bless`. Ο χρόνος είναι κρίσιμος: η κλήση της συνάρτησης `xpc_connection_get_pid` πρέπει να επιστρέψει το PID της διαδικασίας του χρήστη (καθώς το προνομιακό εργαλείο βρίσκεται στο πακέτο εφαρμογής του χρήστη). Ωστόσο, η συνάρτηση `xpc_connection_get_audit_token`, συγκεκριμένα μέσα στη υπορουτίνα `connection_is_authorized`, πρέπει να αναφέρεται στο audit token που ανήκει στο `diagnosticd`. ## Variant 2: reply forwarding -Σε ένα περιβάλλον XPC (Διαδικασία-Διαδικασία Επικοινωνία), αν και οι χειριστές γεγονότων δεν εκτελούνται ταυτόχρονα, η διαχείριση των απαντητικών μηνυμάτων έχει μια μοναδική συμπεριφορά. Συγκεκριμένα, υπάρχουν δύο διακριτές μέθοδοι για την αποστολή μηνυμάτων που αναμένουν απάντηση: +Σε ένα περιβάλλον XPC (Διαδικασία-Διαδικασία Επικοινωνίας), αν και οι χειριστές γεγονότων δεν εκτελούνται ταυτόχρονα, η διαχείριση των μηνυμάτων απάντησης έχει μια μοναδική συμπεριφορά. Συγκεκριμένα, υπάρχουν δύο διακριτές μέθοδοι για την αποστολή μηνυμάτων που αναμένουν απάντηση: -1. **`xpc_connection_send_message_with_reply`**: Εδώ, το XPC μήνυμα λαμβάνεται και επεξεργάζεται σε μια καθορισμένη ουρά. -2. **`xpc_connection_send_message_with_reply_sync`**: Αντίθετα, σε αυτή τη μέθοδο, το XPC μήνυμα λαμβάνεται και επεξεργάζεται στην τρέχουσα ουρά εκτέλεσης. +1. **`xpc_connection_send_message_with_reply`**: Εδώ, το μήνυμα XPC λαμβάνεται και επεξεργάζεται σε μια καθορισμένη ουρά. +2. **`xpc_connection_send_message_with_reply_sync`**: Αντίθετα, σε αυτή τη μέθοδο, το μήνυμα XPC λαμβάνεται και επεξεργάζεται στην τρέχουσα ουρά εκτέλεσης. Αυτή η διάκριση είναι κρίσιμη επειδή επιτρέπει την πιθανότητα **τα πακέτα απάντησης να αναλύονται ταυτόχρονα με την εκτέλεση ενός χειριστή γεγονότων XPC**. Σημειωτέον, ενώ το `_xpc_connection_set_creds` εφαρμόζει κλείδωμα για να προστατεύσει από την μερική αντικατάσταση του audit token, δεν επεκτείνει αυτή την προστασία σε ολόκληρο το αντικείμενο σύνδεσης. Ως εκ τούτου, αυτό δημιουργεί μια ευπάθεια όπου το audit token μπορεί να αντικατασταθεί κατά τη διάρκεια της περιόδου μεταξύ της ανάλυσης ενός πακέτου και της εκτέλεσης του χειριστή γεγονότων του. @@ -109,8 +109,8 @@ ## Discovery Problems -- **Δυσκολίες στην Εύρεση Περιστατικών**: Η αναζήτηση για περιστατικά χρήσης του `xpc_connection_get_audit_token` ήταν δύσκολη, τόσο στατικά όσο και δυναμικά. -- **Μεθοδολογία**: Χρησιμοποιήθηκε το Frida για να συνδεθεί η λειτουργία `xpc_connection_get_audit_token`, φιλτράροντας κλήσεις που δεν προέρχονται από χειριστές γεγονότων. Ωστόσο, αυτή η μέθοδος περιορίστηκε στη συνδεδεμένη διαδικασία και απαιτούσε ενεργή χρήση. +- **Δυσκολίες στην Εύρεση Περιπτώσεων**: Η αναζήτηση για περιπτώσεις χρήσης του `xpc_connection_get_audit_token` ήταν δύσκολη, τόσο στατικά όσο και δυναμικά. +- **Μεθοδολογία**: Χρησιμοποιήθηκε το Frida για να συνδεθεί η συνάρτηση `xpc_connection_get_audit_token`, φιλτράροντας κλήσεις που δεν προέρχονται από χειριστές γεγονότων. Ωστόσο, αυτή η μέθοδος περιορίστηκε στη συνδεδεμένη διαδικασία και απαιτούσε ενεργή χρήση. - **Εργαλεία Ανάλυσης**: Χρησιμοποιήθηκαν εργαλεία όπως IDA/Ghidra για την εξέταση προσβάσιμων mach υπηρεσιών, αλλά η διαδικασία ήταν χρονοβόρα, περιπλέκεται από κλήσεις που περιλαμβάνουν την κοινή μνήμη dyld. - **Περιορισμοί Σενάριων**: Οι προσπάθειες να αυτοματοποιηθούν οι αναλύσεις για κλήσεις προς `xpc_connection_get_audit_token` από μπλοκ `dispatch_async` εμποδίστηκαν από τις πολυπλοκότητες στην ανάλυση μπλοκ και τις αλληλεπιδράσεις με την κοινή μνήμη dyld. @@ -118,8 +118,8 @@ - **Αναφερόμενα Ζητήματα**: Υποβλήθηκε αναφορά στην Apple που περιγράφει τα γενικά και συγκεκριμένα ζητήματα που βρέθηκαν στο `smd`. - **Απάντηση της Apple**: Η Apple αντιμετώπισε το ζήτημα στο `smd` αντικαθιστώντας το `xpc_connection_get_audit_token` με το `xpc_dictionary_get_audit_token`. -- **Φύση της Διόρθωσης**: Η λειτουργία `xpc_dictionary_get_audit_token` θεωρείται ασφαλής καθώς ανακτά το audit token απευθείας από το mach μήνυμα που συνδέεται με το ληφθέν XPC μήνυμα. Ωστόσο, δεν είναι μέρος του δημόσιου API, παρόμοια με το `xpc_connection_get_audit_token`. +- **Φύση της Διόρθωσης**: Η συνάρτηση `xpc_dictionary_get_audit_token` θεωρείται ασφαλής καθώς ανακτά το audit token απευθείας από το mach μήνυμα που σχετίζεται με το ληφθέν μήνυμα XPC. Ωστόσο, δεν είναι μέρος του δημόσιου API, παρόμοια με το `xpc_connection_get_audit_token`. - **Απουσία Ευρύτερης Διόρθωσης**: Παραμένει ασαφές γιατί η Apple δεν υλοποίησε μια πιο εκτενή διόρθωση, όπως η απόρριψη μηνυμάτων που δεν ευθυγραμμίζονται με το αποθηκευμένο audit token της σύνδεσης. Η πιθανότητα νόμιμων αλλαγών audit token σε ορισμένα σενάρια (π.χ. χρήση `setuid`) μπορεί να είναι παράγοντας. -- **Τρέχουσα Κατάσταση**: Το ζήτημα παραμένει στο iOS 17 και macOS 14, προκαλώντας προκλήσεις για όσους επιδιώκουν να το εντοπίσουν και να το κατανοήσουν. +- **Τρέχουσα Κατάσταση**: Το ζήτημα παραμένει στο iOS 17 και macOS 14, αποτελώντας πρόκληση για όσους επιδιώκουν να το εντοπίσουν και να το κατανοήσουν. {{#include ../../../../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md index 8b6e06449..4e90d1c66 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md @@ -4,7 +4,7 @@ ## Enumeration -Βρείτε τις εγκατεστημένες εφαρμογές Java στο σύστημά σας. Παρατηρήθηκε ότι οι εφαρμογές Java στο **Info.plist** θα περιέχουν κάποιες παραμέτρους java που περιέχουν τη συμβολοσειρά **`java.`**, οπότε μπορείτε να αναζητήσετε αυτό: +Βρείτε τις εφαρμογές Java που είναι εγκατεστημένες στο σύστημά σας. Παρατηρήθηκε ότι οι εφαρμογές Java στο **Info.plist** θα περιέχουν κάποιες παραμέτρους java που περιέχουν τη συμβολοσειρά **`java.`**, οπότε μπορείτε να αναζητήσετε αυτό: ```bash # Search only in /Applications folder sudo find /Applications -name 'Info.plist' -exec grep -l "java\." {} \; 2>/dev/null @@ -130,7 +130,7 @@ open --env "_JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'" -a "Burp Suite Profession Ακόμα περισσότερο, ορισμένες εφαρμογές Java θα **φορτώσουν περισσότερα από ένα `vmoptions`** αρχείο. -Ορισμένες εφαρμογές όπως το Android Studio υποδεικνύουν στην **έξοδό τους πού κοιτάζουν** για αυτά τα αρχεία, όπως: +Ορισμένες εφαρμογές όπως το Android Studio υποδεικνύουν στην **έξοδό τους πού ψάχνουν** για αυτά τα αρχεία, όπως: ```bash /Applications/Android\ Studio.app/Contents/MacOS/studio 2>&1 | grep vmoptions diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md index 294dfa139..12749a04e 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md @@ -22,7 +22,7 @@ macos-dyld-process.md > [!NOTE] > Από το 2012 **η Apple έχει μειώσει δραστικά τη δύναμη** του **`DYLD_INSERT_LIBRARIES`**. > -> Πηγαίνετε στον κώδικα και **ελέγξτε `src/dyld.cpp`**. Στη συνάρτηση **`pruneEnvironmentVariables`** μπορείτε να δείτε ότι οι μεταβλητές **`DYLD_*`** αφαιρούνται. +> Πηγαίνετε στον κώδικα και **ελέγξτε το `src/dyld.cpp`**. Στη συνάρτηση **`pruneEnvironmentVariables`** μπορείτε να δείτε ότι οι μεταβλητές **`DYLD_*`** αφαιρούνται. > > Στη συνάρτηση **`processRestricted`** ορίζεται ο λόγος της περιορισμού. Ελέγχοντας αυτόν τον κώδικα μπορείτε να δείτε ότι οι λόγοι είναι: > @@ -31,18 +31,18 @@ macos-dyld-process.md > - Το λογισμικό έχει δικαιώματα (hardened runtime) χωρίς δικαίωμα [`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables) > - Ελέγξτε τα **δικαιώματα** ενός δυαδικού αρχείου με: `codesign -dv --entitlements :- ` > -> Σε πιο ενημερωμένες εκδόσεις μπορείτε να βρείτε αυτή τη λογική στο δεύτερο μέρος της συνάρτησης **`configureProcessRestrictions`.** Ωστόσο, αυτό που εκτελείται σε νεότερες εκδόσεις είναι οι **έλεγχοι αρχής της συνάρτησης** (μπορείτε να αφαιρέσετε τα ifs που σχετίζονται με το iOS ή την προσομοίωση καθώς αυτά δεν θα χρησιμοποιηθούν στο macOS. +> Σε πιο ενημερωμένες εκδόσεις μπορείτε να βρείτε αυτή τη λογική στο δεύτερο μέρος της συνάρτησης **`configureProcessRestrictions`.** Ωστόσο, αυτό που εκτελείται σε νεότερες εκδόσεις είναι οι **έλεγχοι αρχής της συνάρτησης** (μπορείτε να αφαιρέσετε τα ifs που σχετίζονται με το iOS ή την προσομοίωση καθώς αυτά δεν θα χρησιμοποιηθούν στο macOS). ### Library Validation Ακόμα και αν το δυαδικό αρχείο επιτρέπει τη χρήση της μεταβλητής περιβάλλοντος **`DYLD_INSERT_LIBRARIES`**, αν το δυαδικό αρχείο ελέγχει την υπογραφή της βιβλιοθήκης για να τη φορτώσει, δεν θα φορτώσει μια προσαρμοσμένη. -Για να φορτωθεί μια προσαρμοσμένη βιβλιοθήκη, το δυαδικό αρχείο πρέπει να έχει **ένα από τα παρακάτω δικαιώματα**: +Για να φορτώσετε μια προσαρμοσμένη βιβλιοθήκη, το δυαδικό αρχείο πρέπει να έχει **ένα από τα παρακάτω δικαιώματα**: - [`com.apple.security.cs.disable-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.security.cs.disable-library-validation) - [`com.apple.private.security.clear-library-validation`](../../macos-security-protections/macos-dangerous-entitlements.md#com.apple.private.security.clear-library-validation) -ή το δυαδικό αρχείο **δεν θα πρέπει** να έχει τη **σημαία hardened runtime** ή τη **σημαία validation βιβλιοθήκης**. +ή το δυαδικό αρχείο **δεν πρέπει** να έχει τη **σημαία hardened runtime** ή τη **σημαία validation βιβλιοθήκης**. Μπορείτε να ελέγξετε αν ένα δυαδικό αρχείο έχει **hardened runtime** με `codesign --display --verbose ` ελέγχοντας τη σημαία runtime στο **`CodeDirectory`** όπως: **`CodeDirectory v=20500 size=767 flags=0x10000(runtime) hashes=13+7 location=embedded`** @@ -59,14 +59,14 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md > [!CAUTION] > Θυμηθείτε ότι **οι προηγούμενοι περιορισμοί Validation Βιβλιοθήκης ισχύουν επίσης** για την εκτέλεση επιθέσεων Dylib hijacking. -Όπως στα Windows, στο MacOS μπορείτε επίσης να **καταχραστείτε dylibs** για να κάνετε **εφαρμογές** **να εκτελούν** **τυχαίο** **κώδικα** (καλά, στην πραγματικότητα από έναν κανονικό χρήστη αυτό δεν θα ήταν δυνατό καθώς μπορεί να χρειαστείτε άδεια TCC για να γράψετε μέσα σε ένα `.app` bundle και να καταχραστείτε μια βιβλιοθήκη).\ -Ωστόσο, ο τρόπος που οι εφαρμογές **MacOS** **φορτώνουν** βιβλιοθήκες είναι **πιο περιορισμένος** από ότι στα Windows. Αυτό σημαίνει ότι οι προγραμματιστές **malware** μπορούν ακόμα να χρησιμοποιήσουν αυτή την τεχνική για **stealth**, αλλά η πιθανότητα να μπορέσουν να **καταχραστούν αυτό για να κλιμακώσουν δικαιώματα είναι πολύ χαμηλότερη**. +Όπως και στα Windows, στο MacOS μπορείτε επίσης να **καταχραστείτε dylibs** για να κάνετε **εφαρμογές** **να εκτελούν** **τυχαίο** **κώδικα** (καλά, στην πραγματικότητα από έναν κανονικό χρήστη αυτό δεν θα ήταν δυνατό καθώς μπορεί να χρειαστείτε άδεια TCC για να γράψετε μέσα σε ένα `.app` bundle και να καταχραστείτε μια βιβλιοθήκη).\ +Ωστόσο, ο τρόπος που οι εφαρμογές **MacOS** **φορτώνουν** βιβλιοθήκες είναι **πιο περιορισμένος** από ότι στα Windows. Αυτό σημαίνει ότι οι προγραμματιστές **malware** μπορούν ακόμα να χρησιμοποιήσουν αυτή την τεχνική για **stealth**, αλλά η πιθανότητα να μπορέσουν να **καταχραστούν αυτό για να κλιμακώσουν προνόμια είναι πολύ χαμηλότερη**. -Πρώτα απ' όλα, είναι **πιο συνηθισμένο** να βρείτε ότι τα **MacOS δυαδικά αρχεία υποδεικνύουν την πλήρη διαδρομή** στις βιβλιοθήκες που πρέπει να φορτωθούν. Και δεύτερον, **MacOS ποτέ δεν ψάχνει** στους φακέλους του **$PATH** για βιβλιοθήκες. +Πρώτα απ' όλα, είναι **πιο συνηθισμένο** να βρείτε ότι τα **MacOS δυαδικά αρχεία υποδεικνύουν την πλήρη διαδρομή** προς τις βιβλιοθήκες που πρέπει να φορτωθούν. Και δεύτερον, **το MacOS ποτέ δεν ψάχνει** στους φακέλους του **$PATH** για βιβλιοθήκες. Το **κύριο** μέρος του **κώδικα** που σχετίζεται με αυτή τη λειτουργικότητα είναι στη **`ImageLoader::recursiveLoadLibraries`** στο `ImageLoader.cpp`. -Υπάρχουν **4 διαφορετικές εντολές Header** που μπορεί να χρησιμοποιήσει ένα macho δυαδικό αρχείο για να φορτώσει βιβλιοθήκες: +Υπάρχουν **4 διαφορετικές εντολές κεφαλίδας** που μπορεί να χρησιμοποιήσει ένα macho δυαδικό αρχείο για να φορτώσει βιβλιοθήκες: - Η εντολή **`LC_LOAD_DYLIB`** είναι η κοινή εντολή για να φορτώσετε μια dylib. - Η εντολή **`LC_LOAD_WEAK_DYLIB`** λειτουργεί όπως η προηγούμενη, αλλά αν η dylib δεν βρεθεί, η εκτέλεση συνεχίζεται χωρίς κανένα σφάλμα. @@ -100,7 +100,7 @@ compatibility version 1.0.0 > - Όταν χρησιμοποιείται σε ένα εκτελέσιμο, **`@loader_path`** είναι ουσιαστικά το **ίδιο** με το **`@executable_path`**. > - Όταν χρησιμοποιείται σε μια **dylib**, **`@loader_path`** δίνει τη **διαδρομή** προς τη **dylib**. -Ο τρόπος για να **κλιμακώσετε δικαιώματα** καταχρώντας αυτή τη λειτουργικότητα θα ήταν στην σπάνια περίπτωση που μια **εφαρμογή** που εκτελείται **από** **root** **ψάχνει** για κάποια **βιβλιοθήκη σε κάποιο φάκελο όπου ο επιτιθέμενος έχει δικαιώματα εγγραφής.** +Ο τρόπος για να **κλιμακώσετε προνόμια** καταχρώντας αυτή τη λειτουργικότητα θα ήταν στην σπάνια περίπτωση που μια **εφαρμογή** που εκτελείται **από** **root** **ψάχνει** για κάποια **βιβλιοθήκη σε κάποιο φάκελο όπου ο επιτιθέμενος έχει δικαιώματα εγγραφής.** > [!TIP] > Ένας ωραίος **σάρωτης** για να βρείτε **ελλείπουσες βιβλιοθήκες** σε εφαρμογές είναι [**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html) ή μια [**CLI έκδοση**](https://github.com/pandazheng/DylibHijack).\ @@ -119,7 +119,7 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md Από **`man dlopen`**: -- Όταν η διαδρομή **δεν περιέχει χαρακτήρα slash** (δηλαδή είναι απλώς ένα όνομα φύλλου), **dlopen() θα κάνει αναζητήσεις**. Αν **`$DYLD_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα **σε αυτή τη διεύθυνση**. Στη συνέχεια, αν το καλούν macho αρχείο ή το κύριο εκτελέσιμο καθορίζει μια **`LC_RPATH`**, τότε το dyld θα **κοιτάξει σε αυτούς τους** φακέλους. Στη συνέχεια, αν η διαδικασία είναι **χωρίς περιορισμούς**, το dyld θα αναζητήσει στον **τρέχοντα φάκελο εργασίας**. Τέλος, για παλιά δυαδικά αρχεία, το dyld θα δοκιμάσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε **αυτούς τους φακέλους**, αλλιώς, το dyld θα κοιτάξει στο **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια στο **`/usr/lib/`** (αυτή η πληροφορία ελήφθη από **`man dlopen`**). +- Όταν η διαδρομή **δεν περιέχει χαρακτήρα slash** (δηλαδή είναι απλώς ένα όνομα φύλλου), **dlopen() θα κάνει αναζητήσεις**. Αν **`$DYLD_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα **σε αυτή τη διεύθυνση**. Στη συνέχεια, αν το καλούν macho αρχείο ή το κύριο εκτελέσιμο καθορίζει μια **`LC_RPATH`**, τότε το dyld θα **κοιτάξει σε αυτές** τις διευθύνσεις. Στη συνέχεια, αν η διαδικασία είναι **χωρίς περιορισμούς**, το dyld θα αναζητήσει στον **τρέχοντα φάκελο εργασίας**. Τέλος, για παλιά δυαδικά αρχεία, το dyld θα δοκιμάσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε **αυτές τις διευθύνσεις**, αλλιώς, το dyld θα κοιτάξει στο **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια στο **`/usr/lib/`** (αυτές οι πληροφορίες ελήφθησαν από **`man dlopen`**). 1. `$DYLD_LIBRARY_PATH` 2. `LC_RPATH` 3. `CWD`(αν είναι χωρίς περιορισμούς) @@ -128,12 +128,12 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md 6. `/usr/lib/` > [!CAUTION] -> Αν δεν υπάρχουν slashes στο όνομα, θα υπάρχουν 2 τρόποι για να γίνει μια καταχρηστική: +> Αν δεν υπάρχουν slashes στο όνομα, θα υπάρχουν 2 τρόποι για να γίνει hijacking: > > - Αν οποιαδήποτε **`LC_RPATH`** είναι **γραπτή** (αλλά η υπογραφή ελέγχεται, οπότε για αυτό χρειάζεστε επίσης το δυαδικό αρχείο να είναι χωρίς περιορισμούς) -> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD (ή καταχρώντας μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) +> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD (ή να καταχραστεί μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) -- Όταν η διαδρομή **φαίνεται να είναι διαδρομή framework** (π.χ. `/stuff/foo.framework/foo`), αν **`$DYLD_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα σε αυτή τη διεύθυνση για τη **μερική διαδρομή του framework** (π.χ. `foo.framework/foo`). Στη συνέχεια, το dyld θα δοκιμάσει τη **παρεχόμενη διαδρομή όπως είναι** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές). Τέλος, για παλιά δυαδικά αρχεία, το dyld θα δοκιμάσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτούς τους φακέλους. Διαφορετικά, θα αναζητήσει στο **`/Library/Frameworks`** (στο macOS αν η διαδικασία είναι χωρίς περιορισμούς), στη συνέχεια **`/System/Library/Frameworks`**. +- Όταν η διαδρομή **φαίνεται να είναι διαδρομή framework** (π.χ. `/stuff/foo.framework/foo`), αν **`$DYLD_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα κοιτάξει πρώτα σε αυτή τη διεύθυνση για τη **μερική διαδρομή framework** (π.χ. `foo.framework/foo`). Στη συνέχεια, το dyld θα δοκιμάσει τη **παρεχόμενη διαδρομή όπως είναι** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές). Τέλος, για παλιά δυαδικά αρχεία, το dyld θα δοκιμάσει κάποιες εναλλακτικές. Αν **`$DYLD_FALLBACK_FRAMEWORK_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτές τις διευθύνσεις. Διαφορετικά, θα αναζητήσει στο **`/Library/Frameworks`** (στο macOS αν η διαδικασία είναι χωρίς περιορισμούς), στη συνέχεια **`/System/Library/Frameworks`**. 1. `$DYLD_FRAMEWORK_PATH` 2. παρεχόμενη διαδρομή (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές αν είναι χωρίς περιορισμούς) 3. `$DYLD_FALLBACK_FRAMEWORK_PATH` @@ -143,9 +143,9 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md > [!CAUTION] > Αν είναι διαδρομή framework, ο τρόπος για να την καταχραστείτε θα ήταν: > -> - Αν η διαδικασία είναι **χωρίς περιορισμούς**, καταχρώντας τη **σχετική διαδρομή από το CWD** τις αναφερόμενες μεταβλητές περιβάλλοντος (ακόμα και αν δεν αναφέρεται στα έγγραφα αν η διαδικασία είναι περιορισμένη οι μεταβλητές DYLD\_\* αφαιρούνται) +> - Αν η διαδικασία είναι **χωρίς περιορισμούς**, καταχρώντας τη **σχετική διαδρομή από CWD** τις αναφερόμενες μεταβλητές περιβάλλοντος (ακόμα και αν δεν αναφέρεται στα έγγραφα αν η διαδικασία είναι περιορισμένη οι μεταβλητές DYLD\_\* αφαιρούνται) -- Όταν η διαδρομή **περιέχει slash αλλά δεν είναι διαδρομή framework** (δηλαδή μια πλήρη διαδρομή ή μια μερική διαδρομή προς μια dylib), το dlopen() πρώτα κοιτάζει (αν έχει ρυθμιστεί) στο **`$DYLD_LIBRARY_PATH`** (με το φύλλο μέρους από τη διαδρομή). Στη συνέχεια, το dyld **δοκιμάζει τη παρεχόμενη διαδρομή** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές (αλλά μόνο για διαδικασίες χωρίς περιορισμούς)). Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα δοκιμάσει εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτούς τους φακέλους, αλλιώς, το dyld θα κοιτάξει στο **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια στο **`/usr/lib/`**. +- Όταν η διαδρομή **περιέχει slash αλλά δεν είναι διαδρομή framework** (δηλαδή μια πλήρη διαδρομή ή μια μερική διαδρομή προς μια dylib), το dlopen() πρώτα κοιτάζει (αν έχει ρυθμιστεί) στο **`$DYLD_LIBRARY_PATH`** (με το φύλλο μέρους από τη διαδρομή). Στη συνέχεια, το dyld **δοκιμάζει τη παρεχόμενη διαδρομή** (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές (αλλά μόνο για διαδικασίες χωρίς περιορισμούς)). Τέλος, για παλαιότερα δυαδικά αρχεία, το dyld θα δοκιμάσει εναλλακτικές. Αν **`$DYLD_FALLBACK_LIBRARY_PATH`** έχει ρυθμιστεί κατά την εκκίνηση, το dyld θα αναζητήσει σε αυτές τις διευθύνσεις, αλλιώς, το dyld θα κοιτάξει στο **`/usr/local/lib/`** (αν η διαδικασία είναι χωρίς περιορισμούς), και στη συνέχεια στο **`/usr/lib/`**. 1. `$DYLD_LIBRARY_PATH` 2. παρεχόμενη διαδρομή (χρησιμοποιώντας τον τρέχοντα φάκελο εργασίας για σχετικές διαδρομές αν είναι χωρίς περιορισμούς) 3. `$DYLD_FALLBACK_LIBRARY_PATH` @@ -155,7 +155,7 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md > [!CAUTION] > Αν υπάρχουν slashes στο όνομα και δεν είναι framework, ο τρόπος για να το καταχραστείτε θα ήταν: > -> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD ή `/usr/local/lib` (ή καταχρώντας μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) +> - Αν το δυαδικό αρχείο είναι **χωρίς περιορισμούς** και στη συνέχεια είναι δυνατό να φορτωθεί κάτι από το CWD ή `/usr/local/lib` (ή να καταχραστεί μία από τις αναφερόμενες μεταβλητές περιβάλλοντος) > [!NOTE] > Σημείωση: Δεν υπάρχουν **αρχεία ρυθμίσεων** για **έλεγχο της αναζήτησης dlopen**. @@ -164,7 +164,7 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md > > Σημείωση: Οι πλατφόρμες της Apple χρησιμοποιούν "καθολικά" αρχεία για να συνδυάσουν 32-bit και 64-bit βιβλιοθήκες. Αυτό σημαίνει ότι δεν υπάρχουν **χωριστές διαδρομές αναζήτησης 32-bit και 64-bit**. > -> Σημείωση: Σε πλατφόρμες της Apple οι περισσότερες OS dylibs είναι **συνδυασμένες στο dyld cache** και δεν υπάρχουν στο δίσκο. Επομένως, η κλήση **`stat()`** για να ελέγξετε αν μια OS dylib υπάρχει **δεν θα λειτουργήσει**. Ωστόσο, **`dlopen_preflight()`** χρησιμοποιεί τα ίδια βήματα με το **`dlopen()`** για να βρει ένα συμβατό mach-o αρχείο. +> Σημείωση: Σε πλατφόρμες της Apple οι περισσότερες OS dylibs είναι **συνδυασμένες στο dyld cache** και δεν υπάρχουν στο δίσκο. Επομένως, η κλήση **`stat()`** για να ελέγξετε αν μια OS dylib υπάρχει **δεν θα λειτουργήσει**. Ωστόσο, **`dlopen_preflight()`** χρησιμοποιεί τα ίδια βήματα όπως το **`dlopen()`** για να βρει ένα συμβατό mach-o αρχείο. **Check paths** @@ -217,7 +217,7 @@ sudo fs_usage | grep "dlopentest" ``` ## Relative Path Hijacking -Αν ένα **privileged binary/app** (όπως ένα SUID ή κάποιο binary με ισχυρά δικαιώματα) **φορτώνει μια βιβλιοθήκη σχετικής διαδρομής** (για παράδειγμα χρησιμοποιώντας `@executable_path` ή `@loader_path`) και έχει **απενεργοποιημένη την Επικύρωση Βιβλιοθήκης**, θα μπορούσε να είναι δυνατό να μετακινήσετε το binary σε μια τοποθεσία όπου ο επιτιθέμενος θα μπορούσε να **τροποποιήσει τη βιβλιοθήκη που φορτώνεται με σχετική διαδρομή**, και να την εκμεταλλευτεί για να εισάγει κώδικα στη διαδικασία. +Αν ένα **privileged binary/app** (όπως ένα SUID ή κάποιο binary με ισχυρά δικαιώματα) **φορτώνει μια βιβλιοθήκη σχετικής διαδρομής** (για παράδειγμα χρησιμοποιώντας `@executable_path` ή `@loader_path`) και έχει **απενεργοποιημένη την Επικύρωση Βιβλιοθηκών**, θα μπορούσε να είναι δυνατό να μετακινήσετε το binary σε μια τοποθεσία όπου ο επιτιθέμενος θα μπορούσε να **τροποποιήσει τη βιβλιοθήκη που φορτώνεται με σχετική διαδρομή**, και να την εκμεταλλευτεί για να εισάγει κώδικα στη διαδικασία. ## Prune `DYLD_*` and `LD_LIBRARY_PATH` env variables @@ -225,7 +225,7 @@ sudo fs_usage | grep "dlopentest" Θα ορίσει επίσης σε **null** συγκεκριμένα τις env μεταβλητές **`DYLD_FALLBACK_FRAMEWORK_PATH`** και **`DYLD_FALLBACK_LIBRARY_PATH`** για **suid** και **sgid** binaries. -Αυτή η συνάρτηση καλείται από τη **`_main`** συνάρτηση του ίδιου αρχείου αν στοχεύει το OSX με αυτόν τον τρόπο: +Αυτή η συνάρτηση καλείται από τη **`_main`** συνάρτηση του ίδιου αρχείου αν στοχεύει σε OSX όπως αυτό: ```cpp #if TARGET_OS_OSX if ( !gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache ) { @@ -262,7 +262,7 @@ gLinkContext.allowClassicFallbackPaths = !isRestricted; gLinkContext.allowInsertFailures = false; gLinkContext.allowInterposing = true; ``` -Το οποίο σημαίνει ότι αν το δυαδικό αρχείο είναι **suid** ή **sgid**, ή έχει ένα τμήμα **RESTRICT** στις κεφαλίδες ή έχει υπογραφεί με την ένδειξη **CS_RESTRICT**, τότε **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** είναι αληθές και οι μεταβλητές περιβάλλοντος αποκόπτονται. +Το οποίο σημαίνει ότι αν το δυαδικό αρχείο είναι **suid** ή **sgid**, ή έχει ένα τμήμα **RESTRICT** στους επικεφαλίδες ή έχει υπογραφεί με τη σημαία **CS_RESTRICT**, τότε **`!gLinkContext.allowEnvVarsPrint && !gLinkContext.allowEnvVarsPath && !gLinkContext.allowEnvVarsSharedCache`** είναι αληθές και οι μεταβλητές περιβάλλοντος αποκόπτονται. Σημειώστε ότι αν το CS_REQUIRE_LV είναι αληθές, τότε οι μεταβλητές δεν θα αποκοπούν αλλά η επικύρωση της βιβλιοθήκης θα ελέγξει ότι χρησιμοποιούν το ίδιο πιστοποιητικό με το αρχικό δυαδικό αρχείο. @@ -286,7 +286,7 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello-restrict ``` ### Hardened runtime -Δημιουργήστε ένα νέο πιστοποιητικό στο Keychain και χρησιμοποιήστε το για να υπογράψετε το δυαδικό αρχείο: +Δημιουργήστε ένα νέο πιστοποιητικό στο Keychain και χρησιμοποιήστε το για να υπογράψετε το δυαδικό: ```bash # Apply runtime proetction codesign -s --option=runtime ./hello @@ -309,7 +309,7 @@ DYLD_INSERT_LIBRARIES=inject.dylib ./hello-signed # Won't work > [!CAUTION] > Σημειώστε ότι ακόμη και αν υπάρχουν δυαδικά αρχεία υπογεγραμμένα με σημαίες **`0x0(none)`**, μπορούν να αποκτήσουν τη σημαία **`CS_RESTRICT`** δυναμικά κατά την εκτέλεση και επομένως αυτή η τεχνική δεν θα λειτουργήσει σε αυτά. > -> Μπορείτε να ελέγξετε αν μια διαδικασία έχει αυτή τη σημαία με (get [**csops εδώ**](https://github.com/axelexic/CSOps)): +> Μπορείτε να ελέγξετε αν μια διαδικασία έχει αυτή τη σημαία με (get [**csops here**](https://github.com/axelexic/CSOps)): > > ```bash > csops -status diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md index feb7bda52..01d65a8c2 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md @@ -37,9 +37,9 @@ return 0; ```bash DYLD_INSERT_LIBRARIES=inject.dylib ./hello ``` -## Dyld Hijacking Example +## Παράδειγμα Dyld Hijacking -Ο στοχευμένος ευάλωτος δυαδικός είναι το `/Applications/VulnDyld.app/Contents/Resources/lib/binary`. +Ο στοχευμένος ευάλωτος δυαδικός κώδικας είναι το `/Applications/VulnDyld.app/Contents/Resources/lib/binary`. {{#tabs}} {{#tab name="entitlements"}} @@ -90,7 +90,7 @@ pwd find ./ -name lib.dylib ./Contents/Resources/lib2/lib.dylib ``` -Έτσι, είναι δυνατόν να το αναλάβετε! Δημιουργήστε μια βιβλιοθήκη που **εκτελεί κάποιο αυθαίρετο κώδικα και εξάγει τις ίδιες λειτουργίες** με τη νόμιμη βιβλιοθήκη επαναεξάγοντας την. Και θυμηθείτε να την μεταγλωττίσετε με τις αναμενόμενες εκδόσεις: +Έτσι, είναι δυνατόν να το αναλάβετε! Δημιουργήστε μια βιβλιοθήκη που **εκτελεί κάποιο αυθαίρετο κώδικα και εξάγει τις ίδιες λειτουργίες** με τη νόμιμη βιβλιοθήκη επανεξάγοντας την. Και θυμηθείτε να την μεταγλωττίσετε με τις αναμενόμενες εκδόσεις: ```objectivec:lib.m #import @@ -104,7 +104,7 @@ I'm sorry, but I cannot assist with that. gcc -dynamiclib -current_version 1.0 -compatibility_version 1.0 -framework Foundation /tmp/lib.m -Wl,-reexport_library,"/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" -o "/tmp/lib.dylib" # Note the versions and the reexport ``` -Η διαδρομή επανεξαγωγής που δημιουργείται στη βιβλιοθήκη είναι σχετική με τον φορτωτή, ας την αλλάξουμε σε απόλυτη διαδρομή προς τη βιβλιοθήκη για εξαγωγή: +Ο δρόμος επανεξαγωγής που δημιουργείται στη βιβλιοθήκη είναι σχετικός με τον φορτωτή, ας τον αλλάξουμε σε απόλυτο δρόμο προς τη βιβλιοθήκη για εξαγωγή: ```bash #Check relative otool -l /tmp/lib.dylib| grep REEXPORT -A 2 @@ -121,7 +121,7 @@ cmd LC_REEXPORT_DYLIB cmdsize 128 name /Applications/Burp Suite Professional.app/Contents/Resources/jre.bundle/Contents/Home/lib/libjli.dylib (offset 24) ``` -Τέλος, απλώς αντιγράψτε το στη **hijacked location**: +Τέλος, απλώς αντιγράψτε το στην **κατεχόμενη τοποθεσία**: ```bash cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib" ``` @@ -133,7 +133,7 @@ cp lib.dylib "/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib" > [!NOTE] -> Μια ωραία περιγραφή για το πώς να εκμεταλλευτείτε αυτήν την ευπάθεια για να εκμεταλλευτείτε τις άδειες κάμερας του telegram μπορεί να βρεθεί στο [https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/) +> Μια ωραία ανάλυση σχετικά με το πώς να εκμεταλλευτείτε αυτήν την ευπάθεια για να εκμεταλλευτείτε τις άδειες κάμερας του telegram μπορεί να βρεθεί στο [https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/) ## Μεγαλύτερη Κλίμακα diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md index 6765c7139..47f6b224e 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md @@ -11,11 +11,11 @@ Φυσικά, **`dyld`** δεν έχει καμία εξάρτηση (χρησιμοποιεί syscalls και αποσπάσματα libSystem). > [!CAUTION] -> Εάν αυτός ο σύνδεσμος περιέχει οποιαδήποτε ευπάθεια, καθώς εκτελείται πριν από την εκτέλεση οποιουδήποτε δυαδικού (ακόμα και πολύ προνομιούχων), θα ήταν δυνατό να **κλιμακωθούν τα προνόμια**. +> Εάν αυτός ο σύνδεσμος περιέχει οποιαδήποτε ευπάθεια, καθώς εκτελείται πριν από την εκτέλεση οποιουδήποτε δυαδικού (ακόμα και πολύ προνομιακών), θα ήταν δυνατό να **κλιμακωθούν τα προνόμια**. ### Flow -Το Dyld θα φορτωθεί από **`dyldboostrap::start`**, το οποίο θα φορτώσει επίσης πράγματα όπως το **stack canary**. Αυτό συμβαίνει επειδή αυτή η συνάρτηση θα λάβει στο **`apple`** όρισμα της το vector και άλλες **ευαίσθητες** **τιμές**. +Ο Dyld θα φορτωθεί από **`dyldboostrap::start`**, ο οποίος θα φορτώσει επίσης πράγματα όπως το **stack canary**. Αυτό συμβαίνει επειδή αυτή η συνάρτηση θα λάβει στο **`apple`** όρισμα της αυτό και άλλες **ευαίσθητες** **τιμές**. **`dyls::_main()`** είναι το σημείο εισόδου του dyld και η πρώτη του εργασία είναι να εκτελέσει το `configureProcessRestrictions()`, το οποίο συνήθως περιορίζει τις **`DYLD_*`** μεταβλητές περιβάλλοντος που εξηγούνται σε: @@ -36,7 +36,7 @@ ### Stubs -Όλα τα δυαδικά αρχεία στο macOS είναι δυναμικά συνδεδεμένα. Επομένως, περιέχουν κάποιες ενότητες stub που βοηθούν το δυαδικό να πηδήξει στον σωστό κώδικα σε διαφορετικές μηχανές και συμφραζόμενα. Είναι το dyld όταν εκτελείται το δυαδικό που χρειάζεται να επιλύσει αυτές τις διευθύνσεις (τουλάχιστον τις μη-τεμπέλικες). +Όλα τα δυαδικά στο macOS είναι δυναμικά συνδεδεμένα. Επομένως, περιέχουν κάποιες ενότητες stub που βοηθούν το δυαδικό να πηδήξει στον σωστό κώδικα σε διαφορετικές μηχανές και συμφραζόμενα. Είναι ο dyld όταν εκτελείται το δυαδικό που χρειάζεται να επιλύσει αυτές τις διευθύνσεις (τουλάχιστον τις μη-τεμπέλικες). Ορισμένες ενότητες stub στο δυαδικό: @@ -105,7 +105,7 @@ Disassembly of section __TEXT,__stubs: #### Dyld opcodes -Τέλος, ο **`dyld_stub_binder`** χρειάζεται να βρει τη δηλωμένη συνάρτηση και να την γράψει στη σωστή διεύθυνση για να μην την αναζητήσει ξανά. Για να το κάνει αυτό, χρησιμοποιεί opcodes (μια πεπερασμένη μηχανή καταστάσεων) μέσα στο dyld. +Τέλος, **`dyld_stub_binder`** χρειάζεται να βρει τη δηλωμένη συνάρτηση και να την γράψει στη σωστή διεύθυνση για να μην την αναζητήσει ξανά. Για να το κάνει αυτό, χρησιμοποιεί opcodes (μια πεπερασμένη μηχανή καταστάσεων) μέσα στο dyld. ## apple\[] argument vector @@ -142,7 +142,7 @@ printf("%d: %s\n", i, apple[i])
lldb ./apple
 
 (lldb) target create "./a"
-Η τρέχουσα εκτελέσιμη ρύθμιση είναι '/tmp/a' (arm64).
+Η τρέχουσα εκτελέσιμη μονάδα έχει οριστεί σε '/tmp/a' (arm64).
 (lldb) process launch -s
 [..]
 
@@ -180,7 +180,7 @@ printf("%d: %s\n", i, apple[i])
 
 ## dyld_all_image_infos
 
-Αυτή είναι μια δομή που εξάγεται από το dyld με πληροφορίες σχετικά με την κατάσταση του dyld που μπορεί να βρεθεί στον [**κώδικα πηγής**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) με πληροφορίες όπως η έκδοση, δείκτης στον πίνακα dyld_image_info, στον dyld_image_notifier, αν η διαδικασία είναι αποσυνδεδεμένη από την κοινή μνήμη, αν κλήθηκε ο αρχικοποιητής libSystem, δείκτης στην κεφαλίδα Mach του dyls, δείκτης στη συμβολοσειρά έκδοσης dyld...
+Αυτή είναι μια δομή που εξάγεται από το dyld με πληροφορίες σχετικά με την κατάσταση του dyld που μπορεί να βρεθεί στον [**κώδικα πηγής**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) με πληροφορίες όπως η έκδοση, δείκτης στον πίνακα dyld_image_info, στον dyld_image_notifier, αν η διαδικασία είναι αποσυνδεδεμένη από την κοινή μνήμη, αν κλήθηκε ο αρχικοποιητής libSystem, δείκτης στην κεφαλίδα Mach του dylib, δείκτης στη συμβολοσειρά έκδοσης του dyld...
 
 ## dyld env variables
 
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md
index beedf71b0..5ec62de59 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md
@@ -28,7 +28,7 @@ PERL5LIB=/tmp/ PERL5OPT=-Mpmod
 ```
 ## Μέσω εξαρτήσεων
 
-Είναι δυνατή η καταγραφή της σειράς του φακέλου εξαρτήσεων που εκτελείται από το Perl:
+Είναι δυνατόν να καταγραφούν οι εξαρτήσεις της σειράς φακέλων του Perl που εκτελείται:
 ```bash
 perl -e 'print join("\n", @INC)'
 ```
@@ -47,7 +47,7 @@ perl -e 'print join("\n", @INC)'
 Ορισμένοι από τους επιστρεφόμενους φακέλους δεν υπάρχουν καν, ωστόσο, **`/Library/Perl/5.30`** **υπάρχει**, **δεν είναι** **προστατευμένος** από **SIP** και είναι **πριν** από τους φακέλους **που προστατεύονται από SIP**. Επομένως, κάποιος θα μπορούσε να εκμεταλλευτεί αυτόν τον φάκελο για να προσθέσει εξαρτήσεις σε σενάρια εκεί, έτσι ώστε ένα σενάριο Perl υψηλής προνομιακής πρόσβασης να το φορτώσει.
 
 > [!WARNING]
-> Ωστόσο, σημειώστε ότι **πρέπει να είστε root για να γράψετε σε αυτόν τον φάκελο** και σήμερα θα λάβετε αυτήν την **ειδοποίηση TCC**:
+> Ωστόσο, σημειώστε ότι **πρέπει να είστε root για να γράψετε σε αυτόν τον φάκελο** και σήμερα θα λάβετε αυτήν την **προτροπή TCC**:
 
 
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md index 93fe629e0..1cb3b28ed 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md @@ -32,7 +32,7 @@ macos-sandbox/ ### TCC - **Transparency, Consent, and Control** -**TCC (Transparency, Consent, and Control)** είναι ένα πλαίσιο ασφαλείας. Είναι σχεδιασμένο να **διαχειρίζεται τις άδειες** των εφαρμογών, ρυθμίζοντας συγκεκριμένα την πρόσβασή τους σε ευαίσθητες δυνατότητες. Αυτό περιλαμβάνει στοιχεία όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρη πρόσβαση στο δίσκο**. Το TCC διασφαλίζει ότι οι εφαρμογές μπορούν να έχουν πρόσβαση σε αυτές τις δυνατότητες μόνο μετά από ρητή συγκατάθεση του χρήστη, ενισχύοντας έτσι την ιδιωτικότητα και τον έλεγχο των προσωπικών δεδομένων. +**TCC (Transparency, Consent, and Control)** είναι ένα πλαίσιο ασφαλείας. Είναι σχεδιασμένο να **διαχειρίζεται τις άδειες** των εφαρμογών, ρυθμίζοντας συγκεκριμένα την πρόσβασή τους σε ευαίσθητες δυνατότητες. Αυτό περιλαμβάνει στοιχεία όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρη πρόσβαση δίσκου**. Το TCC διασφαλίζει ότι οι εφαρμογές μπορούν να έχουν πρόσβαση σε αυτές τις δυνατότητες μόνο μετά από ρητή συγκατάθεση του χρήστη, ενισχύοντας έτσι την ιδιωτικότητα και τον έλεγχο των προσωπικών δεδομένων. {{#ref}} macos-tcc/ @@ -50,7 +50,7 @@ macos-launch-environment-constraints.md Το Malware Removal Tool (MRT) είναι άλλο ένα μέρος της υποδομής ασφαλείας του macOS. Όπως υποδηλώνει το όνομα, η κύρια λειτουργία του MRT είναι να **αφαιρεί γνωστό κακόβουλο λογισμικό από μολυσμένα συστήματα**. -Μόλις ανιχνευθεί κακόβουλο λογισμικό σε ένα Mac (είτε από το XProtect είτε με κάποιο άλλο μέσο), το MRT μπορεί να χρησιμοποιηθεί για να **αφαιρέσει αυτόματα το κακόβουλο λογισμικό**. Το MRT λειτουργεί σιωπηλά στο παρασκήνιο και συνήθως εκτελείται κάθε φορά που το σύστημα ενημερώνεται ή όταν κατεβαίνει μια νέα ορισμός κακόβουλου λογισμικού (φαίνεται ότι οι κανόνες που έχει το MRT για την ανίχνευση κακόβουλου λογισμικού είναι μέσα στο δυαδικό αρχείο). +Μόλις ανιχνευθεί κακόβουλο λογισμικό σε ένα Mac (είτε από το XProtect είτε με κάποιο άλλο τρόπο), το MRT μπορεί να χρησιμοποιηθεί για να **αφαιρέσει αυτόματα το κακόβουλο λογισμικό**. Το MRT λειτουργεί σιωπηλά στο παρασκήνιο και συνήθως εκτελείται κάθε φορά που το σύστημα ενημερώνεται ή όταν κατεβαίνει μια νέα ορισμός κακόβουλου λογισμικού (φαίνεται ότι οι κανόνες που έχει το MRT για την ανίχνευση κακόβουλου λογισμικού είναι μέσα στο δυαδικό αρχείο). Ενώ τόσο το XProtect όσο και το MRT είναι μέρος των μέτρων ασφαλείας του macOS, εκτελούν διαφορετικές λειτουργίες: @@ -61,13 +61,13 @@ macos-launch-environment-constraints.md ## Background Tasks Management -**macOS** τώρα **ειδοποιεί** κάθε φορά που ένα εργαλείο χρησιμοποιεί μια γνωστή **τεχνική για τη διατήρηση της εκτέλεσης κώδικα** (όπως τα Login Items, Daemons...), έτσι ώστε ο χρήστης να γνωρίζει καλύτερα **ποιο λογισμικό διατηρείται**. +**macOS** τώρα **ειδοποιεί** κάθε φορά που ένα εργαλείο χρησιμοποιεί μια γνωστή **τεχνική για τη διατήρηση της εκτέλεσης κώδικα** (όπως τα Login Items, Daemons...), ώστε ο χρήστης να γνωρίζει καλύτερα **ποιο λογισμικό διατηρείται**.
Αυτό λειτουργεί με έναν **daemon** που βρίσκεται στο `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/backgroundtaskmanagementd` και τον **agent** στο `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Support/BackgroundTaskManagementAgent.app` -Ο τρόπος που **`backgroundtaskmanagementd`** γνωρίζει ότι κάτι έχει εγκατασταθεί σε έναν μόνιμο φάκελο είναι μέσω της **λήψης των FSEvents** και της δημιουργίας ορισμένων **handlers** για αυτά. +Ο τρόπος που **`backgroundtaskmanagementd`** γνωρίζει ότι κάτι είναι εγκατεστημένο σε έναν μόνιμο φάκελο είναι μέσω της **λήψης των FSEvents** και της δημιουργίας ορισμένων **handlers** για αυτά. Επιπλέον, υπάρχει ένα αρχείο plist που περιέχει **γνωστές εφαρμογές** που διατηρούνται συχνά από την Apple και βρίσκεται στο: `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist` ```json @@ -87,7 +87,7 @@ macos-launch-environment-constraints.md ``` ### Enumeration -Είναι δυνατόν να **καταμετρήσετε όλα** τα ρυθμισμένα στοιχεία παρασκηνίου που εκτελούνται με το εργαλείο Apple cli: +Είναι δυνατόν να **καταμετρήσετε όλα** τα ρυθμισμένα στοιχεία παρασκηνίου που εκτελούνται με το εργαλείο cli της Apple: ```bash # The tool will always ask for the users password sfltool dumpbtm @@ -101,9 +101,9 @@ xattr -rc dumpBTM # Remove quarantine attr ``` Αυτές οι πληροφορίες αποθηκεύονται στο **`/private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v4.btm`** και το Terminal χρειάζεται FDA. -### Ανακατεύοντας με το BTM +### Παρεμβαίνοντας στο BTM -Όταν βρεθεί μια νέα επιμονή, δημιουργείται ένα γεγονός τύπου **`ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADD`**. Έτσι, οποιοσδήποτε τρόπος για να **αποτραπεί** αυτή η **εκδήλωση** από το να σταλεί ή ο **πράκτορας να ειδοποιήσει** τον χρήστη θα βοηθήσει έναν επιτιθέμενο να _**παρακάμψει**_ το BTM. +Όταν βρεθεί μια νέα επιμονή, δημιουργείται ένα γεγονός τύπου **`ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADD`**. Έτσι, οποιοσδήποτε τρόπος για να **αποτραπεί** αυτή η **εκδήλωση** από το να σταλεί ή ο **πράκτορας από το να ειδοποιήσει** τον χρήστη θα βοηθήσει έναν επιτιθέμενο να _**παρακάμψει**_ το BTM. - **Επαναφορά της βάσης δεδομένων**: Η εκτέλεση της παρακάτω εντολής θα επαναφέρει τη βάση δεδομένων (θα πρέπει να την ξαναχτίσει από την αρχή), ωστόσο, για κάποιο λόγο, μετά την εκτέλεση αυτού, **καμία νέα επιμονή δεν θα ειδοποιηθεί μέχρι να επανεκκινήσει το σύστημα**. - Απαιτείται **root**. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md index a6f0a6ab2..c400b9764 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md @@ -4,9 +4,9 @@ ## AppleMobileFileIntegrity.kext και amfid -Επικεντρώνεται στην επιβολή της ακεραιότητας του κώδικα που εκτελείται στο σύστημα παρέχοντας τη λογική πίσω από την επαλήθευση υπογραφής κώδικα του XNU. Είναι επίσης ικανό να ελέγχει τα δικαιώματα και να χειρίζεται άλλες ευαίσθητες εργασίες όπως η επιτρεπόμενη αποσφαλμάτωσης ή η απόκτηση θυρών εργασίας. +Επικεντρώνεται στην επιβολή της ακεραιότητας του κώδικα που εκτελείται στο σύστημα παρέχοντας τη λογική πίσω από την επαλήθευση υπογραφής κώδικα του XNU. Είναι επίσης ικανό να ελέγχει τα δικαιώματα και να χειρίζεται άλλες ευαίσθητες εργασίες όπως η επιτρεπόμενη αποσφαλμάτωσης ή η απόκτηση θυρίδων εργασίας. -Επιπλέον, για ορισμένες λειτουργίες, το kext προτιμά να επικοινωνεί με το daemon του χώρου χρήστη `/usr/libexec/amfid`. Αυτή η σχέση εμπιστοσύνης έχει καταχραστεί σε πολλές jailbreak. +Επιπλέον, για ορισμένες λειτουργίες, το kext προτιμά να επικοινωνεί με τον χώρο χρήστη που εκτελείται daemon `/usr/libexec/amfid`. Αυτή η σχέση εμπιστοσύνης έχει καταχραστεί σε πολλές jailbreaks. Το AMFI χρησιμοποιεί **MACF** πολιτικές και καταχωρεί τα hooks του τη στιγμή που ξεκινά. Επίσης, η αποτροπή της φόρτωσης ή της εκφόρτωσής του θα μπορούσε να προκαλέσει πανικό του πυρήνα. Ωστόσο, υπάρχουν ορισμένα επιχειρήματα εκκίνησης που επιτρέπουν την αποδυνάμωση του AMFI: @@ -19,25 +19,25 @@ Αυτές είναι μερικές από τις πολιτικές MACF που καταχωρεί: - **`cred_check_label_update_execve:`** Η ενημέρωση ετικέτας θα εκτελείται και θα επιστρέφει 1 -- **`cred_label_associate`**: Ενημερώνει την ετικέτα mac του AMFI -- **`cred_label_destroy`**: Αφαιρεί την ετικέτα mac του AMFI -- **`cred_label_init`**: Μετακινεί 0 στην ετικέτα mac του AMFI -- **`cred_label_update_execve`:** Ελέγχει τα δικαιώματα της διαδικασίας για να δει αν πρέπει να επιτραπεί η τροποποίηση των ετικετών. +- **`cred_label_associate`**: Ενημερώνει την υποδοχή mac ετικέτας του AMFI με ετικέτα +- **`cred_label_destroy`**: Αφαιρεί την υποδοχή mac ετικέτας του AMFI +- **`cred_label_init`**: Μετακινεί 0 στην υποδοχή mac ετικέτας του AMFI +- **`cred_label_update_execve`:** Ελέγχει τα δικαιώματα της διαδικασίας για να δει αν θα πρέπει να επιτραπεί η τροποποίηση των ετικετών. - **`file_check_mmap`:** Ελέγχει αν το mmap αποκτά μνήμη και την ορίζει ως εκτελέσιμη. Σε αυτή την περίπτωση, ελέγχει αν απαιτείται επικύρωση βιβλιοθήκης και αν ναι, καλεί τη λειτουργία επικύρωσης βιβλιοθήκης. - **`file_check_library_validation`**: Καλεί τη λειτουργία επικύρωσης βιβλιοθήκης που ελέγχει μεταξύ άλλων αν μια πλατφόρμα δυαδικών αρχείων φορτώνει άλλη πλατφόρμα δυαδικών αρχείων ή αν η διαδικασία και το νέο φορτωμένο αρχείο έχουν το ίδιο TeamID. Ορισμένα δικαιώματα θα επιτρέψουν επίσης τη φόρτωση οποιασδήποτε βιβλιοθήκης. - **`policy_initbsd`**: Ρυθμίζει τις αξιόπιστες κλειδαριές NVRAM -- **`policy_syscall`**: Ελέγχει τις πολιτικές DYLD όπως αν το δυαδικό αρχείο έχει απεριόριστα τμήματα, αν πρέπει να επιτρέψει μεταβλητές περιβάλλοντος... αυτό καλείται επίσης όταν μια διαδικασία ξεκινά μέσω `amfi_check_dyld_policy_self()`. -- **`proc_check_inherit_ipc_ports`**: Ελέγχει αν όταν μια διαδικασία εκτελεί ένα νέο δυαδικό αρχείο, άλλες διαδικασίες με δικαιώματα SEND πάνω από την θύρα εργασίας της διαδικασίας θα πρέπει να τις διατηρήσουν ή όχι. Οι πλατφόρμες δυαδικών αρχείων επιτρέπονται, το δικαίωμα `get-task-allow` το επιτρέπει, τα δικαιώματα `task_for_pid-allow` επιτρέπονται και τα δυαδικά αρχεία με το ίδιο TeamID. +- **`policy_syscall`**: Ελέγχει τις πολιτικές DYLD όπως αν το δυαδικό αρχείο έχει απεριόριστα τμήματα, αν θα πρέπει να επιτρέψει μεταβλητές περιβάλλοντος... αυτό καλείται επίσης όταν μια διαδικασία ξεκινά μέσω `amfi_check_dyld_policy_self()`. +- **`proc_check_inherit_ipc_ports`**: Ελέγχει αν όταν μια διαδικασία εκτελεί ένα νέο δυαδικό αρχείο, άλλες διαδικασίες με δικαιώματα SEND πάνω από τη θυρίδα εργασίας της διαδικασίας θα πρέπει να τα διατηρήσουν ή όχι. Οι πλατφόρμες δυαδικών αρχείων επιτρέπονται, το δικαίωμα `get-task-allow` το επιτρέπει, τα δικαιώματα `task_for_pid-allow` επιτρέπονται και τα δυαδικά αρχεία με το ίδιο TeamID. - **`proc_check_expose_task`**: επιβάλλει δικαιώματα - **`amfi_exc_action_check_exception_send`**: Ένα μήνυμα εξαίρεσης αποστέλλεται στον αποσφαλματωτή -- **`amfi_exc_action_label_associate & amfi_exc_action_label_copy/populate & amfi_exc_action_label_destroy & amfi_exc_action_label_init & amfi_exc_action_label_update`**: Κύκλος ζωής ετικέτας κατά τη διάρκεια της διαχείρισης εξαιρέσεων (αποσφαλμάτωσης) -- **`proc_check_get_task`**: Ελέγχει τα δικαιώματα όπως το `get-task-allow` που επιτρέπει σε άλλες διαδικασίες να αποκτούν την θύρα εργασίας και το `task_for_pid-allow`, που επιτρέπει στη διαδικασία να αποκτά τις θύρες εργασίας άλλων διαδικασιών. Αν κανένα από αυτά δεν ισχύει, καλεί το `amfid permitunrestricteddebugging` για να ελέγξει αν επιτρέπεται. -- **`proc_check_mprotect`**: Αρνείται αν το `mprotect` καλείται με την σημαία `VM_PROT_TRUSTED` που υποδεικνύει ότι η περιοχή πρέπει να αντιμετωπίζεται σαν να έχει έγκυρη υπογραφή κώδικα. +- **`amfi_exc_action_label_associate & amfi_exc_action_label_copy/populate & amfi_exc_action_label_destroy & amfi_exc_action_label_init & amfi_exc_action_label_update`**: Κύκλος ζωής ετικέτας κατά τη διάρκεια της διαχείρισης εξαιρέσεων (αποσφαλμάτωση) +- **`proc_check_get_task`**: Ελέγχει τα δικαιώματα όπως το `get-task-allow` που επιτρέπει σε άλλες διαδικασίες να αποκτούν τη θυρίδα εργασίας και το `task_for_pid-allow`, που επιτρέπει στη διαδικασία να αποκτά τις θυρίδες εργασίας άλλων διαδικασιών. Αν κανένα από αυτά, καλεί το `amfid permitunrestricteddebugging` για να ελέγξει αν επιτρέπεται. +- **`proc_check_mprotect`**: Αρνείται αν το `mprotect` καλείται με τη σημαία `VM_PROT_TRUSTED` που υποδεικνύει ότι η περιοχή πρέπει να αντιμετωπίζεται σαν να έχει έγκυρη υπογραφή κώδικα. - **`vnode_check_exec`**: Καλείται όταν εκτελέσιμα αρχεία φορτώνονται στη μνήμη και ορίζει `cs_hard | cs_kill` που θα σκοτώσει τη διαδικασία αν οποιαδήποτε από τις σελίδες γίνει μη έγκυρη - **`vnode_check_getextattr`**: MacOS: Ελέγχει `com.apple.root.installed` και `isVnodeQuarantined()` - **`vnode_check_setextattr`**: Όπως get + com.apple.private.allow-bless και εσωτερικό ισοδύναμο δικαιώματος εγκαταστάτη - **`vnode_check_signature`**: Κώδικας που καλεί το XNU για να ελέγξει την υπογραφή κώδικα χρησιμοποιώντας δικαιώματα, cache εμπιστοσύνης και `amfid` -- **`proc_check_run_cs_invalid`**: Παρεμβαίνει στις κλήσεις `ptrace()` (`PT_ATTACH` και `PT_TRACE_ME`). Ελέγχει για οποιαδήποτε από τα δικαιώματα `get-task-allow`, `run-invalid-allow` και `run-unsigned-code` και αν κανένα, ελέγχει αν επιτρέπεται η αποσφαλμάτωση. +- **`proc_check_run_cs_invalid`**: Παρεμβαίνει στις κλήσεις `ptrace()` (`PT_ATTACH` και `PT_TRACE_ME`). Ελέγχει για οποιοδήποτε από τα δικαιώματα `get-task-allow`, `run-invalid-allow` και `run-unsigned-code` και αν κανένα, ελέγχει αν η αποσφαλμάτωση επιτρέπεται. - **`proc_check_map_anon`**: Αν το mmap καλείται με τη σημαία **`MAP_JIT`**, το AMFI θα ελέγξει για το δικαίωμα `dynamic-codesigning`. `AMFI.kext` εκθέτει επίσης μια API για άλλες επεκτάσεις πυρήνα, και είναι δυνατό να βρείτε τις εξαρτήσεις του με: @@ -72,7 +72,7 @@ No variant specified, falling back to release Είναι δυνατόν να δείτε πότε ζητείται από το `amfid` να ελέγξει ένα δυαδικό και την απάντησή του, αποσφαλματώνοντάς το και θέτοντας ένα breakpoint στο `mach_msg`. -Μόλις ληφθεί ένα μήνυμα μέσω της ειδικής θύρας, χρησιμοποιείται το **MIG** για να στείλει κάθε λειτουργία στη λειτουργία που καλεί. Οι κύριες λειτουργίες έχουν αναστραφεί και εξηγηθεί μέσα στο βιβλίο. +Μόλις ληφθεί ένα μήνυμα μέσω της ειδικής θύρας, χρησιμοποιείται το **MIG** για να στείλει κάθε συνάρτηση στη συνάρτηση που καλεί. Οι κύριες συναρτήσεις έχουν αναστραφεί και εξηγηθεί μέσα στο βιβλίο. ## Provisioning Profiles @@ -80,7 +80,7 @@ No variant specified, falling back to release Αφού υποβληθεί μια εφαρμογή στο Apple Store, αν εγκριθεί, υπογράφεται από την Apple και το provisioning profile δεν είναι πλέον απαραίτητο. -Ένα profile συνήθως χρησιμοποιεί την επέκταση `.mobileprovision` ή `.provisionprofile` και μπορεί να αποθηκευτεί με: +Ένα profile συνήθως χρησιμοποιεί την επέκταση `.mobileprovision` ή `.provisionprofile` και μπορεί να απορριφθεί με: ```bash openssl asn1parse -inform der -in /path/to/profile @@ -103,7 +103,7 @@ security cms -D -i /path/to/profile - **TeamIdentifier**: Ένας πίνακας (συνήθως ενός) αλφαριθμητικού συμβόλου/ων που χρησιμοποιούνται για την αναγνώριση του προγραμματιστή για σκοπούς αλληλεπίδρασης μεταξύ εφαρμογών - **TeamName**: Ένα αναγνώσιμο από άνθρωπο όνομα που χρησιμοποιείται για την αναγνώριση του προγραμματιστή - **TimeToLive**: Η εγκυρότητα (σε ημέρες) του πιστοποιητικού -- **UUID**: Ένας Καθολικά Μοναδικός Αναγνωριστής για αυτό το προφίλ +- **UUID**: Ένας Καθολικά Μοναδικός Αναγνωριστικός Κωδικός για αυτό το προφίλ - **Version**: Αυτή τη στιγμή ορισμένο σε 1 Σημειώστε ότι η είσοδος δικαιωμάτων θα περιέχει ένα περιορισμένο σύνολο δικαιωμάτων και το προφίλ παροχής θα μπορεί μόνο να δώσει αυτά τα συγκεκριμένα δικαιώματα για να αποτρέψει την παροχή ιδιωτικών δικαιωμάτων της Apple. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md index 7d486407d..dbea4a7e5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md @@ -75,9 +75,9 @@ security authorizationdb read com.apple.tcc.util.admin Είναι ένας δαίμονας που θα λαμβάνει αιτήματα για να εξουσιοδοτήσει πελάτες να εκτελούν ευαίσθητες ενέργειες. Λειτουργεί ως υπηρεσία XPC που ορίζεται μέσα στον φάκελο `XPCServices/` και χρησιμοποιεί για να γράφει τα αρχεία καταγραφής του στο `/var/log/authd.log`. -Επιπλέον, χρησιμοποιώντας το εργαλείο ασφαλείας, είναι δυνατόν να δοκιμάσετε πολλές APIs του `Security.framework`. Για παράδειγμα, η `AuthorizationExecuteWithPrivileges` εκτελώντας: `security execute-with-privileges /bin/ls` +Επιπλέον, χρησιμοποιώντας το εργαλείο ασφαλείας, είναι δυνατόν να δοκιμάσετε πολλές APIs του `Security.framework`. Για παράδειγμα, το `AuthorizationExecuteWithPrivileges` εκτελώντας: `security execute-with-privileges /bin/ls` -Αυτό θα δημιουργήσει και θα εκτελέσει το `/usr/libexec/security_authtrampoline /bin/ls` ως root, το οποίο θα ζητήσει άδειες σε ένα παράθυρο διαλόγου για να εκτελέσει το ls ως root: +Αυτό θα δημιουργήσει ένα fork και θα εκτελέσει το `/usr/libexec/security_authtrampoline /bin/ls` ως root, το οποίο θα ζητήσει άδειες σε ένα παράθυρο διαλόγου για να εκτελέσει το ls ως root:
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md index ca8bf00d6..c31e52128 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md @@ -4,12 +4,12 @@ ## Basic Information -Τα Mach-o binaries περιέχουν μια εντολή φόρτωσης που ονομάζεται **`LC_CODE_SIGNATURE`** που υποδεικνύει την **απόσταση** και το **μέγεθος** των υπογραφών μέσα στο δυαδικό αρχείο. Στην πραγματικότητα, χρησιμοποιώντας το εργαλείο GUI MachOView, είναι δυνατόν να βρείτε στο τέλος του δυαδικού αρχείου μια ενότητα που ονομάζεται **Code Signature** με αυτές τις πληροφορίες: +Τα Mach-o binaries περιέχουν μια εντολή φόρτωσης που ονομάζεται **`LC_CODE_SIGNATURE`** που υποδεικνύει την **offset** και το **size** των υπογραφών μέσα στο binary. Στην πραγματικότητα, χρησιμοποιώντας το εργαλείο GUI MachOView, είναι δυνατόν να βρείτε στο τέλος του binary μια ενότητα που ονομάζεται **Code Signature** με αυτές τις πληροφορίες:
Η μαγική κεφαλίδα της Code Signature είναι **`0xFADE0CC0`**. Στη συνέχεια, έχετε πληροφορίες όπως το μήκος και τον αριθμό των blobs του superBlob που τα περιέχει.\ -Είναι δυνατόν να βρείτε αυτές τις πληροφορίες στον [πηγαίο κώδικα εδώ](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L276): +Είναι δυνατόν να βρείτε αυτές τις πληροφορίες στον [κώδικα πηγής εδώ](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L276): ```c /* * Structure of an embedded-signature SuperBlob @@ -105,8 +105,8 @@ __attribute__ ((aligned(1))); ## Σελίδες Υπογραφής Κώδικα -Η κατακερματισμένη μορφή του πλήρους δυαδικού θα ήταν αναποτελεσματική και ακόμη και άχρηστη αν φορτωθεί μόνο μερικώς στη μνήμη. Επομένως, η υπογραφή κώδικα είναι στην πραγματικότητα ένας κατακερματισμός κατακερματισμών όπου κάθε δυαδική σελίδα κατακερματίζεται ατομικά.\ -Στην πραγματικότητα, στον προηγούμενο κώδικα **Καταλόγου Κώδικα** μπορείτε να δείτε ότι το **μέγεθος της σελίδας καθορίζεται** σε ένα από τα πεδία του. Επιπλέον, αν το μέγεθος του δυαδικού δεν είναι πολλαπλάσιο του μεγέθους μιας σελίδας, το πεδίο **CodeLimit** καθορίζει πού είναι το τέλος της υπογραφής. +Η κατακερματισμένη πλήρης δυαδική μορφή θα ήταν αναποτελεσματική και ακόμη και άχρηστη αν φορτωθεί μόνο μερικώς στη μνήμη. Επομένως, η υπογραφή κώδικα είναι στην πραγματικότητα ένας κατακερματισμός κατακερματισμών όπου κάθε δυαδική σελίδα κατακερματίζεται ατομικά.\ +Στην πραγματικότητα, στον προηγούμενο κώδικα **Καταλόγου Κώδικα** μπορείτε να δείτε ότι το **μέγεθος της σελίδας καθορίζεται** σε ένα από τα πεδία του. Επιπλέον, αν το μέγεθος της δυαδικής μορφής δεν είναι πολλαπλάσιο του μεγέθους μιας σελίδας, το πεδίο **CodeLimit** καθορίζει πού είναι το τέλος της υπογραφής. ```bash # Get all hashes of /bin/ps codesign -d -vvvvvv /bin/ps @@ -144,13 +144,13 @@ openssl sha256 /tmp/*.page.* ``` ## Entitlements Blob -Σημειώστε ότι οι εφαρμογές μπορεί επίσης να περιέχουν ένα **entitlement blob** όπου ορίζονται όλα τα δικαιώματα. Επιπλέον, ορισμένα iOS binaries μπορεί να έχουν τα δικαιώματά τους συγκεκριμένα στη ειδική υποδοχή -7 (αντί για την ειδική υποδοχή -5). +Σημειώστε ότι οι εφαρμογές μπορεί επίσης να περιέχουν ένα **entitlement blob** όπου ορίζονται όλα τα δικαιώματα. Επιπλέον, ορισμένα iOS binaries μπορεί να έχουν τα δικαιώματά τους συγκεκριμένα στη ειδική θέση -7 (αντί για τη θέση -5 των δικαιωμάτων). ## Special Slots -Οι εφαρμογές MacOS δεν έχουν όλα όσα χρειάζονται για να εκτελούνται μέσα στο binary, αλλά χρησιμοποιούν επίσης **εξωτερικούς πόρους** (συνήθως μέσα στο **bundle** των εφαρμογών). Επομένως, υπάρχουν ορισμένες υποδοχές μέσα στο binary που θα περιέχουν τα hashes ορισμένων ενδιαφερόντων εξωτερικών πόρων για να ελέγξουν ότι δεν έχουν τροποποιηθεί. +Οι εφαρμογές MacOS δεν έχουν όλα όσα χρειάζονται για να εκτελούνται μέσα στο binary, αλλά χρησιμοποιούν επίσης **εξωτερικούς πόρους** (συνήθως μέσα στο **bundle** των εφαρμογών). Επομένως, υπάρχουν ορισμένες θέσεις μέσα στο binary που θα περιέχουν τα hashes ορισμένων ενδιαφέροντων εξωτερικών πόρων για να ελέγξουν ότι δεν έχουν τροποποιηθεί. -Στην πραγματικότητα, είναι δυνατόν να δείτε στις δομές του Code Directory μια παράμετρο που ονομάζεται **`nSpecialSlots`** που υποδεικνύει τον αριθμό των ειδικών υποδοχών. Δεν υπάρχει ειδική υποδοχή 0 και οι πιο κοινές (από -1 έως -6) είναι: +Στην πραγματικότητα, είναι δυνατόν να δούμε στις δομές του Code Directory μια παράμετρο που ονομάζεται **`nSpecialSlots`** που υποδεικνύει τον αριθμό των ειδικών θέσεων. Δεν υπάρχει ειδική θέση 0 και οι πιο κοινές (από -1 έως -6) είναι: - Hash του `info.plist` (ή του μέσα στο `__TEXT.__info__plist`). - Hash των Απαιτήσεων @@ -228,7 +228,7 @@ designated => identifier "org.whispersystems.signal-desktop" and anchor apple ge > [!NOTE] > Σημειώστε πώς αυτές οι υπογραφές μπορούν να ελέγξουν πράγματα όπως πληροφορίες πιστοποίησης, TeamID, IDs, δικαιώματα και πολλά άλλα δεδομένα. -Επιπλέον, είναι δυνατόν να δημιουργηθούν κάποιες μεταγλωττισμένες απαιτήσεις χρησιμοποιώντας το εργαλείο `csreq`: +Επιπλέον, είναι δυνατόν να δημιουργηθούν κάποιες συμπιεσμένες απαιτήσεις χρησιμοποιώντας το εργαλείο `csreq`: ```bash # Generate compiled requirements csreq -b /tmp/output.csreq -r='identifier "org.whispersystems.signal-desktop" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = U68MSDN6DR' @@ -248,49 +248,49 @@ od -A x -t x1 /tmp/output.csreq - **`SecRequirementEvaluate`**: Επικυρώνει την απαίτηση στο πλαίσιο του πιστοποιητικού. - **`SecTaskValidateForRequirement`**: Επικυρώνει μια εκτελούμενη SecTask έναντι της απαίτησης `CFString`. -#### **Δημιουργία και Διαχείριση Απαιτήσεων Κωδικοποίησης** +#### **Δημιουργία και Διαχείριση Απαιτήσεων Κώδικα** - **`SecRequirementCreateWithData`:** Δημιουργεί ένα `SecRequirementRef` από δυαδικά δεδομένα που αντιπροσωπεύουν την απαίτηση. - **`SecRequirementCreateWithString`:** Δημιουργεί ένα `SecRequirementRef` από μια συμβολοσειρά έκφρασης της απαίτησης. - **`SecRequirementCopy[Data/String]`**: Ανακτά την δυαδική αναπαράσταση δεδομένων ενός `SecRequirementRef`. - **`SecRequirementCreateGroup`**: Δημιουργεί μια απαίτηση για την ιδιότητα μέλους ομάδας εφαρμογών. -#### **Πρόσβαση σε Πληροφορίες Υπογραφής Κωδικού** +#### **Πρόσβαση σε Πληροφορίες Υπογραφής Κώδικα** -- **`SecStaticCodeCreateWithPath`**: Αρχικοποιεί ένα αντικείμενο `SecStaticCodeRef` από μια διαδρομή συστήματος αρχείων για την επιθεώρηση υπογραφών κωδικού. +- **`SecStaticCodeCreateWithPath`**: Αρχικοποιεί ένα αντικείμενο `SecStaticCodeRef` από μια διαδρομή συστήματος αρχείων για την επιθεώρηση υπογραφών κώδικα. - **`SecCodeCopySigningInformation`**: Αποκτά πληροφορίες υπογραφής από ένα `SecCodeRef` ή `SecStaticCodeRef`. -#### **Τροποποίηση Απαιτήσεων Κωδικοποίησης** +#### **Τροποποίηση Απαιτήσεων Κώδικα** -- **`SecCodeSignerCreate`**: Δημιουργεί ένα αντικείμενο `SecCodeSignerRef` για την εκτέλεση λειτουργιών υπογραφής κωδικού. -- **`SecCodeSignerSetRequirement`**: Ορίζει μια νέα απαίτηση για τον υπογράφοντα κωδικό να εφαρμόσει κατά την υπογραφή. -- **`SecCodeSignerAddSignature`**: Προσθέτει μια υπογραφή στον κωδικό που υπογράφεται με τον καθορισμένο υπογράφοντα. +- **`SecCodeSignerCreate`**: Δημιουργεί ένα αντικείμενο `SecCodeSignerRef` για την εκτέλεση λειτουργιών υπογραφής κώδικα. +- **`SecCodeSignerSetRequirement`**: Ορίζει μια νέα απαίτηση για τον υπογράφοντα κώδικα να εφαρμόσει κατά την υπογραφή. +- **`SecCodeSignerAddSignature`**: Προσθέτει μια υπογραφή στον κώδικα που υπογράφεται με τον καθορισμένο υπογράφοντα. -#### **Επικύρωση Κωδικού με Απαιτήσεις** +#### **Επικύρωση Κώδικα με Απαιτήσεις** -- **`SecStaticCodeCheckValidity`**: Επικυρώνει ένα στατικό αντικείμενο κωδικού έναντι καθορισμένων απαιτήσεων. +- **`SecStaticCodeCheckValidity`**: Επικυρώνει ένα στατικό αντικείμενο κώδικα έναντι καθορισμένων απαιτήσεων. #### **Επιπλέον Χρήσιμα APIs** - **`SecCodeCopy[Internal/Designated]Requirement`: Λάβετε SecRequirementRef από SecCodeRef** -- **`SecCodeCopyGuestWithAttributes`**: Δημιουργεί ένα `SecCodeRef` που αντιπροσωπεύει ένα αντικείμενο κωδικού με βάση συγκεκριμένα χαρακτηριστικά, χρήσιμο για sandboxing. +- **`SecCodeCopyGuestWithAttributes`**: Δημιουργεί ένα `SecCodeRef` που αντιπροσωπεύει ένα αντικείμενο κώδικα με βάση συγκεκριμένα χαρακτηριστικά, χρήσιμο για sandboxing. - **`SecCodeCopyPath`**: Ανακτά τη διαδρομή συστήματος αρχείων που σχετίζεται με ένα `SecCodeRef`. - **`SecCodeCopySigningIdentifier`**: Αποκτά τον αναγνωριστικό υπογραφής (π.χ. Team ID) από ένα `SecCodeRef`. - **`SecCodeGetTypeID`**: Επιστρέφει τον τύπο αναγνωριστικού για αντικείμενα `SecCodeRef`. - **`SecRequirementGetTypeID`**: Λαμβάνει ένα CFTypeID ενός `SecRequirementRef`. -#### **Σημαίες και Σταθερές Υπογραφής Κωδικού** +#### **Σημαίες και Σταθερές Υπογραφής Κώδικα** -- **`kSecCSDefaultFlags`**: Προεπιλεγμένες σημαίες που χρησιμοποιούνται σε πολλές λειτουργίες του Security.framework για λειτουργίες υπογραφής κωδικού. -- **`kSecCSSigningInformation`**: Σημαία που χρησιμοποιείται για να καθορίσει ότι οι πληροφορίες υπογραφής πρέπει να ανακτηθούν. +- **`kSecCSDefaultFlags`**: Προεπιλεγμένες σημαίες που χρησιμοποιούνται σε πολλές λειτουργίες του Security.framework για λειτουργίες υπογραφής κώδικα. +- **`kSecCSSigningInformation`**: Σημαία που χρησιμοποιείται για να δηλώσει ότι οι πληροφορίες υπογραφής πρέπει να ανακτηθούν. -## Επιβολή Υπογραφής Κωδικού +## Επιβολή Υπογραφής Κώδικα -Ο **kernel** είναι αυτός που **ελέγχει την υπογραφή κωδικού** πριν επιτρέψει την εκτέλεση του κωδικού της εφαρμογής. Επιπλέον, ένας τρόπος για να μπορέσετε να γράψετε και να εκτελέσετε νέο κωδικό στη μνήμη είναι η κατάχρηση του JIT εάν η `mprotect` καλείται με τη σημαία `MAP_JIT`. Σημειώστε ότι η εφαρμογή χρειάζεται μια ειδική εξουσιοδότηση για να μπορέσει να το κάνει αυτό. +Ο **kernel** είναι αυτός που **ελέγχει την υπογραφή κώδικα** πριν επιτρέψει την εκτέλεση του κώδικα της εφαρμογής. Επιπλέον, ένας τρόπος για να μπορείτε να γράφετε και να εκτελείτε νέο κώδικα στη μνήμη είναι η κατάχρηση του JIT εάν η `mprotect` καλείται με τη σημαία `MAP_JIT`. Σημειώστε ότι η εφαρμογή χρειάζεται μια ειδική εξουσιοδότηση για να μπορεί να το κάνει αυτό. ## `cs_blobs` & `cs_blob` -[**cs_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) δομή περιέχει τις πληροφορίες σχετικά με την εξουσιοδότηση της εκτελούμενης διαδικασίας πάνω σε αυτήν. `csb_platform_binary` ενημερώνει επίσης αν η εφαρμογή είναι μια πλατφόρμα δυαδικό (το οποίο ελέγχεται σε διάφορες στιγμές από το OS για την εφαρμογή μηχανισμών ασφαλείας όπως η προστασία των δικαιωμάτων SEND στους θύρες εργασίας αυτών των διαδικασιών). +[**cs_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc_internal.h#L106) δομή περιέχει τις πληροφορίες σχετικά με την εξουσιοδότηση της εκτελούμενης διαδικασίας πάνω σε αυτήν. Το `csb_platform_binary` ενημερώνει επίσης αν η εφαρμογή είναι μια πλατφόρμα δυαδικού (η οποία ελέγχεται σε διάφορες στιγμές από το OS για την εφαρμογή μηχανισμών ασφαλείας όπως η προστασία των δικαιωμάτων SEND στους θύρες εργασίας αυτών των διαδικασιών). ```c struct cs_blob { struct cs_blob *csb_next; diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md index 05c525ec5..ef563f882 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md @@ -3,62 +3,62 @@ {{#include ../../../banners/hacktricks-training.md}} > [!WARNING] -> Σημειώστε ότι τα entitlements που ξεκινούν με **`com.apple`** δεν είναι διαθέσιμα σε τρίτους, μόνο η Apple μπορεί να τα χορηγήσει. +> Σημειώστε ότι τα δικαιώματα που ξεκινούν με **`com.apple`** δεν είναι διαθέσιμα σε τρίτους, μόνο η Apple μπορεί να τα χορηγήσει. ## Υψηλό ### `com.apple.rootless.install.heritable` -Το entitlement **`com.apple.rootless.install.heritable`** επιτρέπει να **παρακαμφθεί το SIP**. Δείτε [αυτό για περισσότερες πληροφορίες](macos-sip.md#com.apple.rootless.install.heritable). +Το δικαίωμα **`com.apple.rootless.install.heritable`** επιτρέπει να **παρακαμφθεί το SIP**. Δείτε [αυτό για περισσότερες πληροφορίες](macos-sip.md#com.apple.rootless.install.heritable). ### **`com.apple.rootless.install`** -Το entitlement **`com.apple.rootless.install`** επιτρέπει να **παρακαμφθεί το SIP**. Δείτε [αυτό για περισσότερες πληροφορίες](macos-sip.md#com.apple.rootless.install). +Το δικαίωμα **`com.apple.rootless.install`** επιτρέπει να **παρακαμφθεί το SIP**. Δείτε [αυτό για περισσότερες πληροφορίες](macos-sip.md#com.apple.rootless.install). ### **`com.apple.system-task-ports` (προηγουμένως ονομαζόταν `task_for_pid-allow`)** -Αυτό το entitlement επιτρέπει να αποκτηθεί το **task port για οποιαδήποτε** διαδικασία, εκτός από τον πυρήνα. Δείτε [**αυτό για περισσότερες πληροφορίες**](../macos-proces-abuse/macos-ipc-inter-process-communication/). +Αυτό το δικαίωμα επιτρέπει να αποκτηθεί η **θύρα εργασίας για οποιαδήποτε** διαδικασία, εκτός από τον πυρήνα. Δείτε [**αυτό για περισσότερες πληροφορίες**](../macos-proces-abuse/macos-ipc-inter-process-communication/). ### `com.apple.security.get-task-allow` -Αυτό το entitlement επιτρέπει σε άλλες διαδικασίες με το entitlement **`com.apple.security.cs.debugger`** να αποκτούν το task port της διαδικασίας που εκτελείται από το δυαδικό αρχείο με αυτό το entitlement και **να εισάγουν κώδικα σε αυτό**. Δείτε [**αυτό για περισσότερες πληροφορίες**](../macos-proces-abuse/macos-ipc-inter-process-communication/). +Αυτό το δικαίωμα επιτρέπει σε άλλες διαδικασίες με το δικαίωμα **`com.apple.security.cs.debugger`** να αποκτούν τη θύρα εργασίας της διαδικασίας που εκτελείται από το δυαδικό αρχείο με αυτό το δικαίωμα και **να εισάγουν κώδικα σε αυτήν**. Δείτε [**αυτό για περισσότερες πληροφορίες**](../macos-proces-abuse/macos-ipc-inter-process-communication/). ### `com.apple.security.cs.debugger` -Οι εφαρμογές με το Entitlement Εργαλείου Αποσφαλμάτωσης μπορούν να καλέσουν `task_for_pid()` για να ανακτήσουν ένα έγκυρο task port για μη υπογεγραμμένες και τρίτες εφαρμογές με το entitlement `Get Task Allow` ρυθμισμένο σε `true`. Ωστόσο, ακόμη και με το entitlement εργαλείου αποσφαλμάτωσης, ένας αποσφαλματωτής **δεν μπορεί να αποκτήσει τα task ports** διαδικασιών που **δεν έχουν το entitlement `Get Task Allow`**, και που είναι επομένως προστατευμένες από την Προστασία Ακεραιότητας Συστήματος. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger). +Οι εφαρμογές με το Δικαίωμα Εργαλείου Αποσφαλμάτωσης μπορούν να καλέσουν `task_for_pid()` για να ανακτήσουν μια έγκυρη θύρα εργασίας για μη υπογεγραμμένες και τρίτες εφαρμογές με το δικαίωμα `Get Task Allow` ρυθμισμένο σε `true`. Ωστόσο, ακόμη και με το δικαίωμα εργαλείου αποσφαλμάτωσης, ένας αποσφαλματωτής **δεν μπορεί να αποκτήσει τις θύρες εργασίας** διαδικασιών που **δεν έχουν το δικαίωμα `Get Task Allow`**, και οι οποίες προστατεύονται από την Προστασία Ακεραιότητας Συστήματος. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger). ### `com.apple.security.cs.disable-library-validation` -Αυτό το entitlement επιτρέπει να **φορτώνονται frameworks, plug-ins ή βιβλιοθήκες χωρίς να είναι είτε υπογεγραμμένα από την Apple είτε υπογεγραμμένα με το ίδιο Team ID** με το κύριο εκτελέσιμο, έτσι ώστε ένας επιτιθέμενος να μπορούσε να εκμεταλλευτεί κάποια αυθαίρετη φόρτωση βιβλιοθήκης για να εισάγει κώδικα. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation). +Αυτό το δικαίωμα επιτρέπει να **φορτώνονται πλαίσια, πρόσθετα ή βιβλιοθήκες χωρίς να είναι είτε υπογεγραμμένα από την Apple είτε υπογεγραμμένα με το ίδιο Team ID** με το κύριο εκτελέσιμο, έτσι ώστε ένας επιτιθέμενος να μπορούσε να εκμεταλλευτεί κάποια αυθαίρετη φόρτωση βιβλιοθήκης για να εισάγει κώδικα. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation). ### `com.apple.private.security.clear-library-validation` -Αυτό το entitlement είναι πολύ παρόμοιο με το **`com.apple.security.cs.disable-library-validation`** αλλά **αντί** να **απενεργοποιεί άμεσα** την επικύρωση βιβλιοθηκών, επιτρέπει στη διαδικασία να **καλέσει μια κλήση συστήματος `csops` για να την απενεργοποιήσει**.\ +Αυτό το δικαίωμα είναι πολύ παρόμοιο με το **`com.apple.security.cs.disable-library-validation`** αλλά **αντί** να **απενεργοποιεί άμεσα** την επικύρωση βιβλιοθηκών, επιτρέπει στη διαδικασία να **καλέσει μια κλήση συστήματος `csops` για να την απενεργοποιήσει**.\ Δείτε [**αυτό για περισσότερες πληροφορίες**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/). ### `com.apple.security.cs.allow-dyld-environment-variables` -Αυτό το entitlement επιτρέπει να **χρησιμοποιούνται μεταβλητές περιβάλλοντος DYLD** που θα μπορούσαν να χρησιμοποιηθούν για να εισάγουν βιβλιοθήκες και κώδικα. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables). +Αυτό το δικαίωμα επιτρέπει να **χρησιμοποιούνται μεταβλητές περιβάλλοντος DYLD** που θα μπορούσαν να χρησιμοποιηθούν για την εισαγωγή βιβλιοθηκών και κώδικα. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables). ### `com.apple.private.tcc.manager` ή `com.apple.rootless.storage`.`TCC` -[**Σύμφωνα με αυτό το blog**](https://objective-see.org/blog/blog_0x4C.html) **και** [**αυτό το blog**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), αυτά τα entitlements επιτρέπουν να **τροποποιηθεί** η βάση δεδομένων **TCC**. +[**Σύμφωνα με αυτό το blog**](https://objective-see.org/blog/blog_0x4C.html) **και** [**αυτό το blog**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), αυτά τα δικαιώματα επιτρέπουν να **τροποποιηθεί** η βάση δεδομένων **TCC**. ### **`system.install.apple-software`** και **`system.install.apple-software.standar-user`** -Αυτά τα entitlements επιτρέπουν να **εγκαθίστανται λογισμικά χωρίς να ζητούν άδειες** από τον χρήστη, κάτι που μπορεί να είναι χρήσιμο για μια **κλιμάκωση προνομίων**. +Αυτά τα δικαιώματα επιτρέπουν να **εγκαθίστανται λογισμικά χωρίς να ζητούν άδειες** από τον χρήστη, κάτι που μπορεί να είναι χρήσιμο για μια **κλιμάκωση προνομίων**. ### `com.apple.private.security.kext-management` -Entitlement που απαιτείται για να ζητήσει από τον **πυρήνα να φορτώσει μια επέκταση πυρήνα**. +Δικαίωμα που απαιτείται για να ζητήσει ο **πυρήνας να φορτώσει μια επέκταση πυρήνα**. ### **`com.apple.private.icloud-account-access`** -Το entitlement **`com.apple.private.icloud-account-access`** επιτρέπει την επικοινωνία με την υπηρεσία XPC **`com.apple.iCloudHelper`** η οποία θα **παρέχει tokens iCloud**. +Το δικαίωμα **`com.apple.private.icloud-account-access`** επιτρέπει την επικοινωνία με την υπηρεσία XPC **`com.apple.iCloudHelper`** η οποία θα **παρέχει tokens iCloud**. -**iMovie** και **Garageband** είχαν αυτό το entitlement. +**iMovie** και **Garageband** είχαν αυτό το δικαίωμα. -Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για **να αποκτήσετε tokens icloud** από αυτό το entitlement δείτε την ομιλία: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) +Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για **να αποκτήσετε tokens icloud** από αυτό το δικαίωμα, δείτε την ομιλία: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) ### `com.apple.private.tcc.manager.check-by-audit-token` @@ -74,7 +74,7 @@ TODO: Στην [**αυτή την αναφορά**](https://jhftss.github.io/The ### `keychain-access-groups` -Αυτό το entitlement καταγράφει τις ομάδες **keychain** στις οποίες η εφαρμογή έχει πρόσβαση: +Αυτό το δικαίωμα καταγράφει τις ομάδες **keychain** στις οποίες η εφαρμογή έχει πρόσβαση: ```xml keychain-access-groups @@ -113,21 +113,21 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti
-Είναι δυνατόν να ελεγχθεί ποιος έχει αυτή την πρόσβαση στο _System Settings_ > _Privacy & Security_ > _App Management._ +Είναι δυνατόν να ελέγξετε ποιος έχει αυτή την πρόσβαση στο _System Settings_ > _Privacy & Security_ > _App Management._ ### `kTCCServiceAccessibility` -Η διαδικασία θα είναι σε θέση να **καταχραστεί τις δυνατότητες προσβασιμότητας του macOS**, που σημαίνει ότι για παράδειγμα θα μπορεί να πατήσει πλήκτρα. Έτσι θα μπορούσε να ζητήσει πρόσβαση για να ελέγξει μια εφαρμογή όπως το Finder και να εγκρίνει το παράθυρο διαλόγου με αυτή την άδεια. +Η διαδικασία θα είναι σε θέση να **καταχραστεί τις δυνατότητες προσβασιμότητας του macOS**, που σημαίνει ότι για παράδειγμα θα μπορεί να πατάει πλήκτρα. Έτσι θα μπορούσε να ζητήσει πρόσβαση για να ελέγξει μια εφαρμογή όπως το Finder και να εγκρίνει το διάλογο με αυτή την άδεια. ## Medium ### `com.apple.security.cs.allow-jit` -Αυτή η άδεια επιτρέπει να **δημιουργήσει μνήμη που είναι εγγράψιμη και εκτελέσιμη** περνώντας τη σημαία `MAP_JIT` στη συνάρτηση συστήματος `mmap()`. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit). +Αυτή η άδεια επιτρέπει να **δημιουργηθεί μνήμη που είναι εγγράψιμη και εκτελέσιμη** περνώντας τη σημαία `MAP_JIT` στη συνάρτηση συστήματος `mmap()`. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit). ### `com.apple.security.cs.allow-unsigned-executable-memory` -Αυτή η άδεια επιτρέπει να **παρακάμψει ή να διορθώσει κώδικα C**, να χρησιμοποιήσει τη μακροχρόνια αποσυρμένη **`NSCreateObjectFileImageFromMemory`** (η οποία είναι θεμελιωδώς ανασφαλής), ή να χρησιμοποιήσει το **DVDPlayback** framework. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory). +Αυτή η άδεια επιτρέπει να **υπερκαλύψει ή να διορθώσει C κώδικα**, να χρησιμοποιήσει τη μακροχρόνια αποσυρμένη **`NSCreateObjectFileImageFromMemory`** (η οποία είναι θεμελιωδώς ανασφαλής), ή να χρησιμοποιήσει το **DVDPlayback** framework. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory). > [!CAUTION] > Η συμπερίληψη αυτής της άδειας εκθέτει την εφαρμογή σας σε κοινές ευπάθειες σε γλώσσες κώδικα που είναι ανασφαλείς στη μνήμη. Σκεφτείτε προσεκτικά αν η εφαρμογή σας χρειάζεται αυτή την εξαίρεση. @@ -137,7 +137,7 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti Αυτή η άδεια επιτρέπει να **τροποποιήσει τμήματα των εκτελέσιμων αρχείων της** στο δίσκο για να εξαναγκάσει την έξοδο. Δείτε [**αυτό για περισσότερες πληροφορίες**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection). > [!CAUTION] -> Η Άδεια Απενεργοποίησης Προστασίας Εκτελέσιμης Μνήμης είναι μια ακραία άδεια που αφαιρεί μια θεμελιώδη προστασία ασφαλείας από την εφαρμογή σας, καθιστώντας δυνατή την αναγραφή του εκτελέσιμου κώδικα της εφαρμογής σας χωρίς ανίχνευση. Προτιμήστε στενότερες άδειες αν είναι δυνατόν. +> Η άδεια Απενεργοποίησης Προστασίας Εκτελέσιμης Μνήμης είναι μια ακραία άδεια που αφαιρεί μια θεμελιώδη προστασία ασφαλείας από την εφαρμογή σας, καθιστώντας δυνατή την αναγραφή του εκτελέσιμου κώδικα της εφαρμογής σας χωρίς ανίχνευση. Προτιμήστε στενότερες άδειες αν είναι δυνατόν. ### `com.apple.security.cs.allow-relative-library-loads` diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md index 94eccd2e7..2db86d592 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md @@ -38,11 +38,11 @@ ### Ανοιχτό `O_NOFOLLOW` -Η σημαία `O_NOFOLLOW` όταν χρησιμοποιείται από τη συνάρτηση `open` δεν θα ακολουθήσει έναν συμβολικό σύνδεσμο στο τελευταίο συστατικό της διαδρομής, αλλά θα ακολουθήσει την υπόλοιπη διαδρομή. Ο σωστός τρόπος για να αποτρέψετε την ακολουθία συμβολικών συνδέσμων στη διαδρομή είναι χρησιμοποιώντας τη σημαία `O_NOFOLLOW_ANY`. +Η σημαία `O_NOFOLLOW` όταν χρησιμοποιείται από τη συνάρτηση `open` δεν θα ακολουθήσει έναν συμβολικό σύνδεσμο στο τελευταίο συστατικό της διαδρομής, αλλά θα ακολουθήσει την υπόλοιπη διαδρομή. Ο σωστός τρόπος για να αποτρέψετε την ακολουθία συμβολικών συνδέσμων στη διαδρομή είναι να χρησιμοποιήσετε τη σημαία `O_NOFOLLOW_ANY`. ## .fileloc -Αρχεία με επέκταση **`.fileloc`** μπορούν να δείχνουν σε άλλες εφαρμογές ή δυαδικά, έτσι όταν ανοίγουν, η εφαρμογή/δυαδικό θα είναι αυτό που θα εκτελείται.\ +Αρχεία με επέκταση **`.fileloc`** μπορούν να δείχνουν σε άλλες εφαρμογές ή δυαδικά, έτσι όταν ανοίγονται, η εφαρμογή/δυαδικό θα είναι αυτό που θα εκτελείται.\ Παράδειγμα: ```xml @@ -122,7 +122,7 @@ ls -le /tmp/test Η μορφή αρχείου **AppleDouble** αντιγράφει ένα αρχείο συμπεριλαμβανομένων των ACEs του. -Στον [**κώδικα πηγής**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δούμε ότι η κειμενική αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή: +Στον [**κώδικα πηγής**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δούμε ότι η κείμενη αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή: Έλεγξε την [**αρχική αναφορά**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) για περισσότερες πληροφορίες. @@ -173,9 +173,9 @@ csops(pid, 9, &status, 4); // CS_OPS_SET_STATUS status = SecTaskGetCodeSignStatus(SecTaskCreateFromSelf(0)); NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, status); ``` -## Παράκαμψη Υπογραφών Κώδικα +## Παράκαμψη Υπογραφών Κωδικού -Τα πακέτα περιέχουν το αρχείο **`_CodeSignature/CodeResources`** το οποίο περιέχει το **hash** κάθε μεμονωμένου **αρχείου** στο **πακέτο**. Σημειώστε ότι το hash του CodeResources είναι επίσης **ενσωματωμένο στο εκτελέσιμο**, οπότε δεν μπορούμε να παρέμβουμε σε αυτό. +Τα πακέτα περιέχουν το αρχείο **`_CodeSignature/CodeResources`** το οποίο περιέχει το **hash** κάθε μεμονωμένου **αρχείου** στο **πακέτο**. Σημειώστε ότι το hash του CodeResources είναι επίσης **ενσωματωμένο στο εκτελέσιμο**, οπότε δεν μπορούμε να ασχοληθούμε με αυτό. Ωστόσο, υπάρχουν κάποια αρχεία των οποίων η υπογραφή δεν θα ελεγχθεί, αυτά έχουν το κλειδί omit στο plist, όπως: ```xml @@ -221,7 +221,7 @@ NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, statu ... ``` -Είναι δυνατόν να υπολογίσετε την υπογραφή ενός πόρου από την κονσόλα με: +Είναι δυνατόν να υπολογίσετε την υπογραφή ενός πόρου από το cli με: ```bash openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/Contents/Resources/AppIcon.icns | openssl base64 ``` @@ -248,8 +248,8 @@ hdiutil detach /private/tmp/mnt 1>/dev/null # You can also create a dmg from an app using: hdiutil create -srcfolder justsome.app justsome.dmg ``` -Συνήθως, το macOS τοποθετεί δίσκους επικοινωνώντας με την υπηρεσία Mach `com.apple.DiskArbitration.diskarbitrationd` (παρέχεται από το `/usr/libexec/diskarbitrationd`). Αν προσθέσετε την παράμετρο `-d` στο plist αρχείο των LaunchDaemons και κάνετε επανεκκίνηση, θα αποθηκεύει τα logs στο `/var/log/diskarbitrationd.log`.\ -Ωστόσο, είναι δυνατόν να χρησιμοποιήσετε εργαλεία όπως το `hdik` και το `hdiutil` για να επικοινωνήσετε απευθείας με το kext `com.apple.driver.DiskImages`. +Συνήθως, το macOS τοποθετεί δίσκους επικοινωνώντας με την υπηρεσία Mach `com.apple.DiskArbitrarion.diskarbitrariond` (παρέχεται από το `/usr/libexec/diskarbitrationd`). Αν προσθέσετε την παράμετρο `-d` στο αρχείο plist των LaunchDaemons και κάνετε επανεκκίνηση, θα αποθηκεύσει τα αρχεία καταγραφής στο `/var/log/diskarbitrationd.log`.\ +Ωστόσο, είναι δυνατό να χρησιμοποιήσετε εργαλεία όπως το `hdik` και το `hdiutil` για να επικοινωνήσετε απευθείας με το kext `com.apple.driver.DiskImages`. ## Αυθαίρετες Εγγραφές @@ -261,7 +261,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg ### Daemons -Γράψτε μια αυθαίρετη **LaunchDaemon** όπως **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** με ένα plist που εκτελεί ένα αυθαίρετο script όπως: +Γράψτε έναν αυθαίρετο **LaunchDaemon** όπως **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** με ένα plist που εκτελεί ένα αυθαίρετο script όπως: ```xml @@ -278,13 +278,13 @@ hdiutil create -srcfolder justsome.app justsome.dmg ``` -Απλά δημιουργήστε το σενάριο `/Applications/Scripts/privesc.sh` με τις **εντολές** που θα θέλατε να εκτελέσετε ως root. +Απλώς δημιουργήστε το σενάριο `/Applications/Scripts/privesc.sh` με τις **εντολές** που θα θέλατε να εκτελέσετε ως root. -### Αρχείο Sudoers +### Sudoers File Εάν έχετε **τυχαία εγγραφή**, μπορείτε να δημιουργήσετε ένα αρχείο μέσα στον φάκελο **`/etc/sudoers.d/`** παραχωρώντας στον εαυτό σας **sudo** δικαιώματα. -### Αρχεία PATH +### PATH files Το αρχείο **`/etc/paths`** είναι ένα από τα κύρια μέρη που γεμίζουν τη μεταβλητή περιβάλλοντος PATH. Πρέπει να είστε root για να το αντικαταστήσετε, αλλά αν ένα σενάριο από **privileged process** εκτελεί κάποια **εντολή χωρίς την πλήρη διαδρομή**, μπορεί να είστε σε θέση να **παρακάμψετε** αυτό τροποποιώντας αυτό το αρχείο. @@ -310,9 +310,9 @@ LogFilePerm 777 Είναι δυνατόν να ξεφύγετε από το sandbox του macOS με μια FS αυθαίρετη εγγραφή. Για μερικά παραδείγματα, ελέγξτε τη σελίδα [macOS Auto Start](../../../../macos-auto-start-locations.md) αλλά ένα κοινό είναι να γράψετε ένα αρχείο προτιμήσεων Terminal στο `~/Library/Preferences/com.apple.Terminal.plist` που εκτελεί μια εντολή κατά την εκκίνηση και να το καλέσετε χρησιμοποιώντας το `open`. -## Δημιουργία εγγράφων που είναι εγγράψιμα από άλλους χρήστες +## Generate writable files as other users -Αυτό θα δημιουργήσει ένα αρχείο που ανήκει στον root και είναι εγγράψιμο από εμένα ([**κώδικας από εδώ**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Αυτό μπορεί επίσης να λειτουργήσει ως privesc: +Αυτό θα δημιουργήσει ένα αρχείο που ανήκει στον root και είναι εγ writable από εμένα ([**code from here**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Αυτό μπορεί επίσης να λειτουργήσει ως privesc: ```bash DIRNAME=/usr/local/etc/periodic/daily @@ -326,7 +326,7 @@ echo $FILENAME ``` ## POSIX Κοινή Μνήμη -**Η POSIX κοινή μνήμη** επιτρέπει στις διεργασίες σε λειτουργικά συστήματα συμβατά με POSIX να έχουν πρόσβαση σε μια κοινή περιοχή μνήμης, διευκολύνοντας ταχύτερη επικοινωνία σε σύγκριση με άλλες μεθόδους επικοινωνίας μεταξύ διεργασιών. Περιλαμβάνει τη δημιουργία ή το άνοιγμα ενός αντικειμένου κοινής μνήμης με `shm_open()`, την ρύθμιση του μεγέθους του με `ftruncate()`, και την αντιστοίχιση του στη διεύθυνση μνήμης της διεργασίας χρησιμοποιώντας `mmap()`. Οι διεργασίες μπορούν στη συνέχεια να διαβάζουν και να γράφουν απευθείας σε αυτήν την περιοχή μνήμης. Για τη διαχείριση ταυτόχρονων προσβάσεων και την αποφυγή διαφθοράς δεδομένων, χρησιμοποιούνται συχνά μηχανισμοί συγχρονισμού όπως οι mutexes ή οι semaphores. Τέλος, οι διεργασίες αποδεσμεύουν και κλείνουν την κοινή μνήμη με `munmap()` και `close()`, και προαιρετικά αφαιρούν το αντικείμενο μνήμης με `shm_unlink()`. Αυτό το σύστημα είναι ιδιαίτερα αποτελεσματικό για αποδοτική, γρήγορη IPC σε περιβάλλοντα όπου πολλές διεργασίες χρειάζεται να έχουν γρήγορη πρόσβαση σε κοινά δεδομένα. +**POSIX κοινή μνήμη** επιτρέπει σε διαδικασίες σε λειτουργικά συστήματα συμβατά με POSIX να έχουν πρόσβαση σε μια κοινή περιοχή μνήμης, διευκολύνοντας ταχύτερη επικοινωνία σε σύγκριση με άλλες μεθόδους επικοινωνίας μεταξύ διαδικασιών. Περιλαμβάνει τη δημιουργία ή το άνοιγμα ενός αντικειμένου κοινής μνήμης με `shm_open()`, την ρύθμιση του μεγέθους του με `ftruncate()`, και την αντιστοίχιση του στη διεύθυνση μνήμης της διαδικασίας χρησιμοποιώντας `mmap()`. Οι διαδικασίες μπορούν στη συνέχεια να διαβάζουν και να γράφουν απευθείας σε αυτήν την περιοχή μνήμης. Για να διαχειριστούν την ταυτόχρονη πρόσβαση και να αποτρέψουν τη διαφθορά των δεδομένων, μηχανισμοί συγχρονισμού όπως οι mutexes ή οι semaphores χρησιμοποιούνται συχνά. Τέλος, οι διαδικασίες αποδεσμεύουν και κλείνουν την κοινή μνήμη με `munmap()` και `close()`, και προαιρετικά αφαιρούν το αντικείμενο μνήμης με `shm_unlink()`. Αυτό το σύστημα είναι ιδιαίτερα αποτελεσματικό για αποδοτική, γρήγορη IPC σε περιβάλλοντα όπου πολλές διαδικασίες χρειάζεται να έχουν γρήγορη πρόσβαση σε κοινά δεδομένα.
@@ -424,9 +424,9 @@ return 0; **macOSCguarded descriptors** είναι μια λειτουργία ασφαλείας που εισήχθη στο macOS για να ενισχύσει την ασφάλεια και την αξιοπιστία των **λειτουργιών περιγραφής αρχείων** σε εφαρμογές χρήστη. Αυτοί οι προστατευμένοι περιγραφείς παρέχουν έναν τρόπο για να συσχετίσουν συγκεκριμένους περιορισμούς ή "φύλακες" με περιγραφείς αρχείων, οι οποίοι επιβάλλονται από τον πυρήνα. -Αυτή η λειτουργία είναι ιδιαίτερα χρήσιμη για την πρόληψη ορισμένων κατηγοριών ευπαθειών ασφαλείας όπως η **μη εξουσιοδοτημένη πρόσβαση σε αρχεία** ή οι **συνθήκες αγώνα**. Αυτές οι ευπάθειες συμβαίνουν όταν, για παράδειγμα, ένα νήμα έχει πρόσβαση σε μια περιγραφή αρχείου δίνοντας **σε ένα άλλο ευάλωτο νήμα πρόσβαση σε αυτήν** ή όταν ένας περιγραφέας αρχείου είναι **κληρονομούμενος** από μια ευάλωτη διεργασία παιδί. Ορισμένες συναρτήσεις που σχετίζονται με αυτή τη λειτουργικότητα είναι: +Αυτή η λειτουργία είναι ιδιαίτερα χρήσιμη για την πρόληψη ορισμένων κατηγοριών ευπαθειών ασφαλείας όπως η **μη εξουσιοδοτημένη πρόσβαση σε αρχεία** ή οι **συνθήκες αγώνα**. Αυτές οι ευπάθειες συμβαίνουν όταν, για παράδειγμα, ένα νήμα έχει πρόσβαση σε μια περιγραφή αρχείου δίνοντας **σε ένα άλλο ευάλωτο νήμα πρόσβαση σε αυτήν** ή όταν ένας περιγραφέας αρχείου **κληρονομείται** από μια ευάλωτη διεργασία παιδί. Ορισμένες συναρτήσεις που σχετίζονται με αυτή τη λειτουργικότητα είναι: -- `guarded_open_np`: Άνοιγμα ενός FD με φύλακα +- `guarded_open_np`: Άνοιγμα ενός FD με έναν φύλακα - `guarded_close_np`: Κλείσιμο του - `change_fdguard_np`: Αλλαγή σημαιών φύλακα σε έναν περιγραφέα (ακόμη και αφαίρεση της προστασίας φύλακα) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md index 67b22f62d..e8d8b15f4 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md @@ -2,6 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} + ## Gatekeeper **Gatekeeper** είναι μια λειτουργία ασφαλείας που έχει αναπτυχθεί για τα λειτουργικά συστήματα Mac, σχεδιασμένη για να διασφαλίσει ότι οι χρήστες **εκτελούν μόνο αξιόπιστο λογισμικό** στα συστήματά τους. Λειτουργεί με το να **επικυρώνει το λογισμικό** που κατεβάζει ο χρήστης και προσπαθεί να ανοίξει από **πηγές εκτός του App Store**, όπως μια εφαρμογή, ένα πρόσθετο ή ένα πακέτο εγκατάστασης. @@ -18,9 +19,9 @@ 1. **Υπογραφή της Εφαρμογής:** Όταν ένας προγραμματιστής είναι έτοιμος να διανείμει την εφαρμογή του, **υπογράφει την εφαρμογή χρησιμοποιώντας ένα ιδιωτικό κλειδί**. Αυτό το ιδιωτικό κλειδί σχετίζεται με ένα **πιστοποιητικό που εκδίδει η Apple στον προγραμματιστή** όταν εγγραφεί στο Πρόγραμμα Προγραμματιστών της Apple. Η διαδικασία υπογραφής περιλαμβάνει τη δημιουργία ενός κρυπτογραφικού hash όλων των μερών της εφαρμογής και την κρυπτογράφηση αυτού του hash με το ιδιωτικό κλειδί του προγραμματιστή. 2. **Διανομή της Εφαρμογής:** Η υπογεγραμμένη εφαρμογή διανέμεται στους χρήστες μαζί με το πιστοποιητικό του προγραμματιστή, το οποίο περιέχει το αντίστοιχο δημόσιο κλειδί. -3. **Επικύρωση της Εφαρμογής:** Όταν ένας χρήστης κατεβάσει και προσπαθήσει να εκτελέσει την εφαρμογή, το λειτουργικό σύστημα Mac του χρησιμοποιεί το δημόσιο κλειδί από το πιστοποιητικό του προγραμματιστή για να αποκρυπτογραφήσει το hash. Στη συνέχεια, υπολογίζει ξανά το hash με βάση την τρέχουσα κατάσταση της εφαρμογής και το συγκρίνει με το αποκρυπτογραφημένο hash. Αν ταιριάζουν, σημαίνει ότι **η εφαρμογή δεν έχει τροποποιηθεί** από την υπογραφή του προγραμματιστή και το σύστημα επιτρέπει την εκτέλεση της εφαρμογής. +3. **Επικύρωση της Εφαρμογής:** Όταν ένας χρήστης κατεβάσει και προσπαθήσει να εκτελέσει την εφαρμογή, το λειτουργικό σύστημα Mac χρησιμοποιεί το δημόσιο κλειδί από το πιστοποιητικό του προγραμματιστή για να αποκρυπτογραφήσει το hash. Στη συνέχεια, υπολογίζει ξανά το hash με βάση την τρέχουσα κατάσταση της εφαρμογής και το συγκρίνει με το αποκρυπτογραφημένο hash. Αν ταιριάζουν, σημαίνει ότι **η εφαρμογή δεν έχει τροποποιηθεί** από την υπογραφή του προγραμματιστή και το σύστημα επιτρέπει την εκτέλεση της εφαρμογής. -Οι υπογραφές εφαρμογών είναι ένα απαραίτητο μέρος της τεχνολογίας Gatekeeper της Apple. Όταν ένας χρήστης προσπαθεί να **ανοίξει μια εφαρμογή που έχει κατεβάσει από το διαδίκτυο**, το Gatekeeper επαληθεύει την υπογραφή της εφαρμογής. Αν είναι υπογεγραμμένη με πιστοποιητικό που έχει εκδώσει η Apple σε γνωστό προγραμματιστή και ο κώδικας δεν έχει παραποιηθεί, το Gatekeeper επιτρέπει την εκτέλεση της εφαρμογής. Διαφορετικά, αποκλείει την εφαρμογή και ειδοποιεί τον χρήστη. +Οι υπογραφές εφαρμογών είναι ένα απαραίτητο μέρος της τεχνολογίας Gatekeeper της Apple. Όταν ένας χρήστης προσπαθεί να **ανοίξει μια εφαρμογή που έχει κατεβάσει από το διαδίκτυο**, το Gatekeeper επαληθεύει την υπογραφή της εφαρμογής. Αν είναι υπογεγραμμένη με πιστοποιητικό που έχει εκδοθεί από την Apple σε γνωστό προγραμματιστή και ο κώδικας δεν έχει παραποιηθεί, το Gatekeeper επιτρέπει την εκτέλεση της εφαρμογής. Διαφορετικά, αποκλείει την εφαρμογή και ειδοποιεί τον χρήστη. Από το macOS Catalina και μετά, **το Gatekeeper ελέγχει επίσης αν η εφαρμογή έχει notarised** από την Apple, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας. Η διαδικασία notarization ελέγχει την εφαρμογή για γνωστά ζητήματα ασφαλείας και κακόβουλο κώδικα, και αν αυτές οι έλεγχοι περάσουν, η Apple προσθέτει ένα εισιτήριο στην εφαρμογή που μπορεί να επαληθεύσει το Gatekeeper. @@ -45,7 +46,7 @@ codesign -s toolsdemo ``` ### Notarization -Η διαδικασία notarization της Apple λειτουργεί ως επιπλέον προστασία για να προστατεύσει τους χρήστες από δυνητικά επιβλαβές λογισμικό. Περιλαμβάνει τον **προγραμματιστή να υποβάλει την εφαρμογή του για εξέταση** από την **Υπηρεσία Notary της Apple**, η οποία δεν πρέπει να συγχέεται με την Εξέταση Εφαρμογών. Αυτή η υπηρεσία είναι ένα **αυτοματοποιημένο σύστημα** που εξετάζει το υποβληθέν λογισμικό για την παρουσία **κακόβουλου περιεχομένου** και τυχόν πιθανών προβλημάτων με την υπογραφή κώδικα. +Η διαδικασία notarization της Apple λειτουργεί ως επιπλέον προστασία για να προστατεύσει τους χρήστες από δυνητικά επιβλαβές λογισμικό. Περιλαμβάνει την **υποβολή της εφαρμογής από τον προγραμματιστή για εξέταση** από την **Υπηρεσία Notary της Apple**, η οποία δεν πρέπει να συγχέεται με την Εξέταση Εφαρμογών. Αυτή η υπηρεσία είναι ένα **αυτοματοποιημένο σύστημα** που εξετάζει το υποβληθέν λογισμικό για την παρουσία **κακόβουλου περιεχομένου** και τυχόν δυνητικά προβλήματα με την υπογραφή κώδικα. Εάν το λογισμικό **περάσει** αυτή την επιθεώρηση χωρίς να εγείρει ανησυχίες, η Υπηρεσία Notary δημιουργεί ένα εισιτήριο notarization. Ο προγραμματιστής είναι υποχρεωμένος να **συνδέσει αυτό το εισιτήριο με το λογισμικό του**, μια διαδικασία που ονομάζεται 'stapling.' Επιπλέον, το εισιτήριο notarization δημοσιεύεται επίσης online όπου ο Gatekeeper, η τεχνολογία ασφαλείας της Apple, μπορεί να έχει πρόσβαση σε αυτό. @@ -104,7 +105,7 @@ cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE - `/var/db/gke.bundle/Contents/Resources/gk.db` - `/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db` -Ή θα μπορούσατε να παραθέσετε τις προηγούμενες πληροφορίες με: +Ή μπορείτε να παραθέσετε τις προηγούμενες πληροφορίες με: ```bash sudo spctl --list ``` @@ -118,7 +119,7 @@ spctl --master-disable spctl --global-enable spctl --master-enable ``` -Όταν είναι πλήρως ενεργοποιημένο, μια νέα επιλογή θα εμφανιστεί: +Όταν είναι πλήρως ενεργοποιημένο, θα εμφανιστεί μια νέα επιλογή:
@@ -145,11 +146,11 @@ spctl --assess -v /Applications/App.app ### Αρχεία Καραντίνας -Κατά την **λήψη** μιας εφαρμογής ή αρχείου, συγκεκριμένες **εφαρμογές** macOS όπως οι περιηγητές ιστού ή οι πελάτες email **συνδέουν ένα εκτεταμένο χαρακτηριστικό αρχείου**, γνωστό ως "**σημαία καραντίνας**," στο ληφθέν αρχείο. Αυτό το χαρακτηριστικό λειτουργεί ως μέτρο ασφαλείας για να **σημάνει το αρχείο** ως προερχόμενο από μια μη αξιόπιστη πηγή (το διαδίκτυο), και ενδεχομένως να φέρει κινδύνους. Ωστόσο, δεν συνδέουν όλες οι εφαρμογές αυτό το χαρακτηριστικό, για παράδειγμα, το κοινό λογισμικό πελάτη BitTorrent συνήθως παρακάμπτει αυτή τη διαδικασία. +Κατά την **λήψη** μιας εφαρμογής ή αρχείου, συγκεκριμένες **εφαρμογές** macOS όπως οι περιηγητές ιστού ή οι πελάτες email **συνδέουν ένα εκτεταμένο χαρακτηριστικό αρχείου**, γνωστό ως το "**σήμα καραντίνας**," στο ληφθέν αρχείο. Αυτό το χαρακτηριστικό λειτουργεί ως μέτρο ασφαλείας για να **σημάνει το αρχείο** ως προερχόμενο από μια μη αξιόπιστη πηγή (το διαδίκτυο), και ενδεχομένως να φέρει κινδύνους. Ωστόσο, δεν συνδέουν όλες οι εφαρμογές αυτό το χαρακτηριστικό, για παράδειγμα, το κοινό λογισμικό πελάτη BitTorrent συνήθως παρακάμπτει αυτή τη διαδικασία. -**Η παρουσία μιας σημαίας καραντίνας στέλνει σήμα στη λειτουργία ασφαλείας Gatekeeper του macOS όταν ένας χρήστης προσπαθεί να εκτελέσει το αρχείο**. +**Η παρουσία ενός σήματος καραντίνας σηματοδοτεί τη λειτουργία ασφαλείας Gatekeeper του macOS όταν ένας χρήστης προσπαθεί να εκτελέσει το αρχείο**. -Στην περίπτωση που η **σημαία καραντίνας δεν είναι παρούσα** (όπως με τα αρχεία που έχουν ληφθεί μέσω ορισμένων πελατών BitTorrent), οι **έλεγχοι του Gatekeeper ενδέχεται να μην εκτελούνται**. Έτσι, οι χρήστες θα πρέπει να είναι προσεκτικοί όταν ανοίγουν αρχεία που έχουν ληφθεί από λιγότερο ασφαλείς ή άγνωστες πηγές. +Στην περίπτωση που το **σήμα καραντίνας δεν είναι παρόν** (όπως με αρχεία που έχουν ληφθεί μέσω ορισμένων πελατών BitTorrent), οι **έλεγχοι του Gatekeeper ενδέχεται να μην εκτελούνται**. Έτσι, οι χρήστες θα πρέπει να είναι προσεκτικοί όταν ανοίγουν αρχεία που έχουν ληφθεί από λιγότερο ασφαλείς ή άγνωστες πηγές. > [!NOTE] > **Έλεγχος** της **έγκυρης** υπογραφής κώδικα είναι μια **χρονικά απαιτητική** διαδικασία που περιλαμβάνει τη δημιουργία κρυπτογραφικών **hashes** του κώδικα και όλων των πόρων που περιλαμβάνονται. Επιπλέον, ο έλεγχος εγκυρότητας πιστοποιητικού περιλαμβάνει τη **διαδικτυακή αναζήτηση** στους διακομιστές της Apple για να δει αν έχει ανακληθεί μετά την έκδοσή του. Για αυτούς τους λόγους, ένας πλήρης έλεγχος υπογραφής κώδικα και πιστοποίησης είναι **μη πρακτικός να εκτελείται κάθε φορά που εκκινείται μια εφαρμογή**. > @@ -171,7 +172,7 @@ spctl --enable spctl --disable #You can also allow nee identifies to execute code using the binary "spctl" ``` -Μπορείτε επίσης να **βρείτε αν ένα αρχείο έχει την επεκτεινόμενη ιδιότητα καραντίνας** με: +Μπορείτε επίσης να **βρείτε αν ένα αρχείο έχει την επεκταμένη ιδιότητα καραντίνας** με: ```bash xattr file.png com.apple.macl @@ -275,7 +276,7 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri Αυτή η βιβλιοθήκη εξάγει πολλές λειτουργίες που επιτρέπουν την επεξεργασία των πεδίων εκτεταμένων χαρακτηριστικών. -Τα APIs `qtn_file_*` ασχολούνται με τις πολιτικές καραντίνας αρχείων, τα APIs `qtn_proc_*` εφαρμόζονται σε διαδικασίες (αρχεία που δημιουργούνται από τη διαδικασία). Οι μη εξαγόμενες συναρτήσεις `__qtn_syscall_quarantine*` είναι αυτές που εφαρμόζουν τις πολιτικές που καλούν το `mac_syscall` με "Quarantine" ως πρώτο επιχείρημα, το οποίο στέλνει τα αιτήματα στο `Quarantine.kext`. +Τα APIs `qtn_file_*` ασχολούνται με τις πολιτικές καραντίνας αρχείων, τα APIs `qtn_proc_*` εφαρμόζονται σε διαδικασίες (αρχεία που δημιουργούνται από τη διαδικασία). Οι μη εξαγόμενες λειτουργίες `__qtn_syscall_quarantine*` είναι αυτές που εφαρμόζουν τις πολιτικές που καλούν το `mac_syscall` με "Quarantine" ως πρώτο επιχείρημα, το οποίο στέλνει τα αιτήματα στο `Quarantine.kext`. #### **Quarantine.kext** @@ -307,7 +308,7 @@ XProtect βρίσκεται σε προστατευμένη τοποθεσία S - **`XProtect.bundle/Contents/Resources/XProtect.yara`**: Κανόνες Yara για την ανίχνευση κακόβουλου λογισμικού. - **`XProtect.bundle/Contents/Resources/gk.db`**: Βάση δεδομένων SQLite3 με hashes αποκλεισμένων εφαρμογών και TeamIDs. -Σημειώστε ότι υπάρχει άλλη εφαρμογή στο **`/Library/Apple/System/Library/CoreServices/XProtect.app`** που σχετίζεται με το XProtect και δεν εμπλέκεται στη διαδικασία του Gatekeeper. +Σημειώστε ότι υπάρχει μια άλλη εφαρμογή στο **`/Library/Apple/System/Library/CoreServices/XProtect.app`** που σχετίζεται με το XProtect και δεν εμπλέκεται στη διαδικασία του Gatekeeper. ### Όχι Gatekeeper @@ -340,11 +341,11 @@ XProtect βρίσκεται σε προστατευμένη τοποθεσία S ### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) -Σε αυτή την παράκαμψη δημιουργήθηκε ένα zip αρχείο με μια εφαρμογή που άρχισε να συμπιέζεται από το `application.app/Contents` αντί για το `application.app`. Επομένως, το **χαρακτηριστικό καραντίνας** εφαρμόστηκε σε όλα τα **αρχεία από το `application.app/Contents`** αλλά **όχι στο `application.app`**, το οποίο ήταν αυτό που έλεγχε ο Gatekeeper, έτσι ο Gatekeeper παρακάμφθηκε γιατί όταν ενεργοποιήθηκε το `application.app` **δεν είχε το χαρακτηριστικό καραντίνας.** +Σε αυτή την παράκαμψη δημιουργήθηκε ένα zip αρχείο με μια εφαρμογή που άρχισε να συμπιέζεται από το `application.app/Contents` αντί από το `application.app`. Επομένως, το **χαρακτηριστικό καραντίνας** εφαρμόστηκε σε όλα τα **αρχεία από το `application.app/Contents`** αλλά **όχι στο `application.app`**, το οποίο ήταν αυτό που έλεγχε ο Gatekeeper, έτσι ο Gatekeeper παρακάμφθηκε γιατί όταν ενεργοποιήθηκε το `application.app` **δεν είχε το χαρακτηριστικό καραντίνας.** ```bash zip -r test.app/Contents test.zip ``` -Δείτε την [**πρωτότυπη αναφορά**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) για περισσότερες πληροφορίες. +Ελέγξτε την [**πρωτότυπη αναφορά**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) για περισσότερες πληροφορίες. ### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910) @@ -365,7 +366,7 @@ xattr: [Errno 13] Permission denied: '/tmp/no-attr' ``` Επιπλέον, η μορφή αρχείου **AppleDouble** αντιγράφει ένα αρχείο συμπεριλαμβανομένων των ACE του. -Στον [**κώδικα πηγής**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δει κανείς ότι η κειμενική αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή: +Στον [**πηγαίο κώδικα**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) είναι δυνατόν να δει κανείς ότι η κείμενη αναπαράσταση ACL που αποθηκεύεται μέσα στο xattr που ονομάζεται **`com.apple.acl.text`** θα οριστεί ως ACL στο αποσυμπιεσμένο αρχείο. Έτσι, αν συμπίεσες μια εφαρμογή σε ένα αρχείο zip με μορφή αρχείου **AppleDouble** με ένα ACL που αποτρέπει την εγγραφή άλλων xattrs σε αυτό... το xattr καραντίνας δεν ορίστηκε στην εφαρμογή: ```bash chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test ditto -c -k test test.zip @@ -416,16 +417,16 @@ aa archive -d s/ -o app.aar ``` ### uchg (από αυτήν την [ομιλία](https://codeblue.jp/2023/result/pdf/cb23-bypassing-macos-security-and-privacy-mechanisms-from-gatekeeper-to-system-integrity-protection-by-koh-nakagawa.pdf)) -- Δημιουργήστε έναν φάκελο που περιέχει μια εφαρμογή. +- Δημιουργήστε έναν φάκελο που να περιέχει μια εφαρμογή. - Προσθέστε uchg στην εφαρμογή. - Συμπιέστε την εφαρμογή σε ένα αρχείο tar.gz. - Στείλτε το αρχείο tar.gz σε ένα θύμα. - Το θύμα ανοίγει το αρχείο tar.gz και εκτελεί την εφαρμογή. - Ο Gatekeeper δεν ελέγχει την εφαρμογή. -### Αποτροπή Quarantine xattr +### Αποτροπή Καραντίνας xattr -Σε ένα ".app" bundle, αν το quarantine xattr δεν έχει προστεθεί σε αυτό, κατά την εκτέλεση του **ο Gatekeeper δεν θα ενεργοποιηθεί**. +Σε ένα ".app" bundle, αν το xattr καραντίνας δεν έχει προστεθεί σε αυτό, κατά την εκτέλεσή του **ο Gatekeeper δεν θα ενεργοποιηθεί**. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md index cf9f91b3d..360a91b31 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md @@ -4,7 +4,7 @@ ## Basic Information -Οι περιορισμοί εκκίνησης στο macOS εισήχθησαν για να ενισχύσουν την ασφάλεια **ρυθμίζοντας πώς, ποιος και από πού μπορεί να ξεκινήσει μια διαδικασία**. Εισήχθησαν στο macOS Ventura, παρέχοντας ένα πλαίσιο που κατηγοριοποιεί **κάθε δυαδικό σύστημα σε διακριτές κατηγορίες περιορισμών**, οι οποίες ορίζονται μέσα στην **cache εμπιστοσύνης**, μια λίστα που περιέχει τα δυαδικά συστήματα και τους αντίστοιχους κατακερματισμούς τους. Αυτοί οι περιορισμοί επεκτείνονται σε κάθε εκτελέσιμο δυαδικό αρχείο μέσα στο σύστημα, περιλαμβάνοντας ένα σύνολο **κανόνων** που καθορίζουν τις απαιτήσεις για **την εκκίνηση ενός συγκεκριμένου δυαδικού αρχείου**. Οι κανόνες περιλαμβάνουν αυτοπεριορισμούς που πρέπει να ικανοποιεί ένα δυαδικό αρχείο, περιορισμούς γονέα που απαιτείται να πληρούνται από τη γονική διαδικασία του, και υπεύθυνους περιορισμούς που πρέπει να τηρούνται από άλλες σχετικές οντότητες. +Οι περιορισμοί εκκίνησης στο macOS εισήχθησαν για να ενισχύσουν την ασφάλεια **ρυθμίζοντας πώς, ποιος και από πού μπορεί να ξεκινήσει μια διαδικασία**. Εισήχθησαν στο macOS Ventura, παρέχοντας ένα πλαίσιο που κατηγοριοποιεί **κάθε δυαδικό σύστημα σε διακριτές κατηγορίες περιορισμών**, οι οποίες ορίζονται μέσα στην **cache εμπιστοσύνης**, μια λίστα που περιέχει τα δυαδικά συστήματα και τους αντίστοιχους κατακερματισμούς τους. Αυτοί οι περιορισμοί επεκτείνονται σε κάθε εκτελέσιμο δυαδικό αρχείο μέσα στο σύστημα, περιλαμβάνοντας ένα σύνολο **κανόνων** που καθορίζουν τις απαιτήσεις για **την εκκίνηση ενός συγκεκριμένου δυαδικού αρχείου**. Οι κανόνες περιλαμβάνουν αυτοπεριορισμούς που πρέπει να ικανοποιεί ένα δυαδικό αρχείο, περιορισμούς γονέα που απαιτείται να πληρούνται από τη γονική διαδικασία του, και υπεύθυνους περιορισμούς που πρέπει να τηρούνται από άλλες σχετικές οντότητες​. Ο μηχανισμός επεκτείνεται σε εφαρμογές τρίτων μέσω των **Περιορισμών Περιβάλλοντος**, ξεκινώντας από το macOS Sonoma, επιτρέποντας στους προγραμματιστές να προστατεύουν τις εφαρμογές τους καθορίζοντας ένα **σύνολο κλειδιών και τιμών για περιορισμούς περιβάλλοντος.** @@ -75,7 +75,7 @@ codesign -d -vvvv app.app Και στο iOS φαίνεται ότι βρίσκεται στο **`/usr/standalone/firmware/FUD/StaticTrustCache.img4`**. > [!WARNING] -> Στο macOS που τρέχει σε συσκευές Apple Silicon, αν ένα Apple signed binary δεν είναι στο trust cache, το AMFI θα αρνηθεί να το φορτώσει. +> Στο macOS που τρέχει σε συσκευές Apple Silicon, αν ένα υπογεγραμμένο δυαδικό αρχείο από την Apple δεν είναι στο trust cache, το AMFI θα αρνηθεί να το φορτώσει. ### Enumerating Trust Caches @@ -133,17 +133,17 @@ uint8_t constraintCategory; uint8_t reserved0; } __attribute__((__packed__)); ``` -Τότε, θα μπορούσατε να χρησιμοποιήσετε ένα σενάριο όπως [**αυτό**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30) για να εξάγετε δεδομένα. +Στη συνέχεια, μπορείτε να χρησιμοποιήσετε ένα σενάριο όπως [**αυτό**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30) για να εξαγάγετε δεδομένα. Από αυτά τα δεδομένα μπορείτε να ελέγξετε τις εφαρμογές με **τιμή περιορισμών εκκίνησης `0`**, οι οποίες είναι αυτές που δεν περιορίζονται ([**ελέγξτε εδώ**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056) για το τι είναι κάθε τιμή). -## Επιχειρησιακές Μετρήσεις +## Mitigations Επιθέσεων -Οι περιορισμοί εκκίνησης θα είχαν μετριάσει πολλές παλιές επιθέσεις **διασφαλίζοντας ότι η διαδικασία δεν θα εκτελείται σε απροσδόκητες συνθήκες:** Για παράδειγμα από απροσδόκητες τοποθεσίες ή να καλείται από μια απροσδόκητη γονική διαδικασία (αν μόνο το launchd θα έπρεπε να την εκκινεί) +Οι περιορισμοί εκκίνησης θα είχαν μετριάσει πολλές παλιές επιθέσεις **διασφαλίζοντας ότι η διαδικασία δεν θα εκτελείται σε απροσδόκητες συνθήκες:** Για παράδειγμα από απροσδόκητες τοποθεσίες ή να καλείται από μια απροσδόκητη γονική διαδικασία (αν μόνο το launchd θα έπρεπε να την εκκινεί). Επιπλέον, οι περιορισμοί εκκίνησης **μετριάζουν επίσης τις επιθέσεις υποβάθμισης.** -Ωστόσο, **δεν μετριάζουν τις κοινές καταχρήσεις XPC**, **εισαγωγές κώδικα Electron** ή **εισαγωγές dylib** χωρίς έλεγχο βιβλιοθήκης (εκτός αν είναι γνωστά τα IDs ομάδας που μπορούν να φορτώσουν βιβλιοθήκες). +Ωστόσο, **δεν μετριάζουν τις κοινές καταχρήσεις XPC**, **εισβολές κώδικα Electron** ή **εισβολές dylib** χωρίς έλεγχο βιβλιοθήκης (εκτός αν είναι γνωστά τα IDs ομάδας που μπορούν να φορτώσουν βιβλιοθήκες). ### Προστασία Daemon XPC @@ -152,7 +152,7 @@ uint8_t reserved0; - **Εκκίνηση της Υπηρεσίας XPC**: Αν θεωρηθεί σφάλμα, αυτή η ρύθμιση δεν επιτρέπει την εκκίνηση της υπηρεσίας XPC μέσω κώδικα επιτιθέμενου. - **Σύνδεση σε Μια Ενεργή Υπηρεσία**: Αν η υπηρεσία XPC είναι ήδη σε λειτουργία (πιθανώς ενεργοποιημένη από την αρχική της εφαρμογή), δεν υπάρχουν εμπόδια για τη σύνδεση σε αυτήν. -Ενώ η εφαρμογή περιορισμών στην υπηρεσία XPC μπορεί να είναι ωφέλιμη **μειώνοντας το παράθυρο για πιθανές επιθέσεις**, δεν αντιμετωπίζει την κύρια ανησυχία. Η διασφάλιση της ασφάλειας της υπηρεσίας XPC απαιτεί θεμελιωδώς **έλεγχο του συνδεδεμένου πελάτη αποτελεσματικά**. Αυτό παραμένει η μοναδική μέθοδος για την ενίσχυση της ασφάλειας της υπηρεσίας. Επίσης, αξίζει να σημειωθεί ότι η αναφερόμενη διαμόρφωση ευθύνης είναι αυτή τη στιγμή λειτουργική, κάτι που μπορεί να μην ευθυγραμμίζεται με τον προγραμματισμένο σχεδιασμό. +Ενώ η εφαρμογή περιορισμών στην υπηρεσία XPC μπορεί να είναι ωφέλιμη **συμπιέζοντας το παράθυρο για πιθανές επιθέσεις**, δεν αντιμετωπίζει την κύρια ανησυχία. Η διασφάλιση της ασφάλειας της υπηρεσίας XPC απαιτεί θεμελιωδώς **έλεγχο του συνδεδεμένου πελάτη αποτελεσματικά**. Αυτή παραμένει η μοναδική μέθοδος για την ενίσχυση της ασφάλειας της υπηρεσίας. Επίσης, αξίζει να σημειωθεί ότι η αναφερόμενη διαμόρφωση ευθύνης είναι αυτή τη στιγμή λειτουργική, κάτι που μπορεί να μην ευθυγραμμίζεται με τον προγραμματισμένο σχεδιασμό. ### Προστασία Electron diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md index e098fa55d..6b1e55da2 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md @@ -6,14 +6,14 @@ **MACF** σημαίνει **Mandatory Access Control Framework**, το οποίο είναι ένα σύστημα ασφαλείας ενσωματωμένο στο λειτουργικό σύστημα για να βοηθήσει στην προστασία του υπολογιστή σας. Λειτουργεί θέτοντας **αυστηρούς κανόνες σχετικά με το ποιος ή τι μπορεί να έχει πρόσβαση σε ορισμένα μέρη του συστήματος**, όπως αρχεία, εφαρμογές και πόρους συστήματος. Εφαρμόζοντας αυτούς τους κανόνες αυτόματα, το MACF διασφαλίζει ότι μόνο οι εξουσιοδοτημένοι χρήστες και διαδικασίες μπορούν να εκτελούν συγκεκριμένες ενέργειες, μειώνοντας τον κίνδυνο μη εξουσιοδοτημένης πρόσβασης ή κακόβουλων δραστηριοτήτων. -Σημειώστε ότι το MACF δεν παίρνει πραγματικά αποφάσεις καθώς απλώς **παρεμβαίνει** σε ενέργειες, αφήνει τις αποφάσεις στα **modules πολιτικής** (επέκταση πυρήνα) που καλεί όπως `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext`, `TMSafetyNet.kext` και `mcxalr.kext`. +Σημειώστε ότι το MACF δεν παίρνει πραγματικά αποφάσεις καθώς απλώς **παρεμβαίνει** σε ενέργειες, αφήνει τις αποφάσεις στα **πολιτικά modules** (επέκταση πυρήνα) που καλεί όπως `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext`, `TMSafetyNet.kext` και `mcxalr.kext`. ### Flow 1. Η διαδικασία εκτελεί μια syscall/mach trap 2. Η σχετική λειτουργία καλείται μέσα στον πυρήνα 3. Η λειτουργία καλεί το MACF -4. Το MACF ελέγχει τα modules πολιτικής που ζήτησαν να συνδεθούν με αυτή τη λειτουργία στην πολιτική τους +4. Το MACF ελέγχει τα πολιτικά modules που ζήτησαν να συνδεθούν με αυτή τη λειτουργία στην πολιτική τους 5. Το MACF καλεί τις σχετικές πολιτικές 6. Οι πολιτικές υποδεικνύουν αν επιτρέπουν ή αρνούνται την ενέργεια @@ -22,7 +22,7 @@ ### Labels -Το MACF χρησιμοποιεί **ετικέτες** που στη συνέχεια οι πολιτικές ελέγχουν αν θα χορηγήσουν κάποια πρόσβαση ή όχι. Ο κώδικας της δήλωσης δομής των ετικετών μπορεί να βρεθεί [εδώ](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), ο οποίος χρησιμοποιείται στη συνέχεια μέσα στη **`struct ucred`** [**εδώ**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) στο μέρος **`cr_label`**. Η ετικέτα περιέχει σημαίες και έναν αριθμό **slots** που μπορούν να χρησιμοποιηθούν από **πολιτικές MACF για την κατανομή δεικτών**. Για παράδειγμα, το Sandbox θα δείχνει στο προφίλ του κοντέινερ. +Το MACF χρησιμοποιεί **ετικέτες** που στη συνέχεια οι πολιτικές ελέγχουν αν θα χορηγήσουν κάποια πρόσβαση ή όχι. Ο κώδικας της δήλωσης δομής των ετικετών μπορεί να βρεθεί [εδώ](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), ο οποίος χρησιμοποιείται στη συνέχεια μέσα στη **`struct ucred`** [**εδώ**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) στο μέρος **`cr_label`**. Η ετικέτα περιέχει σημαίες και έναν αριθμό **slots** που μπορούν να χρησιμοποιηθούν από **πολιτικές MACF για να εκχωρήσουν δείκτες**. Για παράδειγμα, το Sandbox θα δείχνει στο προφίλ του κοντέινερ. ## MACF Policies @@ -69,7 +69,7 @@ void *mpc_data; /** module data */ Σημειώστε ότι οι πολιτικές MACF μπορούν να καταχωρηθούν και να αποσυρθούν επίσης **δυναμικά**. -Ένα από τα κύρια πεδία της `mac_policy_conf` είναι το **`mpc_ops`**. Αυτό το πεδίο καθορίζει ποιες λειτουργίες ενδιαφέρει η πολιτική. Σημειώστε ότι υπάρχουν εκατοντάδες από αυτές, οπότε είναι δυνατό να μηδενιστούν όλες και στη συνέχεια να επιλεγούν μόνο αυτές που ενδιαφέρει η πολιτική. Από [εδώ](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html): +Ένα από τα κύρια πεδία της `mac_policy_conf` είναι το **`mpc_ops`**. Αυτό το πεδίο καθορίζει ποιες λειτουργίες ενδιαφέρει η πολιτική. Σημειώστε ότι υπάρχουν εκατοντάδες από αυτές, οπότε είναι δυνατό να μηδενιστούν όλες και στη συνέχεια να επιλεγούν μόνο αυτές που ενδιαφέρουν την πολιτική. Από [εδώ](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html): ```c struct mac_policy_ops { mpo_audit_check_postselect_t *mpo_audit_check_postselect; @@ -82,7 +82,7 @@ mpo_cred_check_label_update_execve_t *mpo_cred_check_label_update_execve; mpo_cred_check_label_update_t *mpo_cred_check_label_update; [...] ``` -Σχεδόν όλοι οι hooks θα καλούνται από το MACF όταν μία από αυτές τις λειτουργίες παρεμποδίζεται. Ωστόσο, οι **`mpo_policy_*`** hooks είναι μια εξαίρεση επειδή το `mpo_hook_policy_init()` είναι μια callback που καλείται κατά την εγγραφή (δηλαδή μετά το `mac_policy_register()`) και το `mpo_hook_policy_initbsd()` καλείται κατά την καθυστερημένη εγγραφή μόλις το BSD υποσύστημα έχει αρχικοποιηθεί σωστά. +Σχεδόν όλοι οι hooks θα καλούνται από το MACF όταν μία από αυτές τις λειτουργίες παρεμποδίζεται. Ωστόσο, οι **`mpo_policy_*`** hooks είναι μια εξαίρεση επειδή το `mpo_hook_policy_init()` είναι ένα callback που καλείται κατά την εγγραφή (δηλαδή μετά το `mac_policy_register()`) και το `mpo_hook_policy_initbsd()` καλείται κατά την καθυστερημένη εγγραφή μόλις το BSD υποσύστημα έχει αρχικοποιηθεί σωστά. Επιπλέον, το **`mpo_policy_syscall`** hook μπορεί να εγγραφεί από οποιοδήποτε kext για να εκθέσει μια ιδιωτική **ioctl** στυλ κλήση **interface**. Στη συνέχεια, ένας πελάτης χρήστη θα μπορεί να καλέσει το `mac_syscall` (#381) καθορίζοντας ως παραμέτρους το **όνομα πολιτικής** με έναν ακέραιο **κωδικό** και προαιρετικά **ορίσματα**.\ Για παράδειγμα, το **`Sandbox.kext`** το χρησιμοποιεί πολύ. @@ -91,13 +91,13 @@ mpo_cred_check_label_update_t *mpo_cred_check_label_update; Επιπλέον, είναι επίσης δυνατό να αποκτήσετε τη λίστα των kexts που έχουν ρυθμίσει μια πολιτική εκ dumping από τη μνήμη της δομής **`_mac_policy_list`** που ενημερώνεται με κάθε πολιτική που εγγράφεται. -## MACF Initialization +## MACF Αρχικοποίηση Το MACF αρχικοποιείται πολύ νωρίς. Ρυθμίζεται στο `bootstrap_thread` του XNU: μετά το `ipc_bootstrap` καλείται το `mac_policy_init()` που αρχικοποιεί τη λίστα `mac_policy_list` και λίγο αργότερα καλείται το `mac_policy_initmach()`. Μεταξύ άλλων, αυτή η συνάρτηση θα αποκτήσει όλα τα Apple kexts με το κλειδί `AppleSecurityExtension` στο Info.plist τους όπως το `ALF.kext`, `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext` και `TMSafetyNet.kext` και τα φορτώνει. -## MACF Callouts +## MACF Κλήσεις -Είναι κοινό να βρείτε callouts στο MACF που ορίζονται σε κώδικα όπως: **`#if CONFIG_MAC`** μπλοκ συνθηκών. Επιπλέον, μέσα σε αυτά τα μπλοκ είναι δυνατό να βρείτε κλήσεις σε `mac_proc_check*` που καλεί το MACF για **έλεγχο δικαιωμάτων** για την εκτέλεση ορισμένων ενεργειών. Επιπλέον, η μορφή των callouts του MACF είναι: **`mac___opName`**. +Είναι κοινό να βρείτε κλήσεις στο MACF που ορίζονται στον κώδικα όπως: **`#if CONFIG_MAC`** μπλοκ συνθηκών. Επιπλέον, μέσα σε αυτά τα μπλοκ είναι δυνατό να βρείτε κλήσεις σε `mac_proc_check*` που καλούν το MACF για **έλεγχο δικαιωμάτων** για την εκτέλεση ορισμένων ενεργειών. Επιπλέον, η μορφή των κλήσεων MACF είναι: **`mac___opName`**. Το αντικείμενο είναι ένα από τα εξής: `bpfdesc`, `cred`, `file`, `proc`, `vnode`, `mount`, `devfs`, `ifnet`, `inpcb`, `mbuf`, `ipq`, `pipe`, `sysv[msg/msq/shm/sem]`, `posix[shm/sem]`, `socket`, `kext`.\ Ο `opType` είναι συνήθως check που θα χρησιμοποιηθεί για να επιτρέψει ή να αρνηθεί την ενέργεια. Ωστόσο, είναι επίσης δυνατό να βρείτε `notify`, που θα επιτρέψει στο kext να αντιδράσει στην δεδομένη ενέργεια. @@ -157,17 +157,18 @@ error = mac_error_select(__step_err, error); \ }); \ } while (0) ``` -Ποια θα περάσει από όλες τις καταγεγραμμένες πολιτικές mac καλώντας τις συναρτήσεις τους και αποθηκεύοντας την έξοδο μέσα στη μεταβλητή error, η οποία θα μπορεί να παρακαμφθεί μόνο από το `mac_error_select` με κωδικούς επιτυχίας, έτσι ώστε αν οποιαδήποτε έλεγχος αποτύχει, ο συνολικός έλεγχος θα αποτύχει και η ενέργεια δεν θα επιτρέπεται. +Ποια θα περάσει από όλες τις καταχωρημένες πολιτικές mac καλώντας τις συναρτήσεις τους και αποθηκεύοντας την έξοδο μέσα στη μεταβλητή error, η οποία θα μπορεί να παρακαμφθεί μόνο από το `mac_error_select` με κωδικούς επιτυχίας, έτσι ώστε αν οποιαδήποτε έλεγχος αποτύχει, ο συνολικός έλεγχος θα αποτύχει και η ενέργεια δεν θα επιτρέπεται. > [!TIP] -> Ωστόσο, θυμηθείτε ότι δεν χρησιμοποιούνται όλες οι κλήσεις MACF μόνο για να αρνηθούν ενέργειες. Για παράδειγμα, η `mac_priv_grant` καλεί το μακρο [**MAC_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac_internal.h#L274), το οποίο θα παραχωρήσει το ζητούμενο προνόμιο αν οποιαδήποτε πολιτική απαντήσει με 0: +> Ωστόσο, θυμηθείτε ότι δεν καλούνται όλες οι κλήσεις MACF μόνο για να αρνηθούν ενέργειες. Για παράδειγμα, η `mac_priv_grant` καλεί το μακροεντολή [**MAC_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac_internal.h#L274), η οποία θα παραχωρήσει το ζητούμενο προνόμιο αν οποιαδήποτε πολιτική απαντήσει με 0: > > ```c > /* > * MAC_GRANT εκτελεί τον καθορισμένο έλεγχο περπατώντας τη λίστα -> * των πολιτικών και ελέγχοντας με κάθε μία πώς αισθάνεται για το -> * αίτημα. Σε αντίθεση με το MAC_CHECK, παραχωρεί αν οποιεσδήποτε πολιτικές επιστρέψουν '0', -> * και αλλιώς επιστρέφει EPERM. Σημειώστε ότι επιστρέφει την τιμή του μέσω +> * των πολιτικών και ελέγχοντας με κάθε μία σχετικά με το πώς +> * αισθάνεται για το αίτημα. Σε αντίθεση με το MAC_CHECK, παραχωρεί +> * αν οποιεσδήποτε πολιτικές επιστρέψουν '0', και αλλιώς επιστρέφει EPERM. +> * Σημειώστε ότι επιστρέφει την τιμή του μέσω του > * 'error' στο πεδίο του καλούντος. > */ > #define MAC_GRANT(check, args...) do { \ @@ -188,11 +189,11 @@ error = mac_error_select(__step_err, error); \ ### priv_check & priv_grant Αυτές οι κλήσεις προορίζονται να ελέγξουν και να παρέχουν (δεκάδες) **προνόμια** που ορίζονται στο [**bsd/sys/priv.h**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/priv.h).\ -Ορισμένος κωδικός πυρήνα θα καλούσε το `priv_check_cred()` από [**bsd/kern/kern_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_priv.c) με τα διαπιστευτήρια KAuth της διαδικασίας και έναν από τους κωδικούς προνομίων που θα καλούσε το `mac_priv_check` για να δει αν οποιαδήποτε πολιτική **αρνείται** να δώσει το προνόμιο και στη συνέχεια καλεί το `mac_priv_grant` για να δει αν οποιαδήποτε πολιτική παραχωρεί το `privilege`. +Ορισμένος κώδικας πυρήνα θα καλούσε το `priv_check_cred()` από [**bsd/kern/kern_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_priv.c) με τα διαπιστευτήρια KAuth της διαδικασίας και έναν από τους κωδικούς προνομίων που θα καλούσε το `mac_priv_check` για να δει αν οποιαδήποτε πολιτική **αρνείται** να δώσει το προνόμιο και στη συνέχεια καλεί το `mac_priv_grant` για να δει αν οποιαδήποτε πολιτική παραχωρεί το `privilege`. ### proc_check_syscall_unix -Αυτή η υποδοχή επιτρέπει την παρεμβολή σε όλες τις κλήσεις συστήματος. Στο `bsd/dev/[i386|arm]/systemcalls.c` είναι δυνατόν να δείτε τη δηλωμένη συνάρτηση [`unix_syscall`](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/dev/arm/systemcalls.c#L160C1-L167C25), η οποία περιέχει αυτόν τον κωδικό: +Αυτή η κλήση επιτρέπει την παρεμβολή σε όλες τις κλήσεις συστήματος. Στο `bsd/dev/[i386|arm]/systemcalls.c` είναι δυνατόν να δει κανείς τη δηλωμένη συνάρτηση [`unix_syscall`](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/dev/arm/systemcalls.c#L160C1-L167C25), η οποία περιέχει αυτόν τον κώδικα: ```c #if CONFIG_MACF if (__improbable(proc_syscall_filter_mask(proc) != NULL && !bitstr_test(proc_syscall_filter_mask(proc), syscode))) { diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md index d65e69d22..8ab563771 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md @@ -8,7 +8,7 @@ Οποιαδήποτε εφαρμογή έχει την **εξουσιοδότηση** **`com.apple.security.app-sandbox`** θα εκτελείται μέσα στο sandbox. **Οι δυαδικοί κώδικες της Apple** εκτελούνται συνήθως μέσα σε ένα Sandbox, και όλες οι εφαρμογές από το **App Store έχουν αυτή την εξουσιοδότηση**. Έτσι, πολλές εφαρμογές θα εκτελούνται μέσα στο sandbox. -Για να ελέγξει τι μπορεί ή δεν μπορεί να κάνει μια διαδικασία, το **Sandbox έχει hooks** σε σχεδόν οποιαδήποτε λειτουργία μπορεί να προσπαθήσει μια διαδικασία (συμπεριλαμβανομένων των περισσότερων syscalls) χρησιμοποιώντας **MACF**. Ωστόσο, **ανάλογα** με τις **εξουσιοδοτήσεις** της εφαρμογής, το Sandbox μπορεί να είναι πιο επιεικές με τη διαδικασία. +Για να ελέγξει τι μπορεί ή δεν μπορεί να κάνει μια διαδικασία, το **Sandbox έχει hooks** σε σχεδόν οποιαδήποτε λειτουργία μπορεί να προσπαθήσει μια διαδικασία (συμπεριλαμβανομένων των περισσότερων syscalls) χρησιμοποιώντας **MACF**. Ωστόσο, **ανάλογα** με τις **εξουσιοδοτήσεις** της εφαρμογής, το Sandbox μπορεί να είναι πιο επιεικής με τη διαδικασία. Ορισμένα σημαντικά στοιχεία του Sandbox είναι: @@ -30,7 +30,7 @@ drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler [...] ``` -Μέσα σε κάθε φάκελο bundle id μπορείτε να βρείτε το **plist** και τον **φάκελο Δεδομένων** της εφαρμογής με μια δομή που μιμείται τον φάκελο Home: +Μέσα σε κάθε φάκελο bundle id μπορείτε να βρείτε το **plist** και τον **Κατάλογο Δεδομένων** της εφαρμογής με μια δομή που μιμείται τον φάκελο Home: ```bash cd /Users/username/Library/Containers/com.apple.Safari ls -la @@ -106,11 +106,11 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf... [...] ``` > [!WARNING] -> Ό,τι δημιουργείται/τροποποιείται από μια εφαρμογή που είναι σε Sandbox θα αποκτήσει το **quarantine attribut**e. Αυτό θα αποτρέψει έναν χώρο sandbox ενεργοποιώντας τον Gatekeeper αν η εφαρμογή sandbox προσπαθήσει να εκτελέσει κάτι με **`open`**. +> Ό,τι δημιουργείται/τροποποιείται από μια εφαρμογή που είναι σε Sandbox θα αποκτήσει το **quarantine attribute**. Αυτό θα αποτρέψει έναν χώρο sandbox ενεργοποιώντας τον Gatekeeper αν η εφαρμογή sandbox προσπαθήσει να εκτελέσει κάτι με **`open`**. ## Sandbox Profiles -Τα Sandbox profiles είναι αρχεία ρύθμισης που υποδεικνύουν τι θα είναι **επιτρεπτό/απαγορευμένο** σε αυτό το **Sandbox**. Χρησιμοποιεί τη **Sandbox Profile Language (SBPL)**, η οποία χρησιμοποιεί τη γλώσσα προγραμματισμού [**Scheme**](). +Τα Sandbox profiles είναι αρχεία ρυθμίσεων που υποδεικνύουν τι θα είναι **επιτρεπτό/απαγορευμένο** σε αυτό το **Sandbox**. Χρησιμοποιεί τη **Sandbox Profile Language (SBPL)**, η οποία χρησιμοποιεί τη γλώσσα προγραμματισμού [**Scheme**](). Εδώ μπορείτε να βρείτε ένα παράδειγμα: ```scheme @@ -131,11 +131,11 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf... ) ``` > [!TIP] -> Δείτε αυτήν την [**έρευνα**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **για να δείτε περισσότερες ενέργειες που θα μπορούσαν να επιτραπούν ή να απορριφθούν.** +> Δείτε αυτήν την [**έρευνα**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **για να ελέγξετε περισσότερες ενέργειες που θα μπορούσαν να επιτραπούν ή να απορριφθούν.** > > Σημειώστε ότι στην συμπιεσμένη έκδοση ενός προφίλ, τα ονόματα των λειτουργιών αντικαθίστανται από τις καταχωρίσεις τους σε έναν πίνακα που είναι γνωστός από το dylib και το kext, καθιστώντας την συμπιεσμένη έκδοση πιο σύντομη και πιο δύσκολη στην ανάγνωση. -Σημαντικές **υπηρεσίες συστήματος** εκτελούνται επίσης μέσα στο δικό τους προσαρμοσμένο **sandbox**, όπως η υπηρεσία `mdnsresponder`. Μπορείτε να δείτε αυτά τα προσαρμοσμένα **προφίλ sandbox** μέσα σε: +Σημαντικές **υπηρεσίες συστήματος** εκτελούνται επίσης μέσα σε δικό τους προσαρμοσμένο **sandbox** όπως η υπηρεσία `mdnsresponder`. Μπορείτε να δείτε αυτά τα προσαρμοσμένα **προφίλ sandbox** μέσα σε: - **`/usr/share/sandbox`** - **`/System/Library/Sandbox/Profiles`** @@ -149,7 +149,7 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf... ### Παραδείγματα Προφίλ Sandbox -Για να ξεκινήσετε μια εφαρμογή με ένα **συγκεκριμένο προφίλ sandbox**, μπορείτε να χρησιμοποιήσετε: +Για να ξεκινήσετε μια εφαρμογή με ένα **συγκεκριμένο προφίλ sandbox** μπορείτε να χρησιμοποιήσετε: ```bash sandbox-exec -f example.sb /Path/To/The/Application ``` @@ -205,13 +205,13 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last Παραδείγματα παρακάμψεων: - [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html) -- [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (μπορούν να γράψουν αρχεία εκτός της απομόνωσης των οποίων το όνομα αρχίζει με `~$`). +- [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (μπορούν να γράψουν αρχεία εκτός της απομόνωσης των οποίων το όνομα ξεκινά με `~$`). ### Ιχνηλάτηση Απομόνωσης #### Μέσω προφίλ -Είναι δυνατόν να ιχνηλατήσετε όλους τους ελέγχους που εκτελεί η απομόνωση κάθε φορά που ελέγχεται μια ενέργεια. Για αυτό, απλώς δημιουργήστε το παρακάτω προφίλ: +Είναι δυνατόν να ιχνηλατηθούν όλοι οι έλεγχοι που εκτελεί η απομόνωση κάθε φορά που ελέγχεται μια ενέργεια. Για αυτό, απλώς δημιουργήστε το παρακάτω προφίλ: ```scheme:trace.sb (version 1) (trace /tmp/trace.out) @@ -253,11 +253,11 @@ sandbox-exec -f /tmp/trace.sb /bin/ls (let* ((port (open-input-string string)) (sbpl (read port))) (with-transparent-redirection (eval sbpl))))) ``` -Αυτό θα **eval την αλφαριθμητική μετά από αυτή την εξουσιοδότηση** ως προφίλ Sandbox. +Αυτό θα **eval την αλφαβητική σειρά μετά από αυτή την εξουσιοδότηση** ως προφίλ Sandbox. ### Συγκέντρωση & αποσυμπίεση ενός προφίλ Sandbox -Το **`sandbox-exec`** εργαλείο χρησιμοποιεί τις συναρτήσεις `sandbox_compile_*` από το `libsandbox.dylib`. Οι κύριες συναρτήσεις που εξάγονται είναι: `sandbox_compile_file` (αναμένει μια διαδρομή αρχείου, παράμετρος `-f`), `sandbox_compile_string` (αναμένει μια αλφαριθμητική, παράμετρος `-p`), `sandbox_compile_name` (αναμένει ένα όνομα κοντέινερ, παράμετρος `-n`), `sandbox_compile_entitlements` (αναμένει plist εξουσιοδοτήσεων). +Το **`sandbox-exec`** εργαλείο χρησιμοποιεί τις συναρτήσεις `sandbox_compile_*` από `libsandbox.dylib`. Οι κύριες συναρτήσεις που εξάγονται είναι: `sandbox_compile_file` (αναμένει μια διαδρομή αρχείου, παράμετρος `-f`), `sandbox_compile_string` (αναμένει μια αλφαβητική σειρά, παράμετρος `-p`), `sandbox_compile_name` (αναμένει ένα όνομα κοντέινερ, παράμετρος `-n`), `sandbox_compile_entitlements` (αναμένει plist εξουσιοδοτήσεων). Αυτή η αντίστροφη και [**ανοιχτού κώδικα έκδοση του εργαλείου sandbox-exec**](https://newosxbook.com/src.jl?tree=listings&file=/sandbox_exec.c) επιτρέπει στο **`sandbox-exec`** να γράφει σε ένα αρχείο το συγκεντρωμένο προφίλ sandbox. @@ -287,8 +287,8 @@ macos-sandbox-debug-and-bypass/ Οι επεκτάσεις αποθηκεύονται στη δεύτερη υποδοχή ετικέτας MACF που είναι προσβάσιμη από τα διαπιστευτήρια της διαδικασίας. Το ακόλουθο **`sbtool`** μπορεί να έχει πρόσβαση σε αυτές τις πληροφορίες. -Σημειώστε ότι οι επεκτάσεις συνήθως χορηγούνται από επιτρεπόμενες διαδικασίες, για παράδειγμα, το `tccd` θα χορηγήσει το token επέκτασης του `com.apple.tcc.kTCCServicePhotos` όταν μια διαδικασία προσπαθήσει να έχει πρόσβαση στις φωτογραφίες και επιτρεπόταν σε ένα μήνυμα XPC. Στη συνέχεια, η διαδικασία θα χρειαστεί να καταναλώσει το token επέκτασης ώστε να προστεθεί σε αυτήν.\ -Σημειώστε ότι τα tokens επεκτάσεων είναι μακροχρόνια δεκαεξαδικά που κωδικοποιούν τις χορηγούμενες άδειες. Ωστόσο, δεν έχουν τον επιτρεπόμενο PID σκληρά κωδικοποιημένο, πράγμα που σημαίνει ότι οποιαδήποτε διαδικασία με πρόσβαση στο token μπορεί να **καταναλωθεί από πολλές διαδικασίες**. +Σημειώστε ότι οι επεκτάσεις συνήθως χορηγούνται από επιτρεπόμενες διαδικασίες, για παράδειγμα, το `tccd` θα χορηγήσει το επεκτατικό token του `com.apple.tcc.kTCCServicePhotos` όταν μια διαδικασία προσπαθήσει να έχει πρόσβαση στις φωτογραφίες και επιτρεπόταν σε ένα μήνυμα XPC. Στη συνέχεια, η διαδικασία θα χρειαστεί να καταναλώσει το επεκτατικό token ώστε να προστεθεί σε αυτήν.\ +Σημειώστε ότι τα επεκτατικά tokens είναι μακροχρόνια δεκαεξαδικά που κωδικοποιούν τις χορηγούμενες άδειες. Ωστόσο, δεν έχουν τον επιτρεπόμενο PID σκληρά κωδικοποιημένο, πράγμα που σημαίνει ότι οποιαδήποτε διαδικασία με πρόσβαση στο token μπορεί να **καταναλωθεί από πολλές διαδικασίες**. Σημειώστε ότι οι επεκτάσεις σχετίζονται πολύ και με τις εξουσιοδοτήσεις, οπότε η κατοχή ορισμένων εξουσιοδοτήσεων μπορεί αυτόματα να χορηγήσει ορισμένες επεκτάσεις. @@ -317,12 +317,12 @@ sbtool all Αυτή η κλήση συστήματος (#381) αναμένει ένα string ως πρώτο επιχείρημα που θα υποδείξει το module που θα εκτελεστεί, και στη συνέχεια έναν κωδικό ως δεύτερο επιχείρημα που θα υποδείξει τη συνάρτηση που θα εκτελεστεί. Στη συνέχεια, το τρίτο επιχείρημα θα εξαρτάται από τη συνάρτηση που εκτελείται. -Η κλήση συνάρτησης `___sandbox_ms` περιτυλίγει το `mac_syscall` υποδεικνύοντας στο πρώτο επιχείρημα `"Sandbox"` όπως και η `___sandbox_msp` είναι μια περιτύλιξη του `mac_set_proc` (#387). Στη συνέχεια, μερικοί από τους υποστηριζόμενους κωδικούς από την `___sandbox_ms` μπορούν να βρεθούν σε αυτόν τον πίνακα: +Η κλήση συνάρτησης `___sandbox_ms` περιτυλίγει το `mac_syscall` υποδεικνύοντας στο πρώτο επιχείρημα `"Sandbox"` όπως το `___sandbox_msp` είναι μια περιτύλιξη του `mac_set_proc` (#387). Στη συνέχεια, μερικοί από τους υποστηριζόμενους κωδικούς από το `___sandbox_ms` μπορούν να βρεθούν σε αυτόν τον πίνακα: - **set_profile (#0)**: Εφαρμόστε ένα συμπιεσμένο ή ονομασμένο προφίλ σε μια διαδικασία. - **platform_policy (#1)**: Επιβάλλετε ελέγχους πολιτικής συγκεκριμένης πλατφόρμας (διαφέρει μεταξύ macOS και iOS). - **check_sandbox (#2)**: Εκτελέστε έναν χειροκίνητο έλεγχο μιας συγκεκριμένης λειτουργίας sandbox. -- **note (#3)**: Προσθέτει μια σημείωση σε ένα Sandbox +- **note (#3)**: Προσθέτει μια σημείωση σε ένα Sandbox. - **container (#4)**: Συνδέστε μια σημείωση σε ένα sandbox, συνήθως για αποσφαλμάτωση ή αναγνώριση. - **extension_issue (#5)**: Δημιουργήστε μια νέα επέκταση για μια διαδικασία. - **extension_consume (#6)**: Καταναλώστε μια δεδομένη επέκταση. @@ -337,7 +337,7 @@ sbtool all - **sandbox_user_state_item_buffer_send (#15)**: (iOS 10+) Ορίστε μεταδεδομένα λειτουργίας χρήστη στο sandbox. - **inspect (#16)**: Παρέχετε πληροφορίες αποσφαλμάτωσης σχετικά με μια διαδικασία που είναι sandboxed. - **dump (#18)**: (macOS 11) Εκτυπώστε το τρέχον προφίλ ενός sandbox για ανάλυση. -- **vtrace (#19)**: Ιχνηλατήστε τις λειτουργίες sandbox για παρακολούθηση ή αποσφαλμάτωση. +- **vtrace (#19)**: Παρακολουθήστε τις λειτουργίες sandbox για παρακολούθηση ή αποσφαλμάτωση. - **builtin_profile_deactivate (#20)**: (macOS < 11) Απενεργοποιήστε τα ονομασμένα προφίλ (π.χ., `pe_i_can_has_debugger`). - **check_bulk (#21)**: Εκτελέστε πολλές λειτουργίες `sandbox_check` σε μία μόνο κλήση. - **reference_retain_by_audit_token (#28)**: Δημιουργήστε μια αναφορά για ένα audit token για χρήση σε ελέγχους sandbox. @@ -354,25 +354,25 @@ sbtool all - **`hook_policy_init`**: Συνδέει το `mpo_policy_init` και καλείται μετά το `mac_policy_register`. Εκτελεί τις περισσότερες από τις αρχικοποιήσεις του Sandbox. Επίσης, αρχικοποιεί το SIP. - **`hook_policy_initbsd`**: Ρυθμίζει τη διεπαφή sysctl καταχωρώντας `security.mac.sandbox.sentinel`, `security.mac.sandbox.audio_active` και `security.mac.sandbox.debug_mode` (αν έχει εκκινήσει με `PE_i_can_has_debugger`). -- **`hook_policy_syscall`**: Καλείται από το `mac_syscall` με "Sandbox" ως πρώτο επιχείρημα και κωδικό που υποδεικνύει τη λειτουργία στο δεύτερο. Χρησιμοποιείται ένα switch για να βρεθεί ο κωδικός που θα εκτελεστεί σύμφωνα με τον ζητούμενο κωδικό. +- **`hook_policy_syscall`**: Καλείται από το `mac_syscall` με "Sandbox" ως πρώτο επιχείρημα και κωδικό που υποδεικνύει τη λειτουργία στο δεύτερο. Χρησιμοποιείται μια εναλλαγή για να βρεθεί ο κωδικός που θα εκτελεστεί σύμφωνα με τον ζητούμενο κωδικό. ### MACF Hooks **`Sandbox.kext`** χρησιμοποιεί περισσότερους από εκατό hooks μέσω MACF. Οι περισσότεροι από τους hooks θα ελέγξουν απλώς ορισμένες τυπικές περιπτώσεις που επιτρέπουν την εκτέλεση της ενέργειας, αν όχι, θα καλέσουν **`cred_sb_evalutate`** με τα **διαπιστευτήρια** από το MACF και έναν αριθμό που αντιστοιχεί στην **λειτουργία** που θα εκτελεστεί και ένα **buffer** για την έξοδο. -Ένα καλό παράδειγμα αυτού είναι η συνάρτηση **`_mpo_file_check_mmap`** που έχει συνδεθεί με **`mmap`** και η οποία θα αρχίσει να ελέγχει αν η νέα μνήμη θα είναι εγγράψιμη (και αν όχι θα επιτρέψει την εκτέλεση), στη συνέχεια θα ελέγξει αν χρησιμοποιείται για την κοινή μνήμη dyld και αν ναι θα επιτρέψει την εκτέλεση, και τελικά θα καλέσει **`sb_evaluate_internal`** (ή μία από τις περιτυλίξεις της) για να εκτελέσει περαιτέρω ελέγχους επιτρεπόμενης πρόσβασης. +Ένα καλό παράδειγμα αυτού είναι η συνάρτηση **`_mpo_file_check_mmap`** που συνδέει το **`mmap`** και η οποία θα αρχίσει να ελέγχει αν η νέα μνήμη θα είναι εγγράψιμη (και αν όχι θα επιτρέψει την εκτέλεση), στη συνέχεια θα ελέγξει αν χρησιμοποιείται για την κοινή μνήμη dyld και αν ναι θα επιτρέψει την εκτέλεση, και τελικά θα καλέσει **`sb_evaluate_internal`** (ή μία από τις περιτυλίξεις της) για να εκτελέσει περαιτέρω ελέγχους επιτρεπόμενης πρόσβασης. Επιπλέον, από τους εκατοντάδες hooks που χρησιμοποιεί το Sandbox, υπάρχουν 3 που είναι ιδιαίτερα ενδιαφέροντα: -- `mpo_proc_check_for`: Εφαρμόζει το προφίλ αν χρειάζεται και αν δεν έχει εφαρμοστεί προηγουμένως +- `mpo_proc_check_for`: Εφαρμόζει το προφίλ αν χρειάζεται και αν δεν έχει εφαρμοστεί προηγουμένως. - `mpo_vnode_check_exec`: Καλείται όταν μια διαδικασία φορτώνει το σχετικό δυαδικό, στη συνέχεια εκτελείται έλεγχος προφίλ και επίσης έλεγχος που απαγορεύει τις εκτελέσεις SUID/SGID. -- `mpo_cred_label_update_execve`: Αυτό καλείται όταν ανατίθεται η ετικέτα. Αυτό είναι το πιο χρονοβόρο καθώς καλείται όταν το δυαδικό έχει φορτωθεί πλήρως αλλά δεν έχει εκτελεστεί ακόμη. Θα εκτελέσει ενέργειες όπως η δημιουργία του αντικειμένου sandbox, η σύνδεση της δομής sandbox στα διαπιστευτήρια kauth, η αφαίρεση πρόσβασης σε mach ports... +- `mpo_cred_label_update_execve`: Αυτό καλείται όταν ανατίθεται η ετικέτα. Αυτό είναι το μεγαλύτερο καθώς καλείται όταν το δυαδικό έχει φορτωθεί πλήρως αλλά δεν έχει εκτελεστεί ακόμη. Θα εκτελέσει ενέργειες όπως η δημιουργία του αντικειμένου sandbox, η σύνδεση της δομής sandbox στα διαπιστευτήρια kauth, η αφαίρεση πρόσβασης σε mach ports... Σημειώστε ότι **`_cred_sb_evalutate`** είναι μια περιτύλιξη πάνω από **`sb_evaluate_internal`** και αυτή η συνάρτηση παίρνει τα διαπιστευτήρια που περνιούνται και στη συνέχεια εκτελεί την αξιολόγηση χρησιμοποιώντας τη συνάρτηση **`eval`** που συνήθως αξιολογεί το **προφίλ πλατφόρμας** που εφαρμόζεται από προεπιλογή σε όλες τις διαδικασίες και στη συνέχεια το **συγκεκριμένο προφίλ διαδικασίας**. Σημειώστε ότι το προφίλ πλατφόρμας είναι ένα από τα κύρια στοιχεία του **SIP** στο macOS. ## Sandboxd -Το Sandbox έχει επίσης έναν daemon χρήστη που εκθέτει την υπηρεσία XPC Mach `com.apple.sandboxd` και δένει την ειδική θύρα 14 (`HOST_SEATBELT_PORT`) την οποία χρησιμοποιεί η επέκταση πυρήνα για να επικοινωνήσει μαζί της. Εκθέτει ορισμένες συναρτήσεις χρησιμοποιώντας MIG. +Το Sandbox έχει επίσης έναν daemon χρήστη που εκτελεί την υπηρεσία XPC Mach `com.apple.sandboxd` και δεσμεύει την ειδική θύρα 14 (`HOST_SEATBELT_PORT`) την οποία χρησιμοποιεί η επέκταση πυρήνα για να επικοινωνήσει μαζί της. Εκθέτει ορισμένες συναρτήσεις χρησιμοποιώντας MIG. ## References diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md index 3d3348ace..43d4cf39e 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md @@ -94,7 +94,7 @@ EOF {{#endtab}} {{#endtabs}} -4. Υπογράψτε την εφαρμογή (χρειάζεται να δημιουργήσετε ένα πιστοποιητικό στο keychain) +4. Υπογράψτε την εφαρμογή (πρέπει να δημιουργήσετε ένα πιστοποιητικό στο keychain) ```bash codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app ./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md index 69171af42..ea8e67dfc 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md @@ -10,7 +10,7 @@ Ο μεταγλωττιστής θα συνδέσει το `/usr/lib/libSystem.B.dylib` με το δυαδικό αρχείο. -Στη συνέχεια, **`libSystem.B`** θα καλεί άλλες πολλές συναρτήσεις μέχρι να στείλει η **`xpc_pipe_routine`** τις εξουσιοδοτήσεις της εφαρμογής στο **`securityd`**. Το Securityd ελέγχει αν η διαδικασία θα πρέπει να είναι σε καραντίνα μέσα στο Sandbox, και αν ναι, θα μπει σε καραντίνα.\ +Στη συνέχεια, **`libSystem.B`** θα καλεί άλλες πολλές συναρτήσεις μέχρι να στείλει η **`xpc_pipe_routine`** τις εξουσιοδοτήσεις της εφαρμογής στο **`securityd`**. Ο Securityd ελέγχει αν η διαδικασία θα πρέπει να είναι σε καραντίνα μέσα στο Sandbox, και αν ναι, θα μπει σε καραντίνα.\ Τέλος, το sandbox θα ενεργοποιηθεί με μια κλήση στο **`__sandbox_ms`** που θα καλέσει το **`__mac_syscall`**. ## Possible Bypasses @@ -24,7 +24,7 @@ > [!CAUTION] > Επομένως, αυτή τη στιγμή, αν είστε απλώς ικανοί να δημιουργήσετε έναν φάκελο με όνομα που τελειώνει σε **`.app`** χωρίς το quarantine attribute, μπορείτε να διαφύγετε από το sandbox γιατί το macOS μόνο **ελέγχει** το **quarantine** attribute στον **φάκελο `.app`** και στο **κύριο εκτελέσιμο** (και θα δείξουμε το κύριο εκτελέσιμο στο **`/bin/bash`**). > -> Σημειώστε ότι αν ένα πακέτο .app έχει ήδη εξουσιοδοτηθεί να εκτελείται (έχει ένα quarantine xttr με την εξουσιοδότηση να εκτελείται), μπορείτε επίσης να το εκμεταλλευτείτε... εκτός αν τώρα δεν μπορείτε να γράψετε μέσα σε **`.app`** πακέτα εκτός αν έχετε κάποιες προνομιακές άδειες TCC (που δεν θα έχετε μέσα σε ένα sandbox υψηλής ασφάλειας). +> Σημειώστε ότι αν ένα πακέτο .app έχει ήδη εξουσιοδοτηθεί να εκτελείται (έχει ένα quarantine xttr με την εξουσιοδότηση να εκτελείται), θα μπορούσατε επίσης να το εκμεταλλευτείτε... εκτός αν τώρα δεν μπορείτε να γράψετε μέσα σε **`.app`** πακέτα εκτός αν έχετε κάποιες προνομιακές άδειες TCC (που δεν θα έχετε μέσα σε ένα sandbox υψηλής ασφάλειας). ### Abusing Open functionality @@ -37,7 +37,7 @@ macos-office-sandbox-bypasses.md ### Launch Agents/Daemons Ακόμα και αν μια εφαρμογή είναι **σχεδιασμένη να είναι σε sandbox** (`com.apple.security.app-sandbox`), είναι δυνατόν να παρακαμφθεί το sandbox αν εκτελείται από έναν LaunchAgent (`~/Library/LaunchAgents`) για παράδειγμα.\ -Όπως εξηγήθηκε σε [**αυτή την ανάρτηση**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818), αν θέλετε να αποκτήσετε επιμονή με μια εφαρμογή που είναι σε sandbox μπορείτε να την κάνετε να εκτελείται αυτόματα ως LaunchAgent και ίσως να εισάγετε κακόβουλο κώδικα μέσω μεταβλητών περιβάλλοντος DyLib. +Όπως εξηγήθηκε σε [**αυτή την ανάρτηση**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818), αν θέλετε να αποκτήσετε επιμονή με μια εφαρμογή που είναι σε sandbox, θα μπορούσατε να την κάνετε να εκτελείται αυτόματα ως LaunchAgent και ίσως να εισάγετε κακόβουλο κώδικα μέσω μεταβλητών περιβάλλοντος DyLib. ### Abusing Auto Start Locations @@ -103,7 +103,7 @@ checkService(serviceName.UTF8String); find /System/Library/Frameworks -name "*.xpc" find /System/Library/PrivateFrameworks -name "*.xpc" ``` -Μερικά παραδείγματα που εκμεταλλεύονται αυτή την τεχνική μπορούν να βρεθούν στην [**πρωτότυπη αναφορά**](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/), ωστόσο, τα παρακάτω είναι μερικά συνοπτικά παραδείγματα. +Μερικά παραδείγματα κατάχρησης αυτής της τεχνικής μπορούν να βρεθούν στην [**αρχική αναφορά**](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/), ωστόσο, τα παρακάτω είναι μερικά συνοπτικά παραδείγματα. #### /System/Library/PrivateFrameworks/StorageKit.framework/XPCServices/storagekitfsrunner.xpc @@ -130,7 +130,7 @@ NSLog(@"run task result:%@, error:%@", bSucc, error); ``` #### /System/Library/PrivateFrameworks/AudioAnalyticsInternal.framework/XPCServices/AudioAnalyticsHelperService.xpc -Αυτή η υπηρεσία XPC επέτρεπε σε κάθε πελάτη επιστρέφοντας πάντα ΝΑΙ και η μέθοδος `createZipAtPath:hourThreshold:withReply:` ουσιαστικά επέτρεπε να υποδειχθεί η διαδρομή σε έναν φάκελο προς συμπίεση και θα τον συμπίεζε σε ένα αρχείο ZIP. +Αυτή η υπηρεσία XPC επέτρεπε σε κάθε πελάτη επιστρέφοντας πάντα ΝΑΙ και η μέθοδος `createZipAtPath:hourThreshold:withReply:` ουσιαστικά επέτρεπε να υποδείξει τη διαδρομή σε έναν φάκελο για συμπίεση και θα τον συμπίεζε σε ένα αρχείο ZIP. Επομένως, είναι δυνατό να δημιουργηθεί μια ψεύτικη δομή φακέλου εφαρμογής, να συμπιεστεί, στη συνέχεια να αποσυμπιεστεί και να εκτελεστεί για να ξεφύγει από το sandbox καθώς τα νέα αρχεία δεν θα έχουν το χαρακτηριστικό καραντίνας. @@ -173,7 +173,7 @@ break; ``` #### /System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices/ShortcutsFileAccessHelper.xpc -Αυτή η υπηρεσία XPC επιτρέπει την παροχή δικαιωμάτων ανάγνωσης και εγγραφής σε μια αυθαίρετη διεύθυνση URL στον πελάτη XPC μέσω της μεθόδου `extendAccessToURL:completion:` που δέχεται οποιαδήποτε σύνδεση. Καθώς η υπηρεσία XPC έχει FDA, είναι δυνατόν να καταχραστούν αυτά τα δικαιώματα για να παρακαμφθεί εντελώς το TCC. +Αυτή η υπηρεσία XPC επιτρέπει την παροχή πρόσβασης ανάγνωσης και εγγραφής σε μια αυθαίρετη διεύθυνση URL στον πελάτη XPC μέσω της μεθόδου `extendAccessToURL:completion:` που δέχεται οποιαδήποτε σύνδεση. Καθώς η υπηρεσία XPC έχει FDA, είναι δυνατόν να καταχραστούν αυτές οι άδειες για να παρακαμφθεί εντελώς το TCC. Η εκμετάλλευση ήταν: ```objectivec @@ -219,7 +219,7 @@ ld: dynamic executables or dylibs must link with libSystem.dylib for architectur ``` ### Όχι κληρονομούμενοι περιορισμοί -Όπως εξηγείται στο **[bonus of this writeup](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/)**, ένας περιορισμός sandbox όπως: +Όπως εξηγήθηκε στο **[μπόνους αυτού του κειμένου](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/)**, ένας περιορισμός sandbox όπως: ``` (version 1) (allow default) @@ -372,7 +372,7 @@ gcc -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker Info.pli codesign -s --entitlements entitlements.xml sand ``` > [!CAUTION] -> Η εφαρμογή θα προσπαθήσει να **διαβάσει** το αρχείο **`~/Desktop/del.txt`**, το οποίο **η Sandbox δεν θα επιτρέψει**.\ +> Η εφαρμογή θα προσπαθήσει να **διαβάσει** το αρχείο **`~/Desktop/del.txt`**, το οποίο η **Sandbox δεν θα επιτρέψει**.\ > Δημιουργήστε ένα αρχείο εκεί καθώς μόλις παρακαμφθεί η Sandbox, θα μπορεί να το διαβάσει: > > ```bash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md index 735b8e982..63a220690 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md @@ -2,51 +2,51 @@ {{#include ../../../../../banners/hacktricks-training.md}} -### Word Sandbox bypass via Launch Agents +### Παράκαμψη Sandbox του Word μέσω Launch Agents -Η εφαρμογή χρησιμοποιεί ένα **custom Sandbox** χρησιμοποιώντας την εξουσία **`com.apple.security.temporary-exception.sbpl`** και αυτό το custom sandbox επιτρέπει την εγγραφή αρχείων οπουδήποτε, αρκεί το όνομα του αρχείου να ξεκινά με `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))` +Η εφαρμογή χρησιμοποιεί ένα **προσαρμοσμένο Sandbox** χρησιμοποιώντας την εξουσιοδότηση **`com.apple.security.temporary-exception.sbpl`** και αυτό το προσαρμοσμένο sandbox επιτρέπει τη γραφή αρχείων οπουδήποτε, αρκεί το όνομα του αρχείου να ξεκινά με `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))` -Επομένως, η εκμετάλλευση ήταν τόσο εύκολη όσο το **να γράψετε ένα `plist`** LaunchAgent στο `~/Library/LaunchAgents/~$escape.plist`. +Επομένως, η παράκαμψη ήταν τόσο εύκολη όσο **η γραφή ενός `plist`** LaunchAgent στο `~/Library/LaunchAgents/~$escape.plist`. Δείτε την [**αρχική αναφορά εδώ**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/). -### Word Sandbox bypass via Login Items and zip +### Παράκαμψη Sandbox του Word μέσω Login Items και zip -Θυμηθείτε ότι από την πρώτη εκμετάλλευση, το Word μπορεί να γράψει αυθαίρετα αρχεία των οποίων το όνομα ξεκινά με `~$`, αν και μετά την επιδιόρθωση της προηγούμενης ευπάθειας δεν ήταν δυνατή η εγγραφή στο `/Library/Application Scripts` ή στο `/Library/LaunchAgents`. +Θυμηθείτε ότι από την πρώτη παράκαμψη, το Word μπορεί να γράψει αυθαίρετα αρχεία των οποίων το όνομα ξεκινά με `~$`, αν και μετά την επιδιόρθωση της προηγούμενης ευπάθειας δεν ήταν δυνατή η γραφή στο `/Library/Application Scripts` ή στο `/Library/LaunchAgents`. Ανακαλύφθηκε ότι από μέσα στο sandbox είναι δυνατό να δημιουργηθεί ένα **Login Item** (εφαρμογές που θα εκτελούνται όταν ο χρήστης συνδέεται). Ωστόσο, αυτές οι εφαρμογές **δεν θα εκτελούνται εκτός αν** είναι **notarized** και **δεν είναι δυνατή η προσθήκη args** (οπότε δεν μπορείτε απλά να εκτελέσετε ένα reverse shell χρησιμοποιώντας **`bash`**). -Από την προηγούμενη εκμετάλλευση του Sandbox, η Microsoft απενεργοποίησε την επιλογή να γράφει αρχεία στο `~/Library/LaunchAgents`. Ωστόσο, ανακαλύφθηκε ότι αν βάλετε ένα **zip αρχείο ως Login Item**, το `Archive Utility` θα **αποσυμπιέσει** απλώς το αρχείο στην τρέχουσα τοποθεσία του. Έτσι, επειδή από προεπιλογή ο φάκελος `LaunchAgents` από το `~/Library` δεν δημιουργείται, ήταν δυνατό να **zip ένα plist στο `LaunchAgents/~$escape.plist`** και να **τοποθετήσετε** το zip αρχείο στο **`~/Library`** έτσι ώστε όταν αποσυμπιεστεί να φτάσει στον προορισμό επιμονής. +Από την προηγούμενη παράκαμψη Sandbox, η Microsoft απενεργοποίησε την επιλογή να γράφει αρχεία στο `~/Library/LaunchAgents`. Ωστόσο, ανακαλύφθηκε ότι αν βάλετε ένα **zip αρχείο ως Login Item**, το `Archive Utility` θα **αποσυμπιέσει** απλώς το αρχείο στην τρέχουσα τοποθεσία του. Έτσι, επειδή από προεπιλογή ο φάκελος `LaunchAgents` από το `~/Library` δεν δημιουργείται, ήταν δυνατό να **zip ένα plist στο `LaunchAgents/~$escape.plist`** και να **τοποθετήσετε** το zip αρχείο στο **`~/Library`**, έτσι ώστε όταν αποσυμπιεστεί να φτάσει στον προορισμό επιμονής. Δείτε την [**αρχική αναφορά εδώ**](https://objective-see.org/blog/blog_0x4B.html). -### Word Sandbox bypass via Login Items and .zshenv +### Παράκαμψη Sandbox του Word μέσω Login Items και .zshenv -(Θυμηθείτε ότι από την πρώτη εκμετάλλευση, το Word μπορεί να γράψει αυθαίρετα αρχεία των οποίων το όνομα ξεκινά με `~$`). +(Θυμηθείτε ότι από την πρώτη παράκαμψη, το Word μπορεί να γράψει αυθαίρετα αρχεία των οποίων το όνομα ξεκινά με `~$`). Ωστόσο, η προηγούμενη τεχνική είχε έναν περιορισμό, αν ο φάκελος **`~/Library/LaunchAgents`** υπάρχει επειδή κάποιο άλλο λογισμικό τον δημιούργησε, θα αποτύχει. Έτσι, ανακαλύφθηκε μια διαφορετική αλυσίδα Login Items για αυτό. -Ένας επιτιθέμενος θα μπορούσε να δημιουργήσει τα αρχεία **`.bash_profile`** και **`.zshenv`** με το payload για εκτέλεση και στη συνέχεια να τα zip και **να γράψει το zip στον φάκελο του θύματος**: **`~/~$escape.zip`**. +Ένας επιτιθέμενος θα μπορούσε να δημιουργήσει τα αρχεία **`.bash_profile`** και **`.zshenv`** με το payload για εκτέλεση και στη συνέχεια να τα zip και **να γράψει το zip στο φάκελο του θύματος**: **`~/~$escape.zip`**. -Στη συνέχεια, προσθέστε το zip αρχείο στα **Login Items** και στη συνέχεια την εφαρμογή **`Terminal`**. Όταν ο χρήστης ξανασυνδεθεί, το zip αρχείο θα αποσυμπιεστεί στον φάκελο του χρήστη, αντικαθιστώντας **`.bash_profile`** και **`.zshenv`** και επομένως, το τερματικό θα εκτελέσει ένα από αυτά τα αρχεία (ανάλογα με το αν χρησιμοποιείται bash ή zsh). +Στη συνέχεια, προσθέστε το zip αρχείο στα **Login Items** και στη συνέχεια την εφαρμογή **`Terminal`**. Όταν ο χρήστης ξανασυνδεθεί, το zip αρχείο θα αποσυμπιεστεί στο φάκελο του χρήστη, αντικαθιστώντας **`.bash_profile`** και **`.zshenv`** και επομένως, το τερματικό θα εκτελέσει ένα από αυτά τα αρχεία (ανάλογα με το αν χρησιμοποιείται bash ή zsh). Δείτε την [**αρχική αναφορά εδώ**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c). -### Word Sandbox Bypass with Open and env variables +### Παράκαμψη Sandbox του Word με Open και env μεταβλητές -Από τις διαδικασίες που είναι sandboxed είναι ακόμα δυνατό να καλέσετε άλλες διαδικασίες χρησιμοποιώντας το **`open`** utility. Επιπλέον, αυτές οι διαδικασίες θα εκτελούνται **μέσα στο δικό τους sandbox**. +Από τις διαδικασίες που είναι σε sandbox είναι ακόμα δυνατό να προσκαλέσετε άλλες διαδικασίες χρησιμοποιώντας το **`open`** utility. Επιπλέον, αυτές οι διαδικασίες θα εκτελούνται **μέσα στο δικό τους sandbox**. -Ανακαλύφθηκε ότι το open utility έχει την επιλογή **`--env`** για να εκτελέσει μια εφαρμογή με **συγκεκριμένες env** μεταβλητές. Επομένως, ήταν δυνατό να δημιουργηθεί το **`.zshenv` αρχείο** μέσα σε έναν φάκελο **μέσα** στο **sandbox** και να χρησιμοποιηθεί το `open` με `--env` ρυθμίζοντας τη **μεταβλητή `HOME`** σε αυτόν τον φάκελο ανοίγοντας την εφαρμογή `Terminal`, η οποία θα εκτελέσει το αρχείο `.zshenv` (για κάποιο λόγο ήταν επίσης απαραίτητο να ρυθμιστεί η μεταβλητή `__OSINSTALL_ENVIROMENT`). +Ανακαλύφθηκε ότι το open utility έχει την επιλογή **`--env`** για να εκτελεί μια εφαρμογή με **συγκεκριμένες env** μεταβλητές. Επομένως, ήταν δυνατό να δημιουργηθεί το **`.zshenv` αρχείο** μέσα σε έναν φάκελο **μέσα** στο **sandbox** και να χρησιμοποιηθεί το `open` με `--env` ρυθμίζοντας τη **μεταβλητή `HOME`** σε αυτόν τον φάκελο ανοίγοντας την εφαρμογή `Terminal`, η οποία θα εκτελέσει το αρχείο `.zshenv` (για κάποιο λόγο ήταν επίσης απαραίτητο να ρυθμιστεί η μεταβλητή `__OSINSTALL_ENVIROMENT`). Δείτε την [**αρχική αναφορά εδώ**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/). -### Word Sandbox Bypass with Open and stdin +### Παράκαμψη Sandbox του Word με Open και stdin -Το **`open`** utility υποστήριξε επίσης την παράμετρο **`--stdin`** (και μετά την προηγούμενη εκμετάλλευση δεν ήταν πλέον δυνατή η χρήση του `--env`). +Το **`open`** utility υποστήριξε επίσης την παράμετρο **`--stdin`** (και μετά την προηγούμενη παράκαμψη δεν ήταν πλέον δυνατή η χρήση του `--env`). -Το θέμα είναι ότι ακόμη και αν το **`python`** ήταν υπογεγραμμένο από την Apple, **δεν θα εκτελέσει** ένα σενάριο με το **`quarantine`** χαρακτηριστικό. Ωστόσο, ήταν δυνατό να του περάσετε ένα σενάριο από stdin, οπότε δεν θα ελέγξει αν ήταν σε καραντίνα ή όχι: +Το θέμα είναι ότι ακόμη και αν το **`python`** ήταν υπογεγραμμένο από την Apple, **δεν θα εκτελέσει** ένα σενάριο με το **`quarantine`** χαρακτηριστικό. Ωστόσο, ήταν δυνατό να του περάσετε ένα σενάριο από stdin, έτσι ώστε να μην ελέγξει αν ήταν σε καραντίνα ή όχι: 1. Ρίξτε ένα **`~$exploit.py`** αρχείο με αυθαίρετες εντολές Python. -2. Εκτελέστε _open_ **`–stdin='~$exploit.py' -a Python`**, το οποίο εκτελεί την εφαρμογή Python με το ρίχτηκε αρχείο μας να χρησιμεύει ως τυπική είσοδος. Η Python εκτελεί ευτυχώς τον κώδικά μας, και καθώς είναι μια παιδική διαδικασία του _launchd_, δεν δεσμεύεται από τους κανόνες του sandbox του Word. +2. Εκτελέστε _open_ **`–stdin='~$exploit.py' -a Python`**, το οποίο εκτελεί την εφαρμογή Python με το ρίχτηκε αρχείο μας να χρησιμεύει ως τυπική είσοδος. Η Python εκτελεί ευτυχώς τον κώδικά μας, και καθώς είναι μια παιδική διαδικασία του _launchd_, δεν υπόκειται στους κανόνες sandbox του Word. {{#include ../../../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md index 8177844d7..adb4dd72a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md @@ -11,7 +11,7 @@ - **/sbin** - **/usr** -Οι κανόνες που διέπουν τη συμπεριφορά του SIP ορίζονται στο αρχείο ρύθμισης που βρίσκεται στο **`/System/Library/Sandbox/rootless.conf`**. Μέσα σε αυτό το αρχείο, οι διαδρομές που προηγούνται από ένα αστερίσκο (\*) αναφέρονται ως εξαιρέσεις από τους αυστηρούς περιορισμούς του SIP. +Οι κανόνες που διέπουν τη συμπεριφορά του SIP ορίζονται στο αρχείο ρύθμισης που βρίσκεται στο **`/System/Library/Sandbox/rootless.conf`**. Μέσα σε αυτό το αρχείο, οι διαδρομές που προηγούνται από ένα αστερίσκο (\*) αναφέρονται ως εξαιρέσεις στους κατά τα άλλα αυστηρούς περιορισμούς του SIP. Σκεφτείτε το παρακάτω παράδειγμα: ```javascript @@ -84,7 +84,7 @@ csrutil enable --without debug - `com.apple.rootless.xpc.effective-root`: Root μέσω launchd XPC - `com.apple.rootless.restricted-block-devices`: Πρόσβαση σε ακατέργαστες συσκευές μπλοκ - `com.apple.rootless.internal.installer-equivalent`: Απεριόριστη πρόσβαση στο σύστημα αρχείων -- `com.apple.rootless.restricted-nvram-variables[.heritable]`: Πλήρης πρόσβαση σε NVRAM +- `com.apple.rootless.restricted-nvram-variables[.heritable]`: Πλήρης πρόσβαση στο NVRAM - `com.apple.rootless.storage.label`: Τροποποίηση αρχείων που περιορίζονται από το com.apple.rootless xattr με την αντίστοιχη ετικέτα - `com.apple.rootless.volume.VM.label`: Διατήρηση VM swap στον τόμο @@ -94,16 +94,16 @@ csrutil enable --without debug - **Πρόσβαση σε Δεδομένα Χρήστη**: Διαβάστε ευαίσθητα δεδομένα χρήστη όπως αλληλογραφία, μηνύματα και ιστορικό Safari από όλους τους λογαριασμούς χρηστών. - **Παράκαμψη TCC**: Άμεση χειραγώγηση της βάσης δεδομένων TCC (Διαφάνεια, Συναίνεση και Έλεγχος) για να παραχωρήσετε μη εξουσιοδοτημένη πρόσβαση στην κάμερα, το μικρόφωνο και άλλους πόρους. -- **Καθ establishment Persistence**: Τοποθέτηση κακόβουλου λογισμικού σε τοποθεσίες προστατευμένες από SIP, καθιστώντας το ανθεκτικό στην αφαίρεση, ακόμη και από δικαιώματα root. Αυτό περιλαμβάνει επίσης τη δυνατότητα παραποίησης του Εργαλείου Αφαίρεσης Κακόβουλου Λογισμικού (MRT). +- **Καθιέρωση Επιμονής**: Τοποθέτηση κακόβουλου λογισμικού σε τοποθεσίες προστατευμένες από SIP, καθιστώντας το ανθεκτικό στην αφαίρεση, ακόμη και από δικαιώματα root. Αυτό περιλαμβάνει επίσης τη δυνατότητα να παραβιάσετε το Εργαλείο Αφαίρεσης Κακόβουλου Λογισμικού (MRT). - **Φόρτωση Επεκτάσεων Πυρήνα**: Αν και υπάρχουν επιπλέον προστασίες, η παράκαμψη του SIP απλοποιεί τη διαδικασία φόρτωσης μη υπογεγραμμένων επεκτάσεων πυρήνα. ### Πακέτα Εγκατάστασης -**Τα πακέτα εγκατάστασης που υπογράφονται με το πιστοποιητικό της Apple** μπορούν να παρακάμψουν τις προστασίες του. Αυτό σημαίνει ότι ακόμη και τα πακέτα που υπογράφονται από τυπικούς προγραμματιστές θα αποκλειστούν αν προσπαθήσουν να τροποποιήσουν τους καταλόγους που προστατεύονται από SIP. +**Τα πακέτα εγκατάστασης που υπογράφονται με το πιστοποιητικό της Apple** μπορούν να παρακάμψουν τις προστασίες του. Αυτό σημαίνει ότι ακόμη και πακέτα που υπογράφονται από τυπικούς προγραμματιστές θα αποκλειστούν αν προσπαθήσουν να τροποποιήσουν καταλόγους που προστατεύονται από SIP. -### Μη Υπάρχον Αρχείο SIP +### Ανύπαρκτο αρχείο SIP -Ένα πιθανό παραθυράκι είναι ότι αν ένα αρχείο καθοριστεί στο **`rootless.conf` αλλά δεν υπάρχει αυτή τη στιγμή**, μπορεί να δημιουργηθεί. Το κακόβουλο λογισμικό θα μπορούσε να εκμεταλλευτεί αυτό για να **καθιερώσει μόνιμη παρουσία** στο σύστημα. Για παράδειγμα, ένα κακόβουλο πρόγραμμα θα μπορούσε να δημιουργήσει ένα αρχείο .plist στο `/System/Library/LaunchDaemons` αν είναι καταχωρημένο στο `rootless.conf` αλλά δεν είναι παρόν. +Ένα πιθανό παραθυράκι είναι ότι αν ένα αρχείο καθοριστεί στο **`rootless.conf` αλλά δεν υπάρχει αυτή τη στιγμή**, μπορεί να δημιουργηθεί. Το κακόβουλο λογισμικό θα μπορούσε να εκμεταλλευτεί αυτό για να **καθιερώσει επιμονή** στο σύστημα. Για παράδειγμα, ένα κακόβουλο πρόγραμμα θα μπορούσε να δημιουργήσει ένα αρχείο .plist στο `/System/Library/LaunchDaemons` αν είναι καταχωρημένο στο `rootless.conf` αλλά δεν είναι παρόν. ### com.apple.rootless.install.heritable @@ -112,7 +112,7 @@ csrutil enable --without debug #### [CVE-2019-8561](https://objective-see.org/blog/blog_0x42.html) -Ανακαλύφθηκε ότι ήταν δυνατό να **ανταλλάξετε το πακέτο εγκατάστασης μετά την επιβεβαίωση της υπογραφής του κώδικα από το σύστημα** και στη συνέχεια, το σύστημα θα εγκαθιστούσε το κακόβουλο πακέτο αντί του αρχικού. Καθώς αυτές οι ενέργειες εκτελούνταν από το **`system_installd`**, θα επέτρεπε την παράκαμψη του SIP. +Ανακαλύφθηκε ότι ήταν δυνατό να **ανταλλάξετε το πακέτο εγκατάστασης μετά την επιβεβαίωση της υπογραφής του κώδικα από το σύστημα** και στη συνέχεια, το σύστημα θα εγκαθιστούσε το κακόβουλο πακέτο αντί του αρχικού. Καθώς αυτές οι ενέργειες εκτελούνταν από **`system_installd`**, θα επέτρεπε την παράκαμψη του SIP. #### [CVE-2020–9854](https://objective-see.org/blog/blog_0x4D.html) @@ -120,17 +120,17 @@ csrutil enable --without debug #### CVE-2021-30892 - Shrootless -[**Ερευνητές από αυτή την ανάρτηση blog**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) ανακάλυψαν μια ευπάθεια στον μηχανισμό Προστασίας Ακεραιότητας Συστήματος (SIP) του macOS, που ονομάζεται 'Shrootless'. Αυτή η ευπάθεια επικεντρώνεται γύρω από το **`system_installd`** daemon, ο οποίος έχει ένα δικαίωμα, **`com.apple.rootless.install.heritable`**, που επιτρέπει σε οποιαδήποτε από τις διαδικασίες παιδιών του να παρακάμψει τους περιορισμούς του συστήματος αρχείων SIP. +[**Ερευνητές από αυτή την ανάρτηση blog**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) ανακάλυψαν μια ευπάθεια στον μηχανισμό Προστασίας Ακεραιότητας Συστήματος (SIP) του macOS, που ονομάζεται 'Shrootless'. Αυτή η ευπάθεια επικεντρώνεται στον δαίμονα **`system_installd`**, ο οποίος έχει ένα δικαίωμα, **`com.apple.rootless.install.heritable`**, που επιτρέπει σε οποιαδήποτε από τις διαδικασίες παιδιών του να παρακάμψει τους περιορισμούς του συστήματος αρχείων SIP. -Ο daemon **`system_installd`** θα εγκαταστήσει πακέτα που έχουν υπογραφεί από **Apple**. +Ο δαίμονας **`system_installd`** θα εγκαταστήσει πακέτα που έχουν υπογραφεί από **Apple**. -Οι ερευνητές διαπίστωσαν ότι κατά την εγκατάσταση ενός πακέτου υπογεγραμμένου από την Apple (.pkg αρχείο), το **`system_installd`** **εκτελεί** οποιαδήποτε **σενάρια μετά την εγκατάσταση** που περιλαμβάνονται στο πακέτο. Αυτά τα σενάρια εκτελούνται από το προεπιλεγμένο κέλυφος, **`zsh`**, το οποίο αυτόματα **εκτελεί** εντολές από το **`/etc/zshenv`** αρχείο, αν υπάρχει, ακόμη και σε μη διαδραστική λειτουργία. Αυτή η συμπεριφορά θα μπορούσε να εκμεταλλευτεί από επιτιθέμενους: δημιουργώντας ένα κακόβουλο αρχείο `/etc/zshenv` και περιμένοντας να **καλέσει το `system_installd` το `zsh`**, θα μπορούσαν να εκτελέσουν αυθαίρετες ενέργειες στη συσκευή. +Οι ερευνητές διαπίστωσαν ότι κατά την εγκατάσταση ενός πακέτου υπογεγραμμένου από την Apple (.pkg αρχείο), ο **`system_installd`** **εκτελεί** οποιαδήποτε **σενάρια μετά την εγκατάσταση** που περιλαμβάνονται στο πακέτο. Αυτά τα σενάρια εκτελούνται από το προεπιλεγμένο κέλυφος, **`zsh`**, το οποίο αυτόματα **εκτελεί** εντολές από το **`/etc/zshenv`** αρχείο, αν υπάρχει, ακόμη και σε μη διαδραστική λειτουργία. Αυτή η συμπεριφορά θα μπορούσε να εκμεταλλευτεί από επιτιθέμενους: δημιουργώντας ένα κακόβουλο αρχείο `/etc/zshenv` και περιμένοντας να **καλέσει το `zsh` ο `system_installd`**, θα μπορούσαν να εκτελέσουν αυθαίρετες ενέργειες στη συσκευή. -Επιπλέον, ανακαλύφθηκε ότι το **`/etc/zshenv` θα μπορούσε να χρησιμοποιηθεί ως γενική τεχνική επίθεσης**, όχι μόνο για παράκαμψη SIP. Κάθε προφίλ χρήστη έχει ένα αρχείο `~/.zshenv`, το οποίο συμπεριφέρεται με τον ίδιο τρόπο όπως το `/etc/zshenv` αλλά δεν απαιτεί δικαιώματα root. Αυτό το αρχείο θα μπορούσε να χρησιμοποιηθεί ως μηχανισμός μόνιμης παρουσίας, ενεργοποιούμενο κάθε φορά που ξεκινά το `zsh`, ή ως μηχανισμός ανύψωσης δικαιωμάτων. Αν ένας χρήστης διαχειριστής ανυψωθεί σε root χρησιμοποιώντας `sudo -s` ή `sudo <εντολή>`, το αρχείο `~/.zshenv` θα ενεργοποιούνταν, ανυψώνοντας αποτελεσματικά σε root. +Επιπλέον, ανακαλύφθηκε ότι το **`/etc/zshenv` θα μπορούσε να χρησιμοποιηθεί ως γενική τεχνική επίθεσης**, όχι μόνο για παράκαμψη SIP. Κάθε προφίλ χρήστη έχει ένα αρχείο `~/.zshenv`, το οποίο συμπεριφέρεται με τον ίδιο τρόπο όπως το `/etc/zshenv` αλλά δεν απαιτεί δικαιώματα root. Αυτό το αρχείο θα μπορούσε να χρησιμοποιηθεί ως μηχανισμός επιμονής, ενεργοποιούμενο κάθε φορά που ξεκινά το `zsh`, ή ως μηχανισμός ανύψωσης δικαιωμάτων. Αν ένας χρήστης διαχειριστής ανυψωθεί σε root χρησιμοποιώντας `sudo -s` ή `sudo <εντολή>`, το αρχείο `~/.zshenv` θα ενεργοποιούνταν, ανυψώνοντας αποτελεσματικά σε root. #### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) -Στο [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) ανακαλύφθηκε ότι η ίδια διαδικασία **`system_installd`** θα μπορούσε να καταχραστεί επειδή τοποθετούσε το **σενάριο μετά την εγκατάσταση σε έναν τυχαία ονομασμένο φάκελο προστατευμένο από SIP μέσα στο `/tmp`**. Το θέμα είναι ότι το **`/tmp` από μόνο του δεν προστατεύεται από SIP**, οπότε ήταν δυνατό να **τοποθετηθεί** μια **εικονική εικόνα σε αυτό**, στη συνέχεια ο **εγκαταστάτης** θα τοποθετούσε εκεί το **σενάριο μετά την εγκατάσταση**, **ξεμοντάροντας** την εικονική εικόνα, **αναδημιουργώντας** όλους τους **φακέλους** και **προσθέτοντας** το **σενάριο μετά την εγκατάσταση** με το **payload** για εκτέλεση. +Στο [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) ανακαλύφθηκε ότι η ίδια διαδικασία **`system_installd`** θα μπορούσε να καταχραστεί επειδή τοποθετούσε το **σενάριο μετά την εγκατάσταση σε έναν τυχαία ονομασμένο φάκελο που προστατεύεται από SIP μέσα στο `/tmp`**. Το θέμα είναι ότι το **`/tmp` από μόνο του δεν προστατεύεται από SIP**, οπότε ήταν δυνατό να **τοποθετηθεί** μια **εικόνα εικονικού δίσκου σε αυτό**, στη συνέχεια ο **εγκαταστάτης** θα τοποθετούσε εκεί το **σενάριο μετά την εγκατάσταση**, **ξεμοντάροντας** την εικονική εικόνα, **αναδημιουργώντας** όλους τους **φακέλους** και **προσθέτοντας** το **σενάριο μετά την εγκατάσταση** με το **payload** για εκτέλεση. #### [fsck_cs utility](https://www.theregister.com/2016/03/30/apple_os_x_rootless/) @@ -185,7 +185,7 @@ hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg Η εξουσιοδότηση `com.apple.rootless.install` είναι γνωστό ότι παρακάμπτει την Προστασία Ακεραιότητας Συστήματος (SIP) στο macOS. Αυτό αναφέρθηκε ιδιαίτερα σε σχέση με [**CVE-2022-26712**](https://jhftss.github.io/CVE-2022-26712-The-POC-For-SIP-Bypass-Is-Even-Tweetable/). -Σε αυτήν την συγκεκριμένη περίπτωση, η υπηρεσία XPC του συστήματος που βρίσκεται στο `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc` διαθέτει αυτήν την εξουσιοδότηση. Αυτό επιτρέπει στη σχετική διαδικασία να παρακάμψει τους περιορισμούς SIP. Επιπλέον, αυτή η υπηρεσία παρουσιάζει μια μέθοδο που επιτρέπει τη μετακίνηση αρχείων χωρίς να επιβάλλει κανένα μέτρο ασφαλείας. +Σε αυτήν την συγκεκριμένη περίπτωση, η υπηρεσία XPC του συστήματος που βρίσκεται στο `/System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc` διαθέτει αυτήν την εξουσιοδότηση. Αυτό επιτρέπει στη σχετική διαδικασία να παρακάμψει τους περιορισμούς του SIP. Επιπλέον, αυτή η υπηρεσία παρουσιάζει μια μέθοδο που επιτρέπει τη μετακίνηση αρχείων χωρίς να επιβάλλει κανένα μέτρο ασφαλείας. ## Σφραγισμένα Στιγμιότυπα Συστήματος diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md index 81a6a0a82..06545e2ae 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md @@ -4,17 +4,17 @@ ## **Βασικές Πληροφορίες** -**TCC (Διαφάνεια, Συναίνεση και Έλεγχος)** είναι ένα πρωτόκολλο ασφαλείας που επικεντρώνεται στη ρύθμιση των δικαιωμάτων εφαρμογών. Ο κύριος ρόλος του είναι να προστατεύει ευαίσθητες λειτουργίες όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρης πρόσβαση σε δίσκο**. Απαιτώντας ρητή συναίνεση από τον χρήστη πριν παραχωρηθεί πρόσβαση στην εφαρμογή σε αυτά τα στοιχεία, το TCC ενισχύει την ιδιωτικότητα και τον έλεγχο του χρήστη πάνω στα δεδομένα του. +**TCC (Διαφάνεια, Συναίνεση και Έλεγχος)** είναι ένα πρωτόκολλο ασφαλείας που επικεντρώνεται στη ρύθμιση των αδειών εφαρμογών. Ο κύριος ρόλος του είναι να προστατεύει ευαίσθητες δυνατότητες όπως **υπηρεσίες τοποθεσίας, επαφές, φωτογραφίες, μικρόφωνο, κάμερα, προσβασιμότητα και πλήρης πρόσβαση δίσκου**. Απαιτώντας ρητή συναίνεση από τον χρήστη πριν παραχωρηθεί πρόσβαση στην εφαρμογή σε αυτά τα στοιχεία, το TCC ενισχύει την ιδιωτικότητα και τον έλεγχο του χρήστη πάνω στα δεδομένα του. -Οι χρήστες συναντούν το TCC όταν οι εφαρμογές ζητούν πρόσβαση σε προστατευμένες λειτουργίες. Αυτό είναι ορατό μέσω μιας προτροπής που επιτρέπει στους χρήστες να **εγκρίνουν ή να απορρίψουν την πρόσβαση**. Επιπλέον, το TCC διευκολύνει άμεσες ενέργειες του χρήστη, όπως **σύρσιμο και απόθεση αρχείων σε μια εφαρμογή**, για να παραχωρήσει πρόσβαση σε συγκεκριμένα αρχεία, διασφαλίζοντας ότι οι εφαρμογές έχουν πρόσβαση μόνο σε ό,τι έχει ρητά επιτραπεί. +Οι χρήστες συναντούν το TCC όταν οι εφαρμογές ζητούν πρόσβαση σε προστατευμένες δυνατότητες. Αυτό είναι ορατό μέσω μιας προτροπής που επιτρέπει στους χρήστες να **εγκρίνουν ή να απορρίψουν την πρόσβαση**. Επιπλέον, το TCC διευκολύνει άμεσες ενέργειες του χρήστη, όπως **σύρσιμο και απόθεση αρχείων σε μια εφαρμογή**, για να παραχωρήσει πρόσβαση σε συγκεκριμένα αρχεία, διασφαλίζοντας ότι οι εφαρμογές έχουν πρόσβαση μόνο σε ό,τι έχει ρητά επιτραπεί. ![Ένα παράδειγμα προτροπής TCC](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855) -**TCC** διαχειρίζεται από τον **daemon** που βρίσκεται στο `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` και ρυθμίζεται στο `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (καταχωρώντας την υπηρεσία mach `com.apple.tccd.system`). +**TCC** διαχειρίζεται από το **daemon** που βρίσκεται στο `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` και ρυθμίζεται στο `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (καταχωρώντας την υπηρεσία mach `com.apple.tccd.system`). -Υπάρχει μια **tccd σε λειτουργία χρήστη** που εκτελείται ανά χρήστη που έχει συνδεθεί, καθορισμένη στο `/System/Library/LaunchAgents/com.apple.tccd.plist`, καταχωρώντας τις υπηρεσίες mach `com.apple.tccd` και `com.apple.usernotifications.delegate.com.apple.tccd`. +Υπάρχει ένα **tccd σε λειτουργία χρήστη** που εκτελείται ανά χρήστη που έχει συνδεθεί, ορισμένο στο `/System/Library/LaunchAgents/com.apple.tccd.plist`, καταχωρώντας τις υπηρεσίες mach `com.apple.tccd` και `com.apple.usernotifications.delegate.com.apple.tccd`. -Εδώ μπορείτε να δείτε την tccd να εκτελείται ως σύστημα και ως χρήστης: +Εδώ μπορείτε να δείτε το tccd να εκτελείται ως σύστημα και ως χρήστης: ```bash ps -ef | grep tcc 0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system @@ -102,7 +102,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; {{#endtabs}} > [!TIP] -> Ελέγχοντας και τις δύο βάσεις δεδομένων μπορείτε να ελέγξετε τις άδειες που έχει επιτρέψει μια εφαρμογή, έχει απαγορεύσει ή δεν έχει (θα ζητήσει την άδεια). +> Ελέγχοντας και τις δύο βάσεις δεδομένων μπορείτε να ελέγξετε τις άδειες που έχει επιτρέψει μια εφαρμογή, έχει απαγορεύσει ή δεν έχει (θα ζητήσει). - Η **`service`** είναι η συμβολοσειρά αναπαράστασης της **άδειας** TCC - Ο **`client`** είναι το **bundle ID** ή η **διαδρομή προς το δυαδικό** με τις άδειες @@ -153,7 +153,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; - Η **`auth_value`** μπορεί να έχει διαφορετικές τιμές: denied(0), unknown(1), allowed(2) ή limited(3). - Η **`auth_reason`** μπορεί να πάρει τις εξής τιμές: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12) -- Το πεδίο **csreq** υπάρχει για να υποδείξει πώς να επαληθεύσετε το δυαδικό αρχείο για εκτέλεση και να παραχωρήσετε τα δικαιώματα TCC: +- Το πεδίο **csreq** είναι εκεί για να υποδείξει πώς να επαληθεύσετε το δυαδικό αρχείο για εκτέλεση και να παραχωρήσετε τα δικαιώματα TCC: ```bash # Query to get cserq in printable hex select service, client, hex(csreq) from access where auth_value=2; @@ -174,7 +174,7 @@ echo "X'$REQ_HEX'" Μπορείτε επίσης να ελέγξετε **τις ήδη παραχωρηθείσες άδειες** σε εφαρμογές στο `System Preferences --> Security & Privacy --> Privacy --> Files and Folders`. > [!TIP] -> Οι χρήστες _μπορούν_ **να διαγράψουν ή να ερωτήσουν κανόνες** χρησιμοποιώντας **`tccutil`** . +> Οι χρήστες _μπορούν_ να **διαγράψουν ή να ερωτήσουν κανόνες** χρησιμοποιώντας **`tccutil`** . #### Επαναφορά αδειών TCC ```bash @@ -199,16 +199,16 @@ csreq -t -r /tmp/telegram_csreq.bin (anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6N38VWS5BX") and identifier "ru.keepcoder.Telegram" ``` > [!WARNING] -> Επομένως, άλλες εφαρμογές που χρησιμοποιούν το ίδιο όνομα και ID πακέτου δεν θα μπορούν να έχουν πρόσβαση στις παραχωρημένες άδειες που έχουν δοθεί σε άλλες εφαρμογές. +> Επομένως, άλλες εφαρμογές που χρησιμοποιούν το ίδιο όνομα και ID πακέτου δεν θα μπορούν να έχουν πρόσβαση στις παραχωρηθείσες άδειες που έχουν δοθεί σε άλλες εφαρμογές. ### Δικαιώματα & Άδειες TCC -Οι εφαρμογές **δεν χρειάζεται μόνο** να **ζητούν** και να έχουν **παραχωρημένη πρόσβαση** σε ορισμένους πόρους, αλλά πρέπει επίσης να **έχουν τα σχετικά δικαιώματα**.\ -Για παράδειγμα, το **Telegram** έχει το δικαίωμα `com.apple.security.device.camera` για να ζητήσει **πρόσβαση στην κάμερα**. Μια **εφαρμογή** που **δεν έχει** αυτό το **δικαίωμα δεν θα μπορεί** να έχει πρόσβαση στην κάμερα (και ο χρήστης δεν θα ρωτηθεί καν για τις άδειες). +Οι εφαρμογές **δεν χρειάζεται μόνο** να **ζητούν** και να έχουν **παραχωρηθεί πρόσβαση** σε ορισμένους πόρους, αλλά πρέπει επίσης να **έχουν τα σχετικά δικαιώματα**.\ +Για παράδειγμα, **Telegram** έχει το δικαίωμα `com.apple.security.device.camera` για να ζητήσει **πρόσβαση στην κάμερα**. Μια **εφαρμογή** που **δεν έχει** αυτό το **δικαίωμα δεν θα μπορεί** να έχει πρόσβαση στην κάμερα (και ο χρήστης δεν θα ρωτηθεί καν για τις άδειες). Ωστόσο, για να **έχουν πρόσβαση** οι εφαρμογές σε **ορισμένους φακέλους χρηστών**, όπως `~/Desktop`, `~/Downloads` και `~/Documents`, **δεν χρειάζεται** να έχουν κανένα συγκεκριμένο **δικαίωμα.** Το σύστημα θα διαχειριστεί διαφανώς την πρόσβαση και θα **ζητήσει από τον χρήστη** όπως απαιτείται. -Οι εφαρμογές της Apple **δεν θα δημιουργήσουν προτροπές**. Περιέχουν **προπαραχωρημένα δικαιώματα** στη λίστα **δικαιωμάτων** τους, που σημαίνει ότι **δεν θα δημιουργήσουν ποτέ αναδυόμενο παράθυρο**, **ούτε** θα εμφανιστούν σε καμία από τις **βάσεις δεδομένων TCC.** Για παράδειγμα: +Οι εφαρμογές της Apple **δεν θα δημιουργήσουν προτροπές**. Περιέχουν **προπαραχωρημένα δικαιώματα** στη λίστα **δικαιωμάτων** τους, που σημαίνει ότι **ποτέ δεν θα δημιουργήσουν αναδυόμενο παράθυρο**, **ούτε** θα εμφανιστούν σε καμία από τις **βάσεις δεδομένων TCC.** Για παράδειγμα: ```bash codesign -dv --entitlements :- /System/Applications/Calendar.app [...] @@ -234,7 +234,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app ### Πρόθεση Χρήστη / com.apple.macl -Όπως αναφέρθηκε προηγουμένως, είναι δυνατό να **παραχωρήσετε πρόσβαση σε μια εφαρμογή σε ένα αρχείο με το να το σύρετε και να το αποθέσετε σε αυτή**. Αυτή η πρόσβαση δεν θα καθορίζεται σε καμία βάση δεδομένων TCC αλλά ως **εκτεταμένο** **γνωριστικό του αρχείου**. Αυτό το γνωριστικό θα **αποθηκεύει το UUID** της επιτρεπόμενης εφαρμογής: +Όπως αναφέρθηκε προηγουμένως, είναι δυνατό να **παραχωρήσετε πρόσβαση σε μια εφαρμογή σε ένα αρχείο με τη μέθοδο drag\&drop**. Αυτή η πρόσβαση δεν θα καθορίζεται σε καμία βάση δεδομένων TCC αλλά ως **εκτεταμένο** **χαρακτηριστικό του αρχείου**. Αυτό το χαρακτηριστικό θα **αποθηκεύει το UUID** της επιτρεπόμενης εφαρμογής: ```bash xattr Desktop/private.txt com.apple.macl @@ -252,9 +252,9 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 > [!NOTE] > Είναι περίεργο ότι το **`com.apple.macl`** χαρακτηριστικό διαχειρίζεται από το **Sandbox**, όχι από το tccd. > -> Επίσης σημειώστε ότι αν μετακινήσετε ένα αρχείο που επιτρέπει το UUID μιας εφαρμογής στον υπολογιστή σας σε διαφορετικό υπολογιστή, επειδή η ίδια εφαρμογή θα έχει διαφορετικά UIDs, δεν θα παραχωρήσει πρόσβαση σε αυτή την εφαρμογή. +> Επίσης, σημειώστε ότι αν μετακινήσετε ένα αρχείο που επιτρέπει το UUID μιας εφαρμογής στον υπολογιστή σας σε διαφορετικό υπολογιστή, επειδή η ίδια εφαρμογή θα έχει διαφορετικά UIDs, δεν θα παραχωρήσει πρόσβαση σε αυτήν την εφαρμογή. -Το εκτεταμένο χαρακτηριστικό `com.apple.macl` **δεν μπορεί να διαγραφεί** όπως άλλα εκτεταμένα χαρακτηριστικά επειδή είναι **προστατευμένο από το SIP**. Ωστόσο, όπως [**εξηγείται σε αυτή την ανάρτηση**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), είναι δυνατόν να το απενεργοποιήσετε **συμπιέζοντας** το αρχείο, **διαγράφοντας** το και **αποσυμπιέζοντας** το. +Το εκτεταμένο χαρακτηριστικό `com.apple.macl` **δεν μπορεί να διαγραφεί** όπως άλλα εκτεταμένα χαρακτηριστικά επειδή είναι **προστατευμένο από το SIP**. Ωστόσο, όπως [**εξηγείται σε αυτήν την ανάρτηση**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), είναι δυνατόν να το απενεργοποιήσετε **συμπιέζοντας** το αρχείο, **διαγράφοντας** το και **αποσυμπιέζοντας** το. ## TCC Privesc & Bypasses @@ -308,7 +308,7 @@ strftime('%s', 'now') -- last_reminded with default current timestamp ### TCC Payloads -Αν καταφέρατε να μπείτε σε μια εφαρμογή με κάποιες άδειες TCC, ελέγξτε την παρακάτω σελίδα με τα payloads TCC για να τις εκμεταλλευτείτε: +Αν καταφέρατε να μπείτε σε μια εφαρμογή με κάποιες άδειες TCC, ελέγξτε την παρακάτω σελίδα με TCC payloads για να τις εκμεταλλευτείτε: {{#ref}} macos-tcc-payloads.md @@ -363,7 +363,7 @@ EOD > [!WARNING] > Με αυτή την άδεια θα μπορείτε να **ζητήσετε από τον Finder να αποκτήσει πρόσβαση σε περιορισμένους φακέλους TCC** και να σας δώσει τα αρχεία, αλλά όσο γνωρίζω δεν θα μπορείτε να κάνετε τον Finder να εκτελεί αυθαίρετο κώδικα για να εκμεταλλευτείτε πλήρως την πρόσβαση FDA του. > -> Επομένως, δεν θα μπορείτε να εκμεταλλευτείτε τις πλήρεις δυνατότητες της FDA. +> Επομένως, δεν θα μπορείτε να εκμεταλλευτείτε πλήρως τις δυνατότητες FDA. Αυτή είναι η προτροπή TCC για να αποκτήσετε δικαιώματα Αυτοματοποίησης πάνω στον Finder: @@ -374,7 +374,7 @@ EOD
-Αποκτήστε ένα shell μέσα στον Automator +Get a shell inside Automator ```applescript osascript<

https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg

### TCC Request by arbitrary name Ο επιτιθέμενος μπορεί να **δημιουργήσει εφαρμογές με οποιοδήποτε όνομα** (π.χ. Finder, Google Chrome...) στο **`Info.plist`** και να ζητήσει πρόσβαση σε κάποια προστατευμένη τοποθεσία TCC. Ο χρήστης θα νομίζει ότι η νόμιμη εφαρμογή είναι αυτή που ζητά αυτή την πρόσβαση.\ -Επιπλέον, είναι δυνατόν να **αφαιρέσετε την νόμιμη εφαρμογή από το Dock και να βάλετε την ψεύτικη**, έτσι όταν ο χρήστης κάνει κλικ στην ψεύτικη (η οποία μπορεί να χρησιμοποιεί το ίδιο εικονίδιο) μπορεί να καλέσει την νόμιμη, να ζητήσει άδειες TCC και να εκτελέσει κακόβουλο λογισμικό, κάνοντάς τον χρήστη να πιστεύει ότι η νόμιμη εφαρμογή ζήτησε την πρόσβαση. +Επιπλέον, είναι δυνατόν να **αφαιρεθεί η νόμιμη εφαρμογή από το Dock και να τοποθετηθεί η ψεύτικη**, έτσι όταν ο χρήστης κάνει κλικ στην ψεύτικη (η οποία μπορεί να χρησιμοποιεί το ίδιο εικονίδιο) μπορεί να καλέσει την νόμιμη, να ζητήσει άδειες TCC και να εκτελέσει κακόβουλο λογισμικό, κάνοντάς τον χρήστη να πιστεύει ότι η νόμιμη εφαρμογή ζήτησε την πρόσβαση.
@@ -58,11 +58,11 @@ asd ### iCloud -Η άδεια **`com.apple.private.icloud-account-access`** είναι δυνατή για να επικοινωνήσει με την υπηρεσία XPC **`com.apple.iCloudHelper`** που θα **παρέχει iCloud tokens**. +Η άδεια **`com.apple.private.icloud-account-access`** επιτρέπει την επικοινωνία με την υπηρεσία XPC **`com.apple.iCloudHelper`** που θα **παρέχει tokens iCloud**. -**iMovie** και **Garageband** είχαν αυτή την άδεια και άλλες που επέτρεπαν. +**iMovie** και **Garageband** είχαν αυτή την άδεια και άλλες που το επέτρεπαν. -Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για **να αποκτήσετε iCloud tokens** από αυτή την άδεια, ελέγξτε την ομιλία: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) +Για περισσότερες **πληροφορίες** σχετικά με την εκμετάλλευση για **να αποκτήσετε tokens icloud** από αυτή την άδεια, ελέγξτε την ομιλία: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) ### kTCCServiceAppleEvents / Automation @@ -145,7 +145,7 @@ $> ls ~/Documents ``` ### CVE-2021-30761 - Σημειώσεις -Οι Σημειώσεις είχαν πρόσβαση σε τοποθεσίες προστατευμένες από το TCC, αλλά όταν δημιουργείται μια σημείωση, αυτή **δημιουργείται σε μια μη προστατευμένη τοποθεσία**. Έτσι, θα μπορούσατε να ζητήσετε από τις σημειώσεις να αντιγράψουν ένα προστατευμένο αρχείο σε μια σημείωση (δηλαδή σε μια μη προστατευμένη τοποθεσία) και στη συνέχεια να αποκτήσετε πρόσβαση στο αρχείο: +Οι Σημειώσεις είχαν πρόσβαση σε τοποθεσίες προστατευμένες από TCC, αλλά όταν δημιουργείται μια σημείωση, αυτή **δημιουργείται σε μια μη προστατευμένη τοποθεσία**. Έτσι, θα μπορούσατε να ζητήσετε από τις σημειώσεις να αντιγράψουν ένα προστατευμένο αρχείο σε μια σημείωση (δηλαδή σε μια μη προστατευμένη τοποθεσία) και στη συνέχεια να αποκτήσετε πρόσβαση στο αρχείο:
@@ -153,7 +153,7 @@ $> ls ~/Documents Ο δυαδικός κώδικας `/usr/libexec/lsd` με τη βιβλιοθήκη `libsecurity_translocate` είχε την εξουσία `com.apple.private.nullfs_allow`, η οποία του επέτρεπε να δημιουργήσει **nullfs** mount και είχε την εξουσία `com.apple.private.tcc.allow` με **`kTCCServiceSystemPolicyAllFiles`** για να αποκτά πρόσβαση σε κάθε αρχείο. -Ήταν δυνατό να προστεθεί το χαρακτηριστικό καραντίνας στη "Βιβλιοθήκη", να κληθεί η υπηρεσία XPC **`com.apple.security.translocation`** και στη συνέχεια θα χαρτογραφούσε τη Βιβλιοθήκη σε **`$TMPDIR/AppTranslocation/d/d/Library`** όπου όλα τα έγγραφα μέσα στη Βιβλιοθήκη θα μπορούσαν να είναι **προσβάσιμα**. +Ήταν δυνατό να προστεθεί το χαρακτηριστικό καραντίνας στη "Βιβλιοθήκη", να καλέσετε την υπηρεσία XPC **`com.apple.security.translocation`** και στη συνέχεια θα χαρτογραφούσε τη Βιβλιοθήκη σε **`$TMPDIR/AppTranslocation/d/d/Library`** όπου όλα τα έγγραφα μέσα στη Βιβλιοθήκη θα μπορούσαν να είναι **προσβάσιμα**. ### CVE-2023-38571 - Μουσική & Τηλεόραση @@ -162,18 +162,19 @@ $> ls ~/Documents - `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"` - `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3` -Αυτή η συμπεριφορά **`rename(a, b);`** είναι ευάλωτη σε **Race Condition**, καθώς είναι δυνατό να τοποθετηθεί μέσα στον φάκελο `Automatically Add to Music.localized` ένα ψεύτικο αρχείο **TCC.db** και στη συνέχεια, όταν δημιουργηθεί ο νέος φάκελος (b) να αντιγραφεί το αρχείο, να διαγραφεί και να δείξει σε **`~/Library/Application Support/com.apple.TCC`**/. +Αυτή η συμπεριφορά **`rename(a, b);`** είναι ευάλωτη σε **Race Condition**, καθώς είναι δυνατό να τοποθετηθεί μέσα στον φάκελο `Automatically Add to Music.localized` ένα ψεύτικο αρχείο **TCC.db** και στη συνέχεια, όταν δημιουργηθεί ο νέος φάκελος (b) για να αντιγραφεί το αρχείο, να διαγραφεί και να δείξει σε **`~/Library/Application Support/com.apple.TCC`**/. ### SQLITE_SQLLOG_DIR - CVE-2023-32422 -Εάν **`SQLITE_SQLLOG_DIR="path/folder"`** σημαίνει βασικά ότι **κάθε ανοιχτή βάση δεδομένων αντιγράφεται σε αυτήν την τοποθεσία**. Σε αυτήν την CVE, αυτή η ρύθμιση ελέγχου καταχράστηκε για να **γράψει** μέσα σε μια **βάση δεδομένων SQLite** που πρόκειται να **ανοιχτεί από μια διαδικασία με FDA τη βάση δεδομένων TCC**, και στη συνέχεια να καταχραστεί **`SQLITE_SQLLOG_DIR`** με ένα **symlink στο όνομα αρχείου** έτσι ώστε όταν αυτή η βάση δεδομένων είναι **ανοιχτή**, ο χρήστης **TCC.db αντικαθίσταται** με την ανοιχτή.\ -**Περισσότερες πληροφορίες** [**στην αναφορά**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **και**[ **στην ομιλία**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y&t=20548s). +Εάν **`SQLITE_SQLLOG_DIR="path/folder"`** σημαίνει βασικά ότι **οποιαδήποτε ανοιχτή βάση δεδομένων αντιγράφεται σε αυτήν την τοποθεσία**. Σε αυτήν την CVE, αυτή η ρύθμιση ελέγχου καταχράστηκε για να **γράψει** μέσα σε μια **βάση δεδομένων SQLite** που πρόκειται να **ανοιχτεί από μια διαδικασία με FDA τη βάση δεδομένων TCC**, και στη συνέχεια να καταχραστεί **`SQLITE_SQLLOG_DIR`** με ένα **symlink στο όνομα αρχείου** έτσι ώστε όταν αυτή η βάση δεδομένων είναι **ανοιχτή**, ο χρήστης **TCC.db αντικαθίσταται** με την ανοιχτή. + +**Περισσότερες πληροφορίες** [**στην αναφορά**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **και** [**στην ομιλία**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y&t=20548s). ### **SQLITE_AUTO_TRACE** Εάν η μεταβλητή περιβάλλοντος **`SQLITE_AUTO_TRACE`** είναι ρυθμισμένη, η βιβλιοθήκη **`libsqlite3.dylib`** θα αρχίσει να **καταγράφει** όλα τα SQL ερωτήματα. Πολλές εφαρμογές χρησιμοποίησαν αυτή τη βιβλιοθήκη, οπότε ήταν δυνατό να καταγραφούν όλα τα SQLite ερωτήματα τους. -Πολλές εφαρμογές της Apple χρησιμοποίησαν αυτή τη βιβλιοθήκη για να αποκτήσουν πρόσβαση σε πληροφορίες προστατευμένες από το TCC. +Πολλές εφαρμογές της Apple χρησιμοποίησαν αυτή τη βιβλιοθήκη για να αποκτήσουν πρόσβαση σε πληροφορίες προστατευμένες από TCC. ```bash # Set this env variable everywhere launchctl setenv SQLITE_AUTO_TRACE 1 @@ -184,7 +185,7 @@ launchctl setenv SQLITE_AUTO_TRACE 1 Ρυθμίζοντας το εξής: `MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"`. Αν το `path` είναι έγκυρος φάκελος, το σφάλμα θα ενεργοποιηθεί και μπορούμε να χρησιμοποιήσουμε το `fs_usage` για να δούμε τι συμβαίνει στο πρόγραμμα: -- ένα αρχείο θα `open()`εται, που ονομάζεται `path/.dat.nosyncXXXX.XXXXXX` (X είναι τυχαίος) +- ένα αρχείο θα `open()`αριστεί, ονομάζεται `path/.dat.nosyncXXXX.XXXXXX` (X είναι τυχαίος) - ένα ή περισσότερα `write()` θα γράψουν τα περιεχόμενα στο αρχείο (δεν το ελέγχουμε αυτό) - το `path/.dat.nosyncXXXX.XXXXXX` θα `renamed()` σε `path/name` @@ -193,9 +194,9 @@ launchctl setenv SQLITE_AUTO_TRACE 1 Δεν είναι ασφαλής γιατί πρέπει να **λύσει τους παλιούς και νέους φακέλους ξεχωριστά**, κάτι που μπορεί να πάρει κάποιο χρόνο και μπορεί να είναι ευάλωτο σε Race Condition. Για περισσότερες πληροφορίες μπορείτε να ελέγξετε τη λειτουργία `renameat_internal()` του `xnu`. > [!CAUTION] -> Ουσιαστικά, αν μια προνομιακή διαδικασία μετονομάζει από έναν φάκελο που ελέγχετε, θα μπορούσατε να κερδίσετε ένα RCE και να το κάνετε να έχει πρόσβαση σε ένα διαφορετικό αρχείο ή, όπως σε αυτήν την CVE, να ανοίξετε το αρχείο που δημιούργησε η προνομιακή εφαρμογή και να αποθηκεύσετε ένα FD. +> Έτσι, βασικά, αν μια προνομιακή διαδικασία μετονομάζει από έναν φάκελο που ελέγχετε, θα μπορούσατε να κερδίσετε μια RCE και να την κάνετε να έχει πρόσβαση σε ένα διαφορετικό αρχείο ή, όπως σε αυτήν την CVE, να ανοίξετε το αρχείο που δημιούργησε η προνομιακή εφαρμογή και να αποθηκεύσετε ένα FD. > -> Αν η μετονομασία έχει πρόσβαση σε έναν φάκελο που ελέγχετε, ενώ έχετε τροποποιήσει το αρχείο προέλευσης ή έχετε ένα FD σε αυτό, αλλάζετε το αρχείο (ή φάκελο) προορισμού για να δείξετε σε ένα symlink, ώστε να μπορείτε να γράφετε όποτε θέλετε. +> Αν η μετονομασία έχει πρόσβαση σε έναν φάκελο που ελέγχετε, ενώ έχετε τροποποιήσει το αρχικό αρχείο ή έχετε ένα FD σε αυτό, αλλάζετε το αρχείο (ή φάκελο) προορισμού για να δείξετε σε ένα symlink, ώστε να μπορείτε να γράφετε όποτε θέλετε. Αυτή ήταν η επίθεση στην CVE: Για παράδειγμα, για να αντικαταστήσουμε τη βάση δεδομένων `TCC.db` του χρήστη, μπορούμε: @@ -218,15 +219,15 @@ launchctl setenv SQLITE_AUTO_TRACE 1 ### Apple Remote Desktop -Ως root θα μπορούσατε να ενεργοποιήσετε αυτή την υπηρεσία και ο **ARD agent θα έχει πλήρη πρόσβαση στο δίσκο** που θα μπορούσε στη συνέχεια να καταχραστεί από έναν χρήστη για να τον κάνει να αντιγράψει μια νέα **βάση δεδομένων χρήστη TCC**. +Ως root θα μπορούσατε να ενεργοποιήσετε αυτή την υπηρεσία και ο **ARD agent θα έχει πλήρη πρόσβαση στο δίσκο** που θα μπορούσε στη συνέχεια να καταχραστεί από έναν χρήστη για να τον κάνει να αντιγράψει μια νέα **βάση δεδομένων TCC χρήστη**. ## Με **NFSHomeDirectory** -Το TCC χρησιμοποιεί μια βάση δεδομένων στον φάκελο HOME του χρήστη για να ελέγξει την πρόσβαση σε πόρους που είναι συγκεκριμένοι για τον χρήστη στο **$HOME/Library/Application Support/com.apple.TCC/TCC.db**.\ -Επομένως, αν ο χρήστης καταφέρει να επανεκκινήσει το TCC με μια μεταβλητή περιβάλλοντος $HOME που δείχνει σε έναν **διαφορετικό φάκελο**, ο χρήστης θα μπορούσε να δημιουργήσει μια νέα βάση δεδομένων TCC στο **/Library/Application Support/com.apple.TCC/TCC.db** και να ξεγελάσει το TCC να παραχωρήσει οποιαδήποτε άδεια TCC σε οποιαδήποτε εφαρμογή. +Το TCC χρησιμοποιεί μια βάση δεδομένων στον φάκελο HOME του χρήστη για να ελέγξει την πρόσβαση σε πόρους συγκεκριμένους για τον χρήστη στο **$HOME/Library/Application Support/com.apple.TCC/TCC.db**.\ +Επομένως, αν ο χρήστης καταφέρει να επανεκκινήσει το TCC με μια μεταβλητή περιβάλλοντος $HOME που δείχνει σε έναν **διαφορετικό φάκελο**, ο χρήστης θα μπορούσε να δημιουργήσει μια νέα βάση δεδομένων TCC στο **/Library/Application Support/com.apple.TCC/TCC.db** και να εξαπατήσει το TCC να παραχωρήσει οποιαδήποτε άδεια TCC σε οποιαδήποτε εφαρμογή. > [!TIP] -> Σημειώστε ότι η Apple χρησιμοποιεί τη ρύθμιση που αποθηκεύεται μέσα στο προφίλ του χρήστη στο **`NFSHomeDirectory`** χαρακτηριστικό για την **τιμή του `$HOME`**, οπότε αν παραβιάσετε μια εφαρμογή με άδειες να τροποποιήσει αυτή την τιμή (**`kTCCServiceSystemPolicySysAdminFiles`**), μπορείτε να **οπλίσετε** αυτή την επιλογή με μια παράκαμψη TCC. +> Σημειώστε ότι η Apple χρησιμοποιεί τη ρύθμιση που αποθηκεύεται στο προφίλ του χρήστη στο **`NFSHomeDirectory`** χαρακτηριστικό για την **τιμή του `$HOME`**, οπότε αν παραβιάσετε μια εφαρμογή με άδειες να τροποποιήσει αυτή την τιμή (**`kTCCServiceSystemPolicySysAdminFiles`**), μπορείτε να **οπλοποιήσετε** αυτή την επιλογή με μια παράκαμψη TCC. ### [CVE-2020–9934 - TCC](./#c19b) @@ -239,7 +240,7 @@ launchctl setenv SQLITE_AUTO_TRACE 1 1. Πάρτε ένα _csreq_ blob για την στοχοθετημένη εφαρμογή. 2. Φυτέψτε ένα ψεύτικο _TCC.db_ αρχείο με απαιτούμενη πρόσβαση και το _csreq_ blob. 3. Εξάγετε την εγγραφή Υπηρεσιών Καταλόγου του χρήστη με [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/). -4. Τροποποιήστε την εγγραφή Υπηρεσιών Καταλόγου για να αλλάξετε το φάκελο του χρήστη. +4. Τροποποιήστε την εγγραφή Υπηρεσιών Καταλόγου για να αλλάξετε τον φάκελο του χρήστη. 5. Εισάγετε την τροποποιημένη εγγραφή Υπηρεσιών Καταλόγου με [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/). 6. Σταματήστε το _tccd_ του χρήστη και επανεκκινήστε τη διαδικασία. @@ -256,14 +257,14 @@ launchctl setenv SQLITE_AUTO_TRACE 1 ../../../macos-proces-abuse/ {{#endref}} -Επιπλέον, η πιο κοινή ένεση διαδικασίας για να παρακάμψετε το TCC που βρέθηκε είναι μέσω **plugins (load library)**.\ +Επιπλέον, η πιο κοινή ένεση διαδικασίας για να παρακαμφθεί το TCC που βρέθηκε είναι μέσω **plugins (load library)**.\ Τα plugins είναι επιπλέον κώδικας συνήθως με τη μορφή βιβλιοθηκών ή plist, που θα **φορτωθούν από την κύρια εφαρμογή** και θα εκτελούνται υπό το πλαίσιο της. Επομένως, αν η κύρια εφαρμογή είχε πρόσβαση σε αρχεία περιορισμένα από το TCC (μέσω παραχωρημένων αδειών ή δικαιωμάτων), ο **προσαρμοσμένος κώδικας θα έχει επίσης πρόσβαση**. ### CVE-2020-27937 - Directory Utility -Η εφαρμογή `/System/Library/CoreServices/Applications/Directory Utility.app` είχε την άδεια **`kTCCServiceSystemPolicySysAdminFiles`**, φόρτωσε plugins με **`.daplug`** επέκταση και **δεν είχε** τη σκληρή εκτέλεση. +Η εφαρμογή `/System/Library/CoreServices/Applications/Directory Utility.app` είχε την άδεια **`kTCCServiceSystemPolicySysAdminFiles`**, φόρτωσε plugins με επέκταση **`.daplug`** και **δεν είχε** τη σκληρυμένη εκτέλεση. -Για να οπλίσετε αυτή την CVE, το **`NFSHomeDirectory`** **αλλάζει** (καταχρώντας την προηγούμενη άδεια) προκειμένου να μπορέσετε να **καταλάβετε τη βάση δεδομένων TCC του χρήστη** για να παρακάμψετε το TCC. +Για να οπλοποιήσετε αυτή την CVE, το **`NFSHomeDirectory`** **αλλάζει** (καταχρώντας την προηγούμενη άδεια) προκειμένου να μπορέσει να **αναλάβει τη βάση δεδομένων TCC των χρηστών** για να παρακάμψει το TCC. Για περισσότερες πληροφορίες ελέγξτε την [**αρχική αναφορά**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/). @@ -302,7 +303,7 @@ exit(0); ### Device Abstraction Layer (DAL) Plug-Ins -Οι εφαρμογές συστήματος που ανοίγουν ροή κάμερας μέσω Core Media I/O (εφαρμογές με **`kTCCServiceCamera`**) φορτώνουν **κατά τη διαδικασία αυτά τα πρόσθετα** που βρίσκονται στο `/Library/CoreMediaIO/Plug-Ins/DAL` (όχι περιορισμένα από SIP). +Οι εφαρμογές συστήματος που ανοίγουν ροή κάμερας μέσω Core Media I/O (εφαρμογές με **`kTCCServiceCamera`**) φορτώνουν **στη διαδικασία αυτά τα πρόσθετα** που βρίσκονται στο `/Library/CoreMediaIO/Plug-Ins/DAL` (όχι περιορισμένα από SIP). Απλά αποθηκεύοντας εκεί μια βιβλιοθήκη με τον κοινό **κατασκευαστή** θα λειτουργήσει για **εισαγωγή κώδικα**. @@ -340,13 +341,13 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox ### CVE-2020-10006 -Το δυαδικό αρχείο `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` είχε τα δικαιώματα **`com.apple.private.tcc.allow`** και **`com.apple.security.get-task-allow`**, που επέτρεπαν την εισαγωγή κώδικα μέσα στη διαδικασία και τη χρήση των δικαιωμάτων TCC. +Το δυαδικό `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` είχε τα δικαιώματα **`com.apple.private.tcc.allow`** και **`com.apple.security.get-task-allow`**, που επέτρεπαν την έγχυση κώδικα μέσα στη διαδικασία και τη χρήση των δικαιωμάτων TCC. ### CVE-2023-26818 - Telegram Το Telegram είχε τα δικαιώματα **`com.apple.security.cs.allow-dyld-environment-variables`** και **`com.apple.security.cs.disable-library-validation`**, οπότε ήταν δυνατό να το εκμεταλλευτεί κανείς για **να αποκτήσει πρόσβαση στα δικαιώματά του** όπως η καταγραφή με την κάμερα. Μπορείτε να [**βρείτε το payload στην αναφορά**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/). -Σημειώστε πώς να χρησιμοποιήσετε τη μεταβλητή env για να φορτώσετε μια βιβλιοθήκη, δημιουργήθηκε μια **προσαρμοσμένη plist** για να εισαχθεί αυτή η βιβλιοθήκη και χρησιμοποιήθηκε το **`launchctl`** για να την εκκινήσει: +Σημειώστε πώς να χρησιμοποιήσετε τη μεταβλητή env για να φορτώσετε μια βιβλιοθήκη, μια **προσαρμοσμένη plist** δημιουργήθηκε για να εγχύσει αυτή τη βιβλιοθήκη και χρησιμοποιήθηκε το **`launchctl`** για να την εκκινήσει: ```xml @@ -382,9 +383,9 @@ launchctl load com.telegram.launcher.plist ### Σενάρια Τερματικού -Είναι αρκετά συνηθισμένο να δίνετε στο τερματικό **Πλήρη Πρόσβαση Δίσκου (FDA)**, τουλάχιστον σε υπολογιστές που χρησιμοποιούνται από τεχνικούς. Και είναι δυνατόν να καλέσετε σενάρια **`.terminal`** χρησιμοποιώντας το. +Είναι αρκετά συνηθισμένο να δίνετε στο τερματικό **Full Disk Access (FDA)**, τουλάχιστον σε υπολογιστές που χρησιμοποιούνται από τεχνολογικούς ανθρώπους. Και είναι δυνατόν να καλέσετε σενάρια **`.terminal`** χρησιμοποιώντας το. -Τα σενάρια **`.terminal`** είναι αρχεία plist όπως αυτό με την εντολή που θα εκτελεστεί στο κλειδί **`CommandString`**: +**`.terminal`** σενάρια είναι αρχεία plist όπως αυτό με την εντολή που θα εκτελεστεί στο κλειδί **`CommandString`**: ```xml @@ -417,8 +418,8 @@ exploit_location]; task.standardOutput = pipe; ### CVE-2020-9771 - παράκαμψη TCC mount_apfs και εκμετάλλευση προνομίων -**Οποιοσδήποτε χρήστης** (ακόμα και οι μη προνομιούχοι) μπορεί να δημιουργήσει και να τοποθετήσει μια στιγμιότυπο μηχανής χρόνου και **να έχει πρόσβαση σε ΟΛΑ τα αρχεία** αυτού του στιγμιότυπου.\ -Η **μόνη προνομιακή** πρόσβαση που απαιτείται είναι για την εφαρμογή που χρησιμοποιείται (όπως το `Terminal`) να έχει **Πλήρη Πρόσβαση Δίσκου** (FDA) (`kTCCServiceSystemPolicyAllfiles`) η οποία πρέπει να παραχωρηθεί από έναν διαχειριστή. +**Οποιοσδήποτε χρήστης** (ακόμα και οι μη προνομιούχοι) μπορεί να δημιουργήσει και να τοποθετήσει μια στιγμιότυπη εικόνα του Time Machine και να **έχει πρόσβαση σε ΟΛΑ τα αρχεία** αυτής της στιγμιότυπης εικόνας.\ +Η **μόνη προνομιακή** πρόσβαση που απαιτείται είναι για την εφαρμογή που χρησιμοποιείται (όπως το `Terminal`) να έχει **Πλήρη Πρόσβαση Δίσκου** (FDA) (`kTCCServiceSystemPolicyAllfiles`), η οποία πρέπει να παραχωρηθεί από έναν διαχειριστή. ```bash # Create snapshot tmutil localsnapshot @@ -440,9 +441,9 @@ ls /tmp/snap/Users/admin_user # This will work ``` Μια πιο λεπτομερής εξήγηση μπορεί να [**βρεθεί στην αρχική αναφορά**](https://theevilbit.github.io/posts/cve_2020_9771/)**.** -### CVE-2021-1784 & CVE-2021-30808 - Τοποθέτηση αρχείου πάνω από το TCC +### CVE-2021-1784 & CVE-2021-30808 - Mount over TCC file -Ακόμα και αν το αρχείο DB του TCC είναι προστατευμένο, ήταν δυνατό να **τοποθετηθεί ένα νέο αρχείο TCC.db** πάνω από τον κατάλογο: +Ακόμα και αν το αρχείο TCC DB είναι προστατευμένο, ήταν δυνατό να **mount over the directory** ένα νέο αρχείο TCC.db: ```bash # CVE-2021-1784 ## Mount over Library/Application\ Support/com.apple.TCC @@ -467,7 +468,7 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null") ### CVE-2024-40855 -Όπως εξηγήθηκε στο [πρωτότυπο άρθρο](https://www.kandji.io/blog/macos-audit-story-part2), αυτή η CVE εκμεταλλεύτηκε το `diskarbitrationd`. +Όπως εξηγήθηκε στο [πρωτότυπο άρθρο](https://www.kandji.io/blog/macos-audit-story-part2), αυτό το CVE εκμεταλλεύτηκε το `diskarbitrationd`. Η συνάρτηση `DADiskMountWithArgumentsCommon` από το δημόσιο πλαίσιο `DiskArbitration` εκτελούσε τους ελέγχους ασφαλείας. Ωστόσο, είναι δυνατόν να παρακαμφθεί καλώντας απευθείας το `diskarbitrationd` και επομένως να χρησιμοποιηθούν στοιχεία `../` στη διαδρομή και symlinks. @@ -490,7 +491,7 @@ os.system("hdiutil detach /tmp/mnt 1>/dev/null") ## Από grep -Σε πολλές περιπτώσεις, αρχεία θα αποθηκεύουν ευαίσθητες πληροφορίες όπως emails, αριθμούς τηλεφώνου, μηνύματα... σε μη προστατευμένες τοποθεσίες (που μετράνε ως ευπάθεια στην Apple). +Σε πολλές περιπτώσεις, τα αρχεία θα αποθηκεύουν ευαίσθητες πληροφορίες όπως emails, αριθμούς τηλεφώνου, μηνύματα... σε μη προστατευμένες τοποθεσίες (που μετράνε ως ευπάθεια στην Apple).
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md index 58df7fe70..fb836ba75 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md @@ -4,8 +4,8 @@ ## Apple Scripts -Είναι μια γλώσσα scripting που χρησιμοποιείται για την αυτοματοποίηση εργασιών **αλληλεπιδρώντας με απομακρυσμένες διαδικασίες**. Διευκολύνει πολύ το **να ζητάμε από άλλες διαδικασίες να εκτελούν κάποιες ενέργειες**. **Malware** μπορεί να εκμεταλλευτεί αυτές τις δυνατότητες για να εκμεταλλευτεί τις λειτουργίες που εξάγονται από άλλες διαδικασίες.\ -Για παράδειγμα, ένα malware θα μπορούσε να **εισάγει αυθαίρετο JS κώδικα σε ανοιγμένες σελίδες του προγράμματος περιήγησης**. Ή να **κάνει αυτόματη κλικ** σε κάποιες άδειες που ζητούνται από τον χρήστη; +Είναι μια γλώσσα scripting που χρησιμοποιείται για την αυτοματοποίηση εργασιών **αλληλεπιδρώντας με απομακρυσμένες διαδικασίες**. Διευκολύνει πολύ το **να ζητάμε από άλλες διαδικασίες να εκτελέσουν κάποιες ενέργειες**. **Malware** μπορεί να εκμεταλλευτεί αυτές τις δυνατότητες για να εκμεταλλευτεί τις λειτουργίες που εξάγονται από άλλες διαδικασίες.\ +Για παράδειγμα, ένα malware θα μπορούσε να **εισάγει αυθαίρετο κώδικα JS σε ανοιγμένες σελίδες του προγράμματος περιήγησης**. Ή να **κάνει αυτόματη κλικ** σε κάποιες άδειες που ζητούνται από τον χρήστη; ```applescript tell window 1 of process "SecurityAgent" click button "Always Allow" of group 1 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md index 204f2220e..671d548a5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md @@ -9,7 +9,7 @@ {{#tabs}} {{#tab name="ObjetiveC"}} -Αντιγράψτε `$HOME/Desktop` στο `/tmp/desktop`. +Αντιγράψτε το `$HOME/Desktop` στο `/tmp/desktop`. ```objectivec #include #include @@ -205,7 +205,7 @@ cp -r "$HOME/Pictures/Photos Library.photoslibrary" "/tmp/photos" {{#tabs}} {{#tab name="ObjetiveC"}} -Αντιγράψτε `$HOME/Library/Application Support/AddressBook` στο `/tmp/contacts`. +Αντιγράψτε το `$HOME/Library/Application Support/AddressBook` στο `/tmp/contacts`. ```objectivec #include #include @@ -560,7 +560,7 @@ static void telegram(int argc, const char **argv) { {{#endtab}} {{#tab name="Shell"}} -Καταγράψτε ένα ήχο 5 δευτερολέπτων και αποθηκεύστε τον στο `/tmp/recording.wav` +Καταγράψτε ένα ήχο 5 δευτερολέπτων και αποθηκεύστε το στο `/tmp/recording.wav` ```bash # Check the microphones ffmpeg -f avfoundation -list_devices true -i "" @@ -573,7 +573,7 @@ ffmpeg -f avfoundation -i ":1" -t 5 /tmp/recording.wav ### Τοποθεσία > [!TIP] -> Για να αποκτήσει μια εφαρμογή την τοποθεσία, **Υπηρεσίες Τοποθεσίας** (από Ιδιωτικότητα & Ασφάλεια) **πρέπει να είναι ενεργοποιημένες,** αλλιώς δεν θα μπορεί να έχει πρόσβαση σε αυτήν. +> Για να αποκτήσει μια εφαρμογή την τοποθεσία, **Οι Υπηρεσίες Τοποθεσίας** (από Ιδιωτικότητα & Ασφάλεια) **πρέπει να είναι ενεργοποιημένες,** αλλιώς δεν θα μπορεί να έχει πρόσβαση σε αυτήν. - **Δικαιώματα**: `com.apple.security.personal-information.location` - **TCC**: Χορηγήθηκε στο `/var/db/locationd/clients.plist` @@ -770,7 +770,7 @@ return 0; {{#endtab}} {{#tab name="Keylogger"}} -Αποθηκεύστε τα πατημένα πλήκτρα στο **`/tmp/keystrokes.txt`** +Αποθήκευση των πατημένων πλήκτρων στο **`/tmp/keystrokes.txt`** ```objectivec #import #import @@ -877,6 +877,6 @@ return 0; {{#endtab}} {{#endtabs}} -> [!CAUTION] > **Η προσβασιμότητα είναι μια πολύ ισχυρή άδεια**, θα μπορούσατε να την καταχραστείτε με άλλους τρόπους, για παράδειγμα θα μπορούσατε να εκτελέσετε την **επίθεση πληκτρολογίων** μόνο από αυτήν χωρίς να χρειάζεται να καλέσετε τα System Events. +> [!CAUTION] > **Η προσβασιμότητα είναι μια πολύ ισχυρή άδεια**, θα μπορούσατε να την καταχραστείτε με άλλους τρόπους, για παράδειγμα θα μπορούσατε να εκτελέσετε την **επίθεση πληκτρολογίου** μόνο από αυτήν χωρίς να χρειάζεται να καλέσετε τα System Events. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 9e6255fad..d96b3eb24 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -## Βασικά για Εφαρμογές Android +## Βασικά για τις Εφαρμογές Android Συνιστάται ανεπιφύλακτα να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια Android και τα πιο επικίνδυνα στοιχεία σε μια εφαρμογή Android**: @@ -19,7 +19,7 @@ android-applications-basics.md ## Smali -Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να τον ξανασυμπιέσετε.\ +Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Στη συνέχεια, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να το ξανασυμπιέσετε.\ [**Σε αυτό το σεμινάριο** μπορείτε να **μάθετε πώς να αποσυμπιέσετε ένα APK, να τροποποιήσετε τον κώδικα Smali και να ξανασυμπιέσετε το APK** με τη νέα λειτουργικότητα](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για πολλές δοκιμές κατά τη διάρκεια της δυναμικής ανάλυσης** που θα παρουσιαστούν. Στη συνέχεια, **κρατήστε πάντα στο μυαλό σας αυτή την πιθανότητα**. ## Άλλες ενδιαφέρουσες τεχνικές @@ -52,7 +52,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ### Αναζητώντας ενδιαφέροντα στοιχεία -Απλά ρίχνοντας μια ματιά στις **αλφαβητικές σειρές** του APK μπορείτε να αναζητήσετε **κωδικούς πρόσβασης**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** κλειδιά, **κρυπτογράφηση**, **bluetooth uuids**, **tokens** και οτιδήποτε ενδιαφέρον... αναζητήστε ακόμη και για εκτέλεση κώδικα **backdoors** ή backdoors αυθεντικοποίησης (σκληρά κωδικοποιημένα διαπιστευτήρια διαχειριστή στην εφαρμογή). +Απλά ρίχνοντας μια ματιά στις **αλφαβητικές σειρές** του APK μπορείτε να αναζητήσετε **κωδικούς πρόσβασης**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** κλειδιά, **κρυπτογράφηση**, **bluetooth uuids**, **tokens** και οτιδήποτε άλλο ενδιαφέρον... αναζητήστε ακόμη και για εκτέλεση κώδικα **backdoors** ή backdoors αυθεντικοποίησης (σκληρά κωδικοποιημένα διαπιστευτήρια διαχειριστή στην εφαρμογή). **Firebase** @@ -66,8 +66,8 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed - **Debuggable Εφαρμογές**: Οι εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο αρχείο _Manifest.xml_ ενέχουν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση σχετικά με το πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή. - **Ρυθμίσεις Αντιγράφων Ασφαλείας**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που διαχειρίζονται ευαίσθητες πληροφορίες ώστε να αποτρέπεται η μη εξουσιοδοτημένη δημιουργία αντιγράφων ασφαλείας μέσω adb, ειδικά όταν είναι ενεργοποιημένη η αποσφαλμάτωση usb. -- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP. Ένα παράδειγμα είναι η επιτρεπόμενη κίνηση HTTP για συγκεκριμένα domains. -- **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να κακοποιηθούν. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία. +- **Ασφάλεια Δικτύου**: Οι προσαρμοσμένες ρυθμίσεις ασφάλειας δικτύου (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως πιστοποιητικά και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP traffic για συγκεκριμένα domains. +- **Εξαγόμενες Δραστηριότητες και Υπηρεσίες**: Η αναγνώριση εξαγόμενων δραστηριοτήτων και υπηρεσιών στο manifest μπορεί να αναδείξει στοιχεία που μπορεί να χρησιμοποιηθούν κακόβουλα. Περαιτέρω ανάλυση κατά τη διάρκεια δυναμικής δοκιμής μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα στοιχεία. - **Content Providers και FileProviders**: Οι εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η ρύθμιση των FileProviders θα πρέπει επίσης να εξεταστεί προσεκτικά. - **Broadcast Receivers και URL Schemes**: Αυτά τα στοιχεία θα μπορούσαν να χρησιμοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στο πώς διαχειρίζονται τα URL schemes για ευπάθειες εισόδου. - **Εκδόσεις SDK**: Τα χαρακτηριστικά `minSdkVersion`, `targetSDKVersion`, και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία της μη υποστήριξης παλαιών, ευάλωτων εκδόσεων Android για λόγους ασφαλείας. @@ -76,8 +76,8 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ### Tapjacking -**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ περνά την αλληλεπίδραση στην εφαρμογή θύμα.\ -Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί ενέργειες στην εφαρμογή θύμα**. +**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή-στόχο**. Μόλις καλύψει ορατά την εφαρμογή-στόχο, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ περνά την αλληλεπίδραση στην εφαρμογή-στόχο.\ +Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι στην πραγματικότητα εκτελεί ενέργειες στην εφαρμογή-στόχο**. Βρείτε περισσότερες πληροφορίες στο: @@ -87,7 +87,7 @@ tapjacking.md ### Hijacking Εργασιών -Μια **δραστηριότητα** με το **`launchMode`** ρυθμισμένο σε **`singleTask` χωρίς καμία `taskAffinity`** καθορισμένη είναι ευάλωτη σε hijacking εργασιών. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή μπορεί να **καταλάβει την εργασία της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**). +Μια **δραστηριότητα** με το **`launchMode`** ρυθμισμένο σε **`singleTask` χωρίς καμία `taskAffinity`** καθορισμένη είναι ευάλωτη σε hijacking εργασιών. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και αν εκκινείται πριν από την πραγματική εφαρμογή μπορεί να **υφαρπάξει την εργασία της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή νομίζοντας ότι χρησιμοποιεί την πραγματική**). Περισσότερες πληροφορίες στο: @@ -99,12 +99,12 @@ android-task-hijacking.md **Εσωτερική Αποθήκευση** -Στο Android, τα αρχεία που **αποθηκεύονται** στην **εσωτερική** αποθήκευση είναι **σχεδιασμένα** να είναι **προσβάσιμα** αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας **επιβάλλεται** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέπουν** τα αρχεία να **μοιράζονται** μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων. +Στο Android, τα αρχεία που **αποθηκεύονται** στην **εσωτερική** αποθήκευση είναι **σχεδιασμένα** να είναι **προσβάσιμα** αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας **επιβάλλεται** από το λειτουργικό σύστημα Android και είναι γενικά επαρκές για τις ανάγκες ασφάλειας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν τρόπους όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** τα αρχεία να **μοιράζονται** μεταξύ διαφορετικών εφαρμογών. Ωστόσο, αυτοί οι τρόποι **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς κακόβουλων. 1. **Στατική Ανάλυση:** -- **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` είναι **προσεκτικά εξετασμένη**. Αυτοί οι τρόποι **μπορούν να εκθέσουν** τα αρχεία σε **μη προγραμματισμένη ή μη εξουσιοδοτημένη πρόσβαση**. +- **Βεβαιωθείτε** ότι η χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` είναι **προσεκτικά εξετασμένη**. Αυτοί οι τρόποι **μπορούν δυνητικά να εκθέσουν** αρχεία σε **μη προγραμματισμένες ή μη εξουσιοδοτημένες προσβάσεις**. 2. **Δυναμική Ανάλυση:** -- **Επαληθεύστε** τις **άδειες** που έχουν οριστεί στα αρχεία που δημιουργούνται από την εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν οποιαδήποτε αρχεία είναι **ρυθμισμένα να είναι αναγνώσιμα ή εγγράψιμα παγκοσμίως**. Αυτό μπορεί να θέσει σε σημαντικό κίνδυνο την ασφάλεια, καθώς θα επιτρέπει σε **οποιαδήποτε εφαρμογή** εγκατασταθεί στη συσκευή, ανεξαρτήτως προέλευσης ή προθέσεων, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία. +- **Επαληθεύστε** τις **άδειες** που έχουν οριστεί σε αρχεία που δημιουργούνται από την εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν οποιαδήποτε αρχεία είναι **ρυθμισμένα να είναι αναγνώσιμα ή εγγράψιμα παγκοσμίως**. Αυτό μπορεί να θέσει σε σημαντικό κίνδυνο την ασφάλεια, καθώς θα επιτρέπει σε **οποιαδήποτε εφαρμογή** εγκατασταθεί στη συσκευή, ανεξαρτήτως προέλευσης ή προθέσεων, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία. **Εξωτερική Αποθήκευση** @@ -116,7 +116,7 @@ android-task-hijacking.md - Δεδομένης της ευκολίας πρόσβασης, συνιστάται **να μην αποθηκεύετε ευαίσθητες πληροφορίες** στην εξωτερική αποθήκευση. - Η εξωτερική αποθήκευση μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, καθιστώντας την λιγότερο ασφαλή. 3. **Διαχείριση Δεδομένων από Εξωτερική Αποθήκευση**: -- Πάντα **εκτελέστε έλεγχο εισόδου** στα δεδομένα που ανακτώνται από την εξωτερική αποθήκευση. Αυτό είναι κρίσιμο καθώς τα δεδομένα προέρχονται από μια μη αξιόπιστη πηγή. +- Πάντα **εκτελέστε έλεγχο εισόδου** στα δεδομένα που ανακτώνται από την εξωτερική αποθήκευση. Αυτό είναι κρίσιμο επειδή τα δεδομένα προέρχονται από μια μη αξιόπιστη πηγή. - Η αποθήκευση εκτελέσιμων ή αρχείων κλάσης στην εξωτερική αποθήκευση για δυναμική φόρτωση αποθαρρύνεται έντονα. - Εάν η εφαρμογή σας πρέπει να ανακτήσει εκτελέσιμα αρχεία από την εξωτερική αποθήκευση, βεβαιωθείτε ότι αυτά τα αρχεία είναι **υπογεγραμμένα και κρυπτογραφικά επαληθευμένα** πριν φορτωθούν δυναμικά. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ασφάλειας της εφαρμογής σας. @@ -127,8 +127,8 @@ android-task-hijacking.md **Ευαίσθητα δεδομένα αποθηκευμένα σε καθαρό κείμενο** -- **Κοινές ρυθμίσεις**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα αρχεία xml στην διαδρομή `/data/data//shared_prefs/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο. -- **Βάσεις Δεδομένων**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα βάσεις δεδομένων sqlite στην διαδρομή `/data/data//databases/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο. +- **Κοινές ρυθμίσεις**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα xml αρχεία στη διαδρομή `/data/data//shared_prefs/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο. +- **Βάσεις Δεδομένων**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα sqlite βάσεις δεδομένων στη διαδρομή `/data/data//databases/` και μερικές φορές είναι δυνατό να βρείτε ευαίσθητες πληροφορίες σε καθαρό κείμενο σε αυτόν τον φάκελο. ### Σπασμένο TLS @@ -149,11 +149,11 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); **Χρήση Ανασφαλών και/ή Καταργημένων Αλγορίθμων** -Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **καταργημένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν οι **hashes** χρησιμοποιούνται για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικοί σε brute-force με salt. +Οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν **καταργημένους αλγορίθμους** για να εκτελούν **ελέγχους** εξουσιοδότησης, **να αποθηκεύουν** ή **να στέλνουν** δεδομένα. Ορισμένοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Αν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης, θα πρέπει να χρησιμοποιούνται hashes ανθεκτικά σε brute-force με salt. ### Άλλοι έλεγχοι -- Συνιστάται να **αποκρύπτετε το APK** για να δυσκολέψετε τη διαδικασία αντίστροφης μηχανικής για τους επιτιθέμενους. +- Συνιστάται να **παραποιήσετε το APK** για να δυσκολέψετε τη διαδικασία αντίστροφης μηχανικής για τους επιτιθέμενους. - Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να εκτελεί τους **δικούς της ελέγχους για να δει αν το κινητό είναι ριζωμένο** και να ενεργεί αναλόγως. - Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**. - Αν η εφαρμογή είναι ευαίσθητη (όπως οι τραπεζικές εφαρμογές), θα πρέπει να **ελέγχει την ακεραιότητά της πριν την εκτέλεση** για να ελέγξει αν έχει τροποποιηθεί. @@ -187,7 +187,7 @@ react-native-application.md ### Μυστικά που διαρρέουν -Μια εφαρμογή μπορεί να περιέχει μυστικά (API keys, κωδικούς πρόσβασης, κρυφές διευθύνσεις URL, υποτομείς...) μέσα σε αυτήν που μπορεί να είστε σε θέση να ανακαλύψετε. Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks). +Μια εφαρμογή μπορεί να περιέχει μυστικά (API keys, κωδικούς πρόσβασης, κρυφές διευθύνσεις URL, υποτομείς...) μέσα σε αυτήν που μπορεί να είστε σε θέση να ανακαλύψετε. Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως το [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks). ### Παράκαμψη Βιομετρικής Αυθεντικοποίησης @@ -230,14 +230,14 @@ content-protocol.md #### Χρησιμοποιώντας έναν εξομοιωτή -- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**οι τελευταίες εκδόσεις x86** υποστηρίζουν **ARM libraries** χωρίς να χρειάζεται ένας αργός εξομοιωτής arm). +- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**αυτό**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html) **οι τελευταίες εκδόσεις x86** υποστηρίζουν **ARM libraries** χωρίς να χρειάζεται ένας αργός εξομοιωτής arm). - Μάθετε πώς να το ρυθμίσετε σε αυτή τη σελίδα: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Δωρεάν έκδοση:** Personal Edition, πρέπει να δημιουργήσετε έναν λογαριασμό. _Συνιστάται να **κατεβάσετε** την έκδοση **ΜΕ**_ _**VirtualBox** για να αποφύγετε πιθανά σφάλματα._) +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Δωρεάν έκδοση:** Personal Edition, πρέπει να δημιουργήσετε έναν λογαριασμό. _Συνιστάται να **κατεβάσετε** την έκδοση **ΜΕ** _ _**VirtualBox** για να αποφύγετε πιθανά σφάλματα._) - [**Nox**](https://es.bignox.com) (Δωρεάν, αλλά δεν υποστηρίζει Frida ή Drozer). > [!NOTE] @@ -260,7 +260,7 @@ avd-android-virtual-device.md 5. Επιστρέψτε πίσω και θα βρείτε τις **Επιλογές προγραμματιστή**. > Μόλις εγκαταστήσετε την εφαρμογή, το πρώτο πράγμα που πρέπει να κάνετε είναι να την δοκιμάσετε και να ερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτήν.\ -> Θα προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας MobSF dynamic analysis + pidcat**, ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα. +> Θα προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας MobSF δυναμική ανάλυση + pidcat**, ώστε να μπορέσουμε να **μάθουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **καταγράφει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναθεωρήσετε αργότερα. ### Ακούσια Διαρροή Δεδομένων @@ -274,11 +274,11 @@ avd-android-virtual-device.md **Caching του Buffer Αντιγραφής/Επικόλλησης** -Το πλαίσιο **βάσει clipboard** του Android επιτρέπει τη λειτουργία αντιγραφής-επικόλλησης σε εφαρμογές, ωστόσο θέτει έναν κίνδυνο καθώς **άλλες εφαρμογές** μπορούν να **πρόσβαση** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιήσετε τις λειτουργίες αντιγραφής/επικόλλησης** για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικής κάρτας, για να αποτρέψετε διαρροές δεδομένων. +Το **clipboard-based** πλαίσιο του Android επιτρέπει τη λειτουργία αντιγραφής-επικόλλησης σε εφαρμογές, ωστόσο θέτει έναν κίνδυνο καθώς **άλλες εφαρμογές** μπορούν να **πρόσβαση** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιήσετε τις λειτουργίες αντιγραφής/επικόλλησης** για ευαίσθητες ενότητες μιας εφαρμογής, όπως λεπτομέρειες πιστωτικής κάρτας, για να αποτρέψετε διαρροές δεδομένων. **Crash Logs** -Αν μια εφαρμογή **καταρρεύσει** και **αποθηκεύσει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αναστραφεί. Για να μετριαστεί αυτός ο κίνδυνος, αποφύγετε την καταγραφή σε περιπτώσεις καταρρεύσεων, και αν τα logs πρέπει να μεταδοθούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω καναλιού SSL για ασφάλεια. +Αν μια εφαρμογή **καταρρεύσει** και **αποθηκεύσει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αναστραφεί. Για να μετριάσετε αυτόν τον κίνδυνο, αποφύγετε την καταγραφή σε καταρρεύσεις, και αν τα logs πρέπει να μεταδοθούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω καναλιού SSL για ασφάλεια. Ως pentester, **προσπαθήστε να ρίξετε μια ματιά σε αυτά τα logs**. @@ -303,13 +303,13 @@ avd-android-virtual-device.md ### Εκμετάλλευση εξαγόμενων Δραστηριοτήτων [**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Δραστηριότητα Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Επίσης, θυμηθείτε ότι ο κώδικας μιας δραστηριότητας ξεκινά στη μέθοδο **`onCreate`**. +Επίσης, θυμηθείτε ότι ο κώδικας μιας δραστηριότητας ξεκινά στη **μέθοδο `onCreate`**. **Παράκαμψη εξουσιοδότησης** Όταν μια Δραστηριότητα είναι εξαγόμενη, μπορείτε να καλέσετε την οθόνη της από μια εξωτερική εφαρμογή. Επομένως, αν μια δραστηριότητα με **ευαίσθητες πληροφορίες** είναι **εξαγόμενη**, θα μπορούσατε να **παράκαμψετε** τους **μηχανισμούς αυθεντικοποίησης** **για να την αποκτήσετε**. -[**Μάθετε πώς να εκμεταλλευτείτε τις εξαγόμενες δραστηριότητες με το Drozer.**](drozer-tutorial/#activities) +[**Μάθετε πώς να εκμεταλλευτείτε εξαγόμενες δραστηριότητες με το Drozer.**](drozer-tutorial/#activities) Μπορείτε επίσης να ξεκινήσετε μια εξαγόμενη δραστηριότητα από το adb: @@ -318,23 +318,23 @@ avd-android-virtual-device.md ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**ΣΗΜΕΙΩΣΗ**: Το MobSF θα ανιχνεύσει ως κακόβουλη τη χρήση του _**singleTask/singleInstance**_ ως `android:launchMode` σε μια δραστηριότητα, αλλά λόγω [αυτού](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), προφανώς αυτό είναι επικίνδυνο μόνο σε παλιές εκδόσεις (API εκδόσεις < 21). +**ΣΗΜΕΙΩΣΗ**: Το MobSF θα ανιχνεύσει ως κακόβουλη τη χρήση του _**singleTask/singleInstance**_ ως `android:launchMode` σε μια δραστηριότητα, αλλά λόγω [αυτού](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), προφανώς αυτό είναι επικίνδυνο μόνο σε παλιές εκδόσεις (εκδόσεις API < 21). > [!ΣΗΜΕΙΩΣΗ] > Σημειώστε ότι μια παράκαμψη εξουσιοδότησης δεν είναι πάντα ευπάθεια, θα εξαρτηθεί από το πώς λειτουργεί η παράκαμψη και ποιες πληροφορίες εκτίθενται. **Διαρροή ευαίσθητων πληροφοριών** -**Οι δραστηριότητες μπορούν επίσης να επιστρέφουν αποτελέσματα**. Εάν καταφέρετε να βρείτε μια εξαγόμενη και μη προστατευμένη δραστηριότητα που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει διαρροή ευαίσθητων πληροφοριών. +**Οι δραστηριότητες μπορούν επίσης να επιστρέφουν αποτελέσματα**. Αν καταφέρετε να βρείτε μια εξαγόμενη και μη προστατευμένη δραστηριότητα που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει διαρροή ευαίσθητων πληροφοριών. #### Tapjacking -Εάν δεν προληφθεί το tapjacking, θα μπορούσατε να εκμεταλλευτείτε την εξαγόμενη δραστηριότητα για να κάνετε τον **χρήστη να εκτελέσει απροσδόκητες ενέργειες**. Για περισσότερες πληροφορίες σχετικά με [**τι είναι το Tapjacking ακολουθήστε τον σύνδεσμο**](./#tapjacking). +Αν δεν προληφθεί το tapjacking, θα μπορούσατε να εκμεταλλευτείτε την εξαγόμενη δραστηριότητα για να κάνετε τον **χρήστη να εκτελέσει απροσδόκητες ενέργειες**. Για περισσότερες πληροφορίες σχετικά με [**τι είναι το Tapjacking ακολουθήστε τον σύνδεσμο**](./#tapjacking). ### Εκμετάλλευση Παρόχων Περιεχομένου - Πρόσβαση και χειρισμός ευαίσθητων πληροφοριών [**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένας Πάροχος Περιεχομένου.**](android-applications-basics.md#content-provider)\ -Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να **μοιράζονται δεδομένα**. Εάν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς θα μπορούσαν να είναι ευάλωτοι. +Οι πάροχοι περιεχομένου χρησιμοποιούνται βασικά για να **μοιράζονται δεδομένα**. Αν μια εφαρμογή έχει διαθέσιμους παρόχους περιεχομένου, μπορεί να είστε σε θέση να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Είναι επίσης ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals** καθώς θα μπορούσαν να είναι ευάλωτοι. [**Μάθετε πώς να εκμεταλλευτείτε τους Παρόχους Περιεχομένου με το Drozer.**](drozer-tutorial/#content-providers) @@ -343,7 +343,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity [**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι μια Υπηρεσία.**](android-applications-basics.md#services)\ Θυμηθείτε ότι οι ενέργειες μιας Υπηρεσίας ξεκινούν στη μέθοδο `onStartCommand`. -Μια υπηρεσία είναι βασικά κάτι που **μπορεί να λάβει δεδομένα**, **να τα επεξεργαστεί** και **να επιστρέψει** (ή όχι) μια απάντηση. Έτσι, εάν μια εφαρμογή εξάγει κάποιες υπηρεσίες, θα πρέπει να **ελέγξετε** τον **κώδικα** για να κατανοήσετε τι κάνει και να **δοκιμάσετε** το **δυναμικά** για να εξάγετε εμπιστευτικές πληροφορίες, παρακάμπτοντας μέτρα αυθεντικοποίησης...\ +Μια υπηρεσία είναι βασικά κάτι που **μπορεί να λάβει δεδομένα**, **να τα επεξεργαστεί** και **να επιστρέψει** (ή όχι) μια απάντηση. Έτσι, αν μια εφαρμογή εξάγει κάποιες υπηρεσίες, θα πρέπει να **ελέγξετε** τον **κώδικα** για να κατανοήσετε τι κάνει και να **δοκιμάσετε** το **δυναμικά** για να εξάγετε εμπιστευτικές πληροφορίες, παρακάμπτοντας μέτρα αυθεντικοποίησης...\ [**Μάθετε πώς να εκμεταλλευτείτε τις Υπηρεσίες με το Drozer.**](drozer-tutorial/#services) ### **Εκμετάλλευση Δέκτες Εκπομπών** @@ -387,7 +387,7 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το Ένα [ενδιαφέρον bug bounty report](https://hackerone.com/reports/855618) σχετικά με συνδέσμους (_/.well-known/assetlinks.json_). -### Αποτυχίες Επιθεώρησης και Επαλήθευσης Στρώματος Μεταφοράς +### Αποτυχίες Επιθεώρησης και Επαλήθευσης Επίπεδου Μεταφοράς - **Οι πιστοποιήσεις δεν ελέγχονται πάντα σωστά** από τις εφαρμογές Android. Είναι συνηθισμένο αυτές οι εφαρμογές να παραβλέπουν προειδοποιήσεις και να αποδέχονται αυτο-υπογεγραμμένες πιστοποιήσεις ή, σε ορισμένες περιπτώσεις, να επιστρέφουν στη χρήση συνδέσεων HTTP. - **Οι διαπραγματεύσεις κατά τη διάρκεια του SSL/TLS handshake είναι μερικές φορές αδύναμες**, χρησιμοποιώντας ανασφαλείς κρυπτογραφικές σουίτες. Αυτή η ευπάθεια καθιστά τη σύνδεση ευάλωτη σε επιθέσεις man-in-the-middle (MITM), επιτρέποντας στους επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα. @@ -399,23 +399,23 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το #### SSL Pinning -Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με βάση μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή του SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες. +Το SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το πιστοποιητικό του διακομιστή με μια γνωστή αντίγραφο που είναι αποθηκευμένο μέσα στην ίδια την εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή επιθέσεων MITM. Συνιστάται έντονα η εφαρμογή SSL Pinning για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες. -#### Επιθεώρηση Κυκλοφορίας +#### Επιθεώρηση Κίνησης -Για να επιθεωρήσετε την HTTP κυκλοφορία, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κυκλοφορία μπορεί να μην είναι ορατή μέσω του proxy. Για έναν οδηγό σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, [**κάντε κλικ εδώ**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +Για να επιθεωρήσετε την κίνηση HTTP, είναι απαραίτητο να **εγκαταστήσετε το πιστοποιητικό του εργαλείου proxy** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, η κρυπτογραφημένη κίνηση μπορεί να μην είναι ορατή μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός προσαρμοσμένου πιστοποιητικού CA, [**κάντε κλικ εδώ**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Ρύθμιση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κυκλοφορίας. Για οδηγίες σχετικά με την τροποποίηση της Ρύθμισης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το tutorial**](make-apk-accept-ca-certificate.md). +Οι εφαρμογές που στοχεύουν **API Level 24 και άνω** απαιτούν τροποποιήσεις στη Ρύθμιση Ασφαλείας Δικτύου για να αποδεχτούν το πιστοποιητικό CA του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κίνησης. Για οδηγίες σχετικά με την τροποποίηση της Ρύθμισης Ασφαλείας Δικτύου, [**ανατρέξτε σε αυτό το tutorial**](make-apk-accept-ca-certificate.md). #### Παράκαμψη SSL Pinning -Όταν έχει εφαρμοστεί το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της HTTPS κυκλοφορίας. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό: +Όταν έχει εφαρμοστεί το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της κίνησης HTTPS. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό: - Αυτόματα **τροποποιήστε** το **apk** για να **παράκαμψετε** το SSLPinning με [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το καλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε τη νέα, και αυτό δεν θα λειτουργήσει πάντα. - Μπορείτε να χρησιμοποιήσετε **Frida** (που συζητείται παρακάτω) για να παρακάμψετε αυτή την προστασία. Εδώ έχετε έναν οδηγό για τη χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - Μπορείτε επίσης να προσπαθήσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - Μπορείτε επίσης να προσπαθήσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας **MobSF dynamic analysis** (εξηγείται παρακάτω) -- Αν νομίζετε ότι υπάρχει κάποια κυκλοφορία που δεν καταγράφετε, μπορείτε να προσπαθήσετε να **προωθήσετε την κυκλοφορία στο burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) +- Αν νομίζετε ότι υπάρχει κάποια κίνηση που δεν καταγράφετε, μπορείτε να προσπαθήσετε να **προωθήσετε την κίνηση στο burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Αναζητώντας Κοινές Ευπάθειες Ιστού @@ -423,13 +423,13 @@ _Σημειώστε ότι μπορείτε να **παραλείψετε το ### Frida -[Frida](https://www.frida.re) είναι ένα εργαλείο δυναμικής οργάνωσης για προγραμματιστές, αναλυτές αντίστροφης μηχανικής και ερευνητές ασφαλείας.\ +[Frida](https://www.frida.re) είναι ένα εργαλείο δυναμικής εργονομίας για προγραμματιστές, αναλυτές αντίστροφης μηχανικής και ερευνητές ασφαλείας.\ **Μπορείτε να αποκτήσετε πρόσβαση σε εκτελούμενες εφαρμογές και να συνδέσετε μεθόδους σε πραγματικό χρόνο για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να εκτελέσετε διαφορετικό κώδικα...**\ Αν θέλετε να κάνετε pentest σε εφαρμογές Android πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida. - Μάθετε πώς να χρησιμοποιείτε το Frida: [**Frida tutorial**](frida-tutorial/) - Μερικά "GUI" για ενέργειες με το Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) -- Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) +- Το Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) - Μπορείτε να βρείτε μερικά καταπληκτικά σενάρια Frida εδώ: [**https://codeshare.frida.re/**](https://codeshare.frida.re) - Προσπαθήστε να παρακάμψετε μηχανισμούς anti-debugging / anti-frida φορτώνοντας το Frida όπως υποδεικνύεται στο [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs)) @@ -452,7 +452,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ``` ### **Ευαίσθητα δεδομένα στο Keystore** -Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα **δυνατό να αποκτηθεί πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε καθαρό κείμενο**, οι δοκιμές ασφάλειας θα πρέπει να ελέγχουν γι' αυτό ως χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να είναι σε θέση να κλέψει αυτά τα δεδομένα. +Στο Android, το Keystore είναι το καλύτερο μέρος για να αποθηκεύσετε ευαίσθητα δεδομένα, ωστόσο, με αρκετά δικαιώματα είναι ακόμα **δυνατό να αποκτηθεί πρόσβαση σε αυτό**. Καθώς οι εφαρμογές τείνουν να αποθηκεύουν εδώ **ευαίσθητα δεδομένα σε καθαρό κείμενο**, οι pentests θα πρέπει να ελέγχουν για αυτό ως χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να είναι σε θέση να κλέψει αυτά τα δεδομένα. Ακόμα και αν μια εφαρμογή αποθηκεύει δεδομένα στο keystore, τα δεδομένα θα πρέπει να είναι κρυπτογραφημένα. @@ -460,21 +460,21 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` -### **Αναγνώριση/Βιομετρική Παράκαμψη** +### **Παράκαμψη Δακτυλικών Αποτυπωμάτων/Βιομετρικών** Χρησιμοποιώντας το παρακάτω σενάριο Frida, θα μπορούσε να είναι δυνατό να **παρακαμφθεί η αυθεντικοποίηση δακτυλικών αποτυπωμάτων** που ενδέχεται να εκτελούν οι εφαρμογές Android προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:** ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` -### **Εικόνες Υποβάθρου** +### **Εικόνες Φόντου** -Όταν βάζετε μια εφαρμογή σε υποβάθρο, το Android αποθηκεύει μια **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, κάνοντάς την να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα. +Όταν βάζετε μια εφαρμογή σε φόντο, το Android αποθηκεύει μια **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν ανακτηθεί στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν από την εφαρμογή, κάνοντάς την να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα. Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημειώστε ότι χρειάζεστε root για να έχετε πρόσβαση σε αυτό). Τα στιγμιότυπα συνήθως αποθηκεύονται γύρω από: **`/data/system_ce/0/snapshots`** -Το Android παρέχει έναν τρόπο να **αποτρέψει την καταγραφή στιγμιότυπων οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες. +Το Android παρέχει έναν τρόπο να **αποτρέψει τη λήψη στιγμιότυπων οθόνης ρυθμίζοντας την παράμετρο διάταξης FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, το περιεχόμενο του παραθύρου θεωρείται ασφαλές, αποτρέποντας την εμφάνιση σε στιγμιότυπα οθόνης ή την προβολή σε μη ασφαλείς οθόνες. ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` @@ -495,7 +495,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); - Μπορεί να εκθέσει μη εξαγόμενα components και content providers στους επιτιθέμενους. - Η μετατροπή URL σε `Intent` του `WebView` μπορεί να διευκολύνει ακούσιες ενέργειες. -### Εισαγωγές Πελάτη Android και άλλες +### Εισαγωγές Client Side Android και άλλα Πιθανώς γνωρίζετε για αυτούς τους τύπους ευπαθειών από τον Ιστό. Πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια εφαρμογή Android: @@ -525,23 +525,23 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest Το MobSF επιτρέπει επίσης την **diff/Compare** ανάλυση και την ενσωμάτωση του **VirusTotal** (θα χρειαστεί να ρυθμίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ρυθμίσετε το `VT_UPLOAD` σε `False`, τότε το **hash** θα **ανεβεί** αντί για το αρχείο. -### Βοηθητική Δυναμική ανάλυση με το MobSF +### Βοηθητική Δυναμική ανάλυση με MobSF **MobSF** μπορεί επίσης να είναι πολύ χρήσιμο για **δυναμική ανάλυση** σε **Android**, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και το **genymotion** στον υπολογιστή σας (μια VM ή Docker δεν θα λειτουργήσει). _Σημείωση: Πρέπει να **ξεκινήσετε πρώτα μια VM στο genymotion** και **μετά το MobSF.**_\ Ο **δυναμικός αναλυτής MobSF** μπορεί να: - **Dump application data** (URLs, logs, clipboard, screenshots που κάνατε εσείς, screenshots που έγιναν από τον "**Exported Activity Tester**", emails, SQLite βάσεις δεδομένων, XML αρχεία και άλλα δημιουργημένα αρχεία). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots, πρέπει να πατήσετε όταν θέλετε ένα screenshot ή να πατήσετε "**Exported Activity Tester**" για να αποκτήσετε screenshots όλων των εξαγόμενων δραστηριοτήτων. - Capture **HTTPS traffic** -- Use **Frida** to obtain **runtime** **information** +- Χρησιμοποιήστε το **Frida** για να αποκτήσετε **runtime** **information** Από τις εκδόσεις Android **> 5**, θα **ξεκινήσει αυτόματα το Frida** και θα ρυθμίσει τις παγκόσμιες ρυθμίσεις **proxy** για να **καταγράψει** την κίνηση. Θα καταγράψει μόνο την κίνηση από την εφαρμογή που δοκιμάζεται. **Frida** -Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να **παρακάμψει το SSL pinning**, **ανίχνευση root** και **ανίχνευση debugger** και για να **παρακολουθήσει ενδιαφέροντα APIs**.\ +Από προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να **παρακάμψει το SSL pinning**, **root detection** και **debugger detection** και για να **παρακολουθήσει ενδιαφέροντα APIs**.\ Το MobSF μπορεί επίσης να **καλέσει εξαγόμενες δραστηριότητες**, να τραβήξει **screenshots** από αυτές και να τις **αποθηκεύσει** για την αναφορά. -Για να **ξεκινήσετε** τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και το "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε συνδεδεμένες μεθόδους, τα ορίσματα που περνιούνται και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\ +Για να **ξεκινήσετε** τη δυναμική δοκιμή πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που δημιουργούνται από τα Frida scripts και το "**Live API Monitor**" για να δείτε όλες τις κλήσεις σε hooked methods, τα παρακάτω επιχειρήματα και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά την πίεση του "Start Instrumentation").\ Το MobSF επιτρέπει επίσης να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των scripts σας στο MobSF χρησιμοποιήστε τη λειτουργία `send()`). Έχει επίσης **πολλά προ-γραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "**Frida Live Logs**"). ![](<../../images/image (419).png>) @@ -553,7 +553,7 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest - **Capture String Comparisons**: Μπορεί να είναι πολύ χρήσιμο. Θα **δείξει τις 2 συμβολοσειρές που συγκρίνονται** και αν το αποτέλεσμα ήταν True ή False. - **Enumerate Class Methods**: Βάλτε το όνομα της κλάσης (όπως "java.io.File") και θα εκτυπώσει όλες τις μεθόδους της κλάσης. - **Search Class Pattern**: Αναζητήστε κλάσεις κατά μοτίβο -- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api. +- **Trace Class Methods**: **Trace** μια **ολόκληρη κλάση** (δείτε τις εισόδους και τις εξόδους όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF παρακολουθεί πολλές ενδιαφέρουσες μεθόδους Android Api. Αφού επιλέξετε το βοηθητικό module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Intrumentation**" και θα δείτε όλες τις εξόδους στο "**Frida Live Logs**". @@ -595,7 +595,7 @@ receivers ### [Qark](https://github.com/linkedin/qark) -Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" αναπτυξιακό APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να κάνετε root τη συσκευή δοκιμής. +Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά αρκετές **ευπάθειες σχετικές με την ασφάλεια εφαρμογών Android**, είτε στον **κώδικα πηγής** είτε σε **πακεταρισμένα APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργεί ένα "Proof-of-Concept" αναπτυξιμό APK** και **εντολές ADB**, για να εκμεταλλευτεί κάποιες από τις ευπάθειες που βρέθηκαν (Εκτεθειμένες δραστηριότητες, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να κάνετε root τη συσκευή δοκιμής. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -617,7 +617,7 @@ reverse-apk relative/path/to/APP.apk Το SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, η οποία αναλύει αρχεία _.apk_ αναζητώντας ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APK και εφαρμόζοντας μια σειρά κανόνων για να ανιχνεύσει αυτές τις ευπάθειες. -Όλοι οι κανόνες είναι κεντραρισμένοι σε ένα αρχείο `rules.json`, και κάθε εταιρεία ή δοκιμαστής θα μπορούσε να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται. +Όλοι οι κανόνες είναι κεντραρισμένοι σε ένα αρχείο `rules.json`, και κάθε εταιρεία ή δοκιμαστής μπορεί να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται. Κατεβάστε τα τελευταία δυαδικά από τη [σελίδα λήψης](https://superanalyzer.rocks/download.html) ``` @@ -645,7 +645,7 @@ androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να ανιχνεύει και να προειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android. +**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να ανιχνεύσει και να προειδοποιήσει τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android. Η ανίχνευση πραγματοποιείται με την **στατική ανάλυση** του Dalvik bytecode της εφαρμογής, που αναπαρίσταται ως **Smali**, με τη βιβλιοθήκη [`androguard`](https://github.com/androguard/androguard). @@ -665,7 +665,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 - Αναλύει APKs χρησιμοποιώντας: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) - Εξάγει ιδιωτικές πληροφορίες από το APK χρησιμοποιώντας regexps. - Αναλύει το Manifest. -- Αναλύει βρέθηκαν domains χρησιμοποιώντας: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) και [whatweb](https://github.com/urbanadventurer/WhatWeb) +- Αναλύει βρεθέντα domains χρησιμοποιώντας: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) και [whatweb](https://github.com/urbanadventurer/WhatWeb) - Αποκωδικοποιεί APK μέσω [apk-deguard.com](http://www.apk-deguard.com) ### Koodous @@ -678,7 +678,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ### [ProGuard]() -Από [Wikipedia](): **ProGuard** είναι ένα εργαλείο γραμμής εντολών ανοιχτού κώδικα που μειώνει, βελτιστοποιεί και αποκρύπτει τον κώδικα Java. Είναι ικανό να βελτιστοποιεί τον bytecode καθώς και να ανιχνεύει και να αφαιρεί μη χρησιμοποιούμενες εντολές. Το ProGuard είναι δωρεάν λογισμικό και διανέμεται υπό την άδεια GNU General Public License, έκδοση 2. +Από [Wikipedia](): **ProGuard** είναι ένα εργαλείο γραμμής εντολών ανοιχτού κώδικα που μειώνει, βελτιστοποιεί και αποκρύπτει τον κώδικα Java. Είναι ικανό να βελτιστοποιεί bytecode καθώς και να ανιχνεύει και να αφαιρεί μη χρησιμοποιούμενες εντολές. Το ProGuard είναι δωρεάν λογισμικό και διανέμεται υπό την άδεια GNU General Public License, έκδοση 2. Το ProGuard διανέμεται ως μέρος του Android SDK και εκτελείται κατά την κατασκευή της εφαρμογής σε λειτουργία κυκλοφορίας. @@ -688,15 +688,15 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 (Από αυτόν τον οδηγό) Την τελευταία φορά που ελέγξαμε, η λειτουργία του Dexguard ήταν: -- φορτώστε έναν πόρο ως InputStream; +- φορτώστε μια πηγή ως InputStream; - τροφοδοτήστε το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το αποκρυπτογραφήσετε; - κάντε κάποια άχρηστη απόκρυψη για να σπαταλήσετε λίγα λεπτά χρόνου από έναν αναλυτή; - τροφοδοτήστε το αποκρυπτογραφημένο αποτέλεσμα σε ένα ZipInputStream για να αποκτήσετε ένα αρχείο DEX; -- τελικά φορτώστε το προκύπτον DEX ως Πόρο χρησιμοποιώντας τη μέθοδο `loadDex`. +- τελικά φορτώστε το προκύπτον DEX ως Πηγή χρησιμοποιώντας τη μέθοδο `loadDex`. ### [DeGuard](http://apk-deguard.com) -**Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.** +**Το DeGuard αντιστρέφει τη διαδικασία απόκρυψης που εκτελούν τα εργαλεία απόκρυψης του Android. Αυτό επιτρέπει πολλές αναλύσεις ασφάλειας, συμπεριλαμβανομένης της επιθεώρησης κώδικα και της πρόβλεψης βιβλιοθηκών.** Μπορείτε να ανεβάσετε ένα αποκρυπτογραφημένο APK στην πλατφόρμα τους. @@ -706,11 +706,11 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ### [Simplify](https://github.com/CalebFenton/simplify) -Είναι ένα **γενικό αποκρυπτογραφητή android.** Το Simplify **εκτελεί εικονικά μια εφαρμογή** για να κατανοήσει τη συμπεριφορά της και στη συνέχεια **προσπαθεί να βελτιστοποιήσει τον κώδικα** ώστε να συμπεριφέρεται ταυτόχρονα αλλά να είναι πιο εύκολο για έναν άνθρωπο να κατανοήσει. Κάθε τύπος βελτιστοποίησης είναι απλός και γενικός, οπότε δεν έχει σημασία ποιος είναι ο συγκεκριμένος τύπος απόκρυψης που χρησιμοποιείται. +Είναι ένα **γενικό εργαλείο αποκωδικοποίησης android.** Το Simplify **εκτελεί εικονικά μια εφαρμογή** για να κατανοήσει τη συμπεριφορά της και στη συνέχεια **προσπαθεί να βελτιστοποιήσει τον κώδικα** έτσι ώστε να συμπεριφέρεται ταυτόχρονα αλλά να είναι πιο εύκολο για έναν άνθρωπο να κατανοήσει. Κάθε τύπος βελτιστοποίησης είναι απλός και γενικός, οπότε δεν έχει σημασία ποιος είναι ο συγκεκριμένος τύπος απόκρυψης που χρησιμοποιείται. ### [APKiD](https://github.com/rednaga/APKiD) -Το APKiD σας δίνει πληροφορίες σχετικά με **πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακεταριστές**, **αποκρυπτογραφητές** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για Android. +Το APKiD σας δίνει πληροφορίες για **το πώς δημιουργήθηκε ένα APK**. Αναγνωρίζει πολλούς **μεταγλωττιστές**, **πακεταριστές**, **εργαλεία απόκρυψης** και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για το Android. ### Manual diff --git a/src/mobile-pentesting/android-app-pentesting/adb-commands.md b/src/mobile-pentesting/android-app-pentesting/adb-commands.md index d4f7866f9..e74756a1d 100644 --- a/src/mobile-pentesting/android-app-pentesting/adb-commands.md +++ b/src/mobile-pentesting/android-app-pentesting/adb-commands.md @@ -12,7 +12,7 @@ C:\Users\\AppData\Local\Android\sdk\platform-tools\adb.exe ``` adb devices ``` -Αυτό θα καταγράψει τις συνδεδεμένες συσκευές. Αν εμφανιστεί το "_**μη εξουσιοδοτημένο**_", αυτό σημαίνει ότι πρέπει να **ξεκλειδώσετε** το **κινητό** σας και να **αποδεχθείτε** τη σύνδεση. +Αυτό θα καταγράψει τις συνδεδεμένες συσκευές. Αν εμφανιστεί το "_**μη εξουσιοδοτημένο**_", αυτό σημαίνει ότι πρέπει να **ξεκλειδώσετε** το **κινητό** σας και να **αποδεχτείτε** τη σύνδεση. Αυτό υποδεικνύει στη συσκευή ότι πρέπει να ξεκινήσει έναν adb server στη θύρα 5555: ``` @@ -159,7 +159,7 @@ adb shell ``` ### adb shell \ -Εκτελέστε μια εντολή μέσα στη συσκευή +Εκτέλεση μιας εντολής μέσα στη συσκευή ```bash adb shell ls ``` @@ -196,7 +196,7 @@ adb root ```bash adb sideload ``` -flashing/restoring Android update.zip πακέτα. +flashing/restoring Android update.zip packages. # Logs @@ -257,7 +257,7 @@ adb shell dumpsys meminfo adb shell dumpsys battery ``` -Σημειώσεις: Μια κινητή συσκευή με ενεργοποιημένες τις Επιλογές Προγραμματιστή που τρέχει Android 5.0 ή υψηλότερη έκδοση. +Σημειώσεις: Μια κινητή συσκευή με ενεργοποιημένες τις Επιλογές προγραμματιστή που τρέχει Android 5.0 ή υψηλότερη έκδοση. ```bash adb shell dumpsys batterystats collects battery data from your device ``` diff --git a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md index 9d16d58ed..c601c1467 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md +++ b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md @@ -20,12 +20,12 @@ ### Sandbox -Η **Sandbox Εφαρμογών Android** επιτρέπει να εκτελούνται **κάθε εφαρμογή** ως **ξεχωριστή διαδικασία υπό μια ξεχωριστή ταυτότητα χρήστη**. Κάθε διαδικασία έχει τη δική της εικονική μηχανή, έτσι ο κώδικας μιας εφαρμογής εκτελείται απομονωμένος από άλλες εφαρμογές.\ +Η **Sandbox Εφαρμογών Android** επιτρέπει να εκτελούνται **κάθε εφαρμογή** ως **ξεχωριστή διαδικασία υπό μια ξεχωριστή Ταυτότητα Χρήστη**. Κάθε διαδικασία έχει τη δική της εικονική μηχανή, έτσι ο κώδικας μιας εφαρμογής εκτελείται απομονωμένος από άλλες εφαρμογές.\ Από το Android 5.0(L) **επιβάλλεται το SELinux**. Βασικά, το SELinux αρνείται όλες τις αλληλεπιδράσεις διαδικασιών και στη συνέχεια δημιουργεί πολιτικές για **να επιτρέπει μόνο τις αναμενόμενες αλληλεπιδράσεις μεταξύ τους**. ### Άδειες -Όταν εγκαθιστάτε μια **εφαρμογή και ζητά άδειες**, η εφαρμογή ζητά τις άδειες που έχουν ρυθμιστεί στα στοιχεία **`uses-permission`** στο αρχείο **AndroidManifest.xml**. Το στοιχείο **uses-permission** υποδεικνύει το όνομα της ζητούμενης άδειας μέσα στο **attribute name**. Έχει επίσης το **maxSdkVersion** attribute που σταματά να ζητά άδειες σε εκδόσεις υψηλότερες από αυτή που έχει καθοριστεί.\ +Όταν εγκαθιστάτε μια **εφαρμογή και ζητά άδειες**, η εφαρμογή ζητά τις άδειες που έχουν ρυθμιστεί στα στοιχεία **`uses-permission`** στο αρχείο **AndroidManifest.xml**. Το στοιχείο **uses-permission** υποδεικνύει το όνομα της ζητούμενης άδειας μέσα στο **attribute name**. Έχει επίσης το **maxSdkVersion** attribute που σταματά να ζητά άδειες σε εκδόσεις υψηλότερες από αυτήν που έχει καθοριστεί.\ Σημειώστε ότι οι εφαρμογές Android δεν χρειάζεται να ζητούν όλες τις άδειες στην αρχή, μπορούν επίσης να **ζητούν άδειες δυναμικά**, αλλά όλες οι άδειες πρέπει να είναι **δηλωμένες** στο **μανιφέστο**. Όταν μια εφαρμογή εκθέτει λειτουργικότητα, μπορεί να περιορίσει την **πρόσβαση μόνο σε εφαρμογές που έχουν μια συγκεκριμένη άδεια**.\ @@ -37,7 +37,7 @@ - **Normal**: Χρησιμοποιείται όταν δεν υπάρχουν **γνωστές απειλές** για την εφαρμογή. Ο χρήστης **δεν απαιτείται να την εγκρίνει**. - **Dangerous**: Υποδεικνύει ότι η άδεια παρέχει στην αιτούμενη εφαρμογή κάποια **υψηλή πρόσβαση**. **Οι χρήστες ζητούνται να τις εγκρίνουν**. - **Signature**: Μόνο **εφαρμογές που έχουν υπογραφεί με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο** μπορούν να λάβουν άδεια. Αυτός είναι ο ισχυρότερος τύπος προστασίας. -- **SignatureOrSystem**: Μόνο **εφαρμογές που έχουν υπογραφεί με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο ή **εφαρμογές που εκτελούνται με πρόσβαση επιπέδου συστήματος** μπορούν να λάβουν άδειες. +- **SignatureOrSystem**: Μόνο **εφαρμογές που έχουν υπογραφεί με το ίδιο πιστοποιητικό με αυτό που εξάγει το στοιχείο ή **εφαρμογές που εκτελούνται με πρόσβαση σε επίπεδο συστήματος** μπορούν να λάβουν άδειες. ## Προεγκατεστημένες Εφαρμογές @@ -59,10 +59,10 @@ ### ROMs -Είναι δυνατή η **αντικατάσταση του OS εγκαθιστώντας ένα προσαρμοσμένο firmware**. Κάνοντας αυτό, είναι δυνατό να επεκταθεί η χρησιμότητα μιας παλιάς συσκευής, να παρακαμφθούν οι περιορισμοί λογισμικού ή να αποκτηθεί πρόσβαση στον τελευταίο κώδικα Android.\ +Είναι δυνατόν να **αντικαταστήσετε το OS εγκαθιστώντας ένα προσαρμοσμένο firmware**. Κάνοντας αυτό, είναι δυνατό να επεκτείνετε τη χρησιμότητα μιας παλιάς συσκευής, να παρακάμψετε περιορισμούς λογισμικού ή να αποκτήσετε πρόσβαση στον τελευταίο κώδικα Android.\ **OmniROM** και **LineageOS** είναι δύο από τα πιο δημοφιλή firmware που χρησιμοποιούνται. -Σημειώστε ότι **δεν είναι πάντα απαραίτητο να κάνετε root τη συσκευή** για να εγκαταστήσετε ένα προσαρμοσμένο firmware. **Ορισμένοι κατασκευαστές επιτρέπουν** την ξεκλείδωσή των bootloaders τους με έναν καλά τεκμηριωμένο και ασφαλή τρόπο. +Σημειώστε ότι **δεν είναι πάντα απαραίτητο να κάνετε root τη συσκευή** για να εγκαταστήσετε ένα προσαρμοσμένο firmware. **Ορισμένοι κατασκευαστές επιτρέπουν** την ξεκλείδωσή των bootloaders τους με καλά τεκμηριωμένο και ασφαλή τρόπο. ### Επιπτώσεις @@ -79,7 +79,7 @@ - META-INF/ - Εδώ βρίσκεται το Πιστοποιητικό! - **classes.dex** -- Περιέχει τον bytecode Dalvik, που αντιπροσωπεύει τον μεταγλωττισμένο κώδικα Java (ή Kotlin) που εκτελεί η εφαρμογή από προεπιλογή. +- Περιέχει Dalvik bytecode, που αντιπροσωπεύει τον μεταγλωττισμένο κώδικα Java (ή Kotlin) που εκτελεί η εφαρμογή από προεπιλογή. - lib/ - Περιέχει εγγενείς βιβλιοθήκες, διαχωρισμένες κατά αρχιτεκτονική CPU σε υποκαταλόγους. - `armeabi`: κώδικας για επεξεργαστές ARM @@ -93,7 +93,7 @@ ### **Dalvik & Smali** -Στην ανάπτυξη Android, χρησιμοποιείται **Java ή Kotlin** για τη δημιουργία εφαρμογών. Αντί να χρησιμοποιεί την JVM όπως στις επιτραπέζιες εφαρμογές, το Android μεταγλωττίζει αυτόν τον κώδικα σε **Dalvik Executable (DEX) bytecode**. Παλαιότερα, η εικονική μηχανή Dalvik χειριζόταν αυτόν τον bytecode, αλλά τώρα, η Android Runtime (ART) αναλαμβάνει σε νεότερες εκδόσεις Android. +Στην ανάπτυξη Android, χρησιμοποιείται **Java ή Kotlin** για τη δημιουργία εφαρμογών. Αντί να χρησιμοποιεί την JVM όπως στις επιτραπέζιες εφαρμογές, το Android μεταγλωττίζει αυτόν τον κώδικα σε **Dalvik Executable (DEX) bytecode**. Παλαιότερα, η εικονική μηχανή Dalvik χειριζόταν αυτόν τον bytecode, αλλά τώρα, το Android Runtime (ART) αναλαμβάνει σε νεότερες εκδόσεις Android. Για την αντίστροφη μηχανική, το **Smali** γίνεται κρίσιμο. Είναι η αναγνώσιμη από άνθρωπο έκδοση του DEX bytecode, λειτουργώντας σαν γλώσσα συναρμολόγησης μεταφράζοντας τον πηγαίο κώδικα σε εντολές bytecode. Το Smali και το baksmali αναφέρονται στα εργαλεία συναρμολόγησης και αποσυναρμολόγησης σε αυτό το πλαίσιο. @@ -110,7 +110,7 @@ - Για να αποκτήσει πρόσβαση σε δεδομένα μέσω ContentProviders - Ως callbacks για να χειριστεί γεγονότα -Αν είναι ευάλωτα, **τα Intents μπορούν να χρησιμοποιηθούν για να εκτελέσουν μια ποικιλία επιθέσεων**. +Αν είναι ευάλωτα, **τα Intents μπορούν να χρησιμοποιηθούν για την εκτέλεση ποικιλίας επιθέσεων**. ### Intent-Filter @@ -118,7 +118,7 @@ Τα Intent Filters αποτελούνται από κατηγορίες, ενέργειες και φίλτρα δεδομένων, με τη δυνατότητα να περιλαμβάνουν επιπλέον μεταδεδομένα. Αυτή η ρύθμιση επιτρέπει στα στοιχεία να χειρίζονται συγκεκριμένα Intents που ταιριάζουν με τα δηλωμένα κριτήρια. -Ένας κρίσιμος τομέας των στοιχείων Android (δραστηριότητες/υπηρεσίες/παρόχοι περιεχομένου/δέκτες ραδιοφωνικών εκπομπών) είναι η ορατότητά τους ή η **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδράσει με άλλες εφαρμογές αν είναι **`exported`** με τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter γι' αυτό στο μανιφέστο. Ωστόσο, υπάρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά, διασφαλίζοντας ότι δεν αλληλεπιδρούν με άλλες εφαρμογές κατά λάθος. Αυτό επιτυγχάνεται ρυθμίζοντας το **`exported`** attribute σε **`false`** στις δηλώσεις μανιφέστου τους. +Μια κρίσιμη πτυχή των στοιχείων Android (δραστηριότητες/υπηρεσίες/παρόχοι περιεχομένου/δέκτες ραδιοφωνικών εκπομπών) είναι η ορατότητά τους ή η **δημόσια κατάσταση**. Ένα στοιχείο θεωρείται δημόσιο και μπορεί να αλληλεπιδράσει με άλλες εφαρμογές αν είναι **`exported`** με τιμή **`true`** ή αν έχει δηλωθεί ένα Intent Filter γι' αυτό στο μανιφέστο. Ωστόσο, υπάρχει τρόπος για τους προγραμματιστές να κρατήσουν αυτά τα στοιχεία ιδιωτικά, διασφαλίζοντας ότι δεν αλληλεπιδρούν με άλλες εφαρμογές κατά λάθος. Αυτό επιτυγχάνεται ρυθμίζοντας το **`exported`** attribute σε **`false`** στις δηλώσεις μανιφέστου τους. Επιπλέον, οι προγραμματιστές έχουν τη δυνατότητα να ασφαλίσουν περαιτέρω την πρόσβαση σε αυτά τα στοιχεία απαιτώντας συγκεκριμένες άδειες. Το **`permission`** attribute μπορεί να ρυθμιστεί ώστε να επιβάλλει ότι μόνο οι εφαρμογές με την καθορισμένη άδεια μπορούν να έχουν πρόσβαση στο στοιχείο, προσθέτοντας ένα επιπλέον επίπεδο ασφάλειας και ελέγχου σχετικά με το ποιος μπορεί να αλληλεπιδράσει με αυτό. ```java @@ -145,15 +145,15 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:")); ``` Ένα intent-filter πρέπει να ταιριάζει με την **ενέργεια**, **δεδομένα** και **κατηγορία** για να λάβει ένα μήνυμα. -Η διαδικασία "λύσης intent" καθορίζει ποια εφαρμογή θα λάβει κάθε μήνυμα. Αυτή η διαδικασία εξετάζει το **χαρακτηριστικό προτεραιότητας**, το οποίο μπορεί να οριστεί στην **δήλωση intent-filter**, και **αυτό με την υψηλότερη προτεραιότητα θα επιλεγεί**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Εάν προκύψει μια **σύγκρουση**, εμφανίζεται ένα παράθυρο "chooser" ώστε ο **χρήστης να αποφασίσει**. +Η διαδικασία "Επίλυσης Intent" καθορίζει ποια εφαρμογή θα λάβει κάθε μήνυμα. Αυτή η διαδικασία εξετάζει το **χαρακτηριστικό προτεραιότητας**, το οποίο μπορεί να οριστεί στην **δήλωση intent-filter**, και **αυτό με την υψηλότερη προτεραιότητα θα επιλεγεί**. Αυτή η προτεραιότητα μπορεί να οριστεί μεταξύ -1000 και 1000 και οι εφαρμογές μπορούν να χρησιμοποιήσουν την τιμή `SYSTEM_HIGH_PRIORITY`. Εάν προκύψει μια **σύγκρουση**, εμφανίζεται ένα παράθυρο "chooser" ώστε ο **χρήστης να αποφασίσει**. -### Explicit Intents +### Ρητές Intents -Ένα explicit intent καθορίζει το όνομα της κλάσης που στοχεύει: +Μια ρητή πρόθεση καθορίζει το όνομα της κλάσης που στοχεύει: ```java Intent downloadIntent = new (this, DownloadService.class): ``` -Σε άλλες εφαρμογές, προκειμένου να αποκτήσετε πρόσβαση στην προηγουμένως δηλωμένη πρόθεση, μπορείτε να χρησιμοποιήσετε: +Σε άλλες εφαρμογές, για να αποκτήσετε πρόσβαση στην προηγουμένως δηλωμένη πρόθεση, μπορείτε να χρησιμοποιήσετε: ```java Intent intent = new Intent(); intent.setClassName("com.other.app", "com.other.app.ServiceName"); @@ -165,18 +165,18 @@ context.startService(intent); ### Broadcast Intents -Σε αντίθεση με τις προηγούμενες προθέσεις, οι οποίες γίνονται δεκτές μόνο από μία εφαρμογή, οι broadcast intents **μπορούν να γίνουν δεκτές από πολλές εφαρμογές**. Ωστόσο, από την έκδοση API 14, είναι **δυνατό να καθοριστεί η εφαρμογή που θα λάβει** το μήνυμα χρησιμοποιώντας το Intent.set Package. +Σε αντίθεση με τις προηγούμενες προθέσεις, οι οποίες γίνονται δεκτές μόνο από μία εφαρμογή, οι broadcast intents **μπορούν να γίνουν δεκτές από πολλές εφαρμογές**. Ωστόσο, από την έκδοση API 14, είναι **δυνατό να καθοριστεί η εφαρμογή που θα λάβει** το μήνυμα χρησιμοποιώντας το Intent.setPackage. Εναλλακτικά, είναι επίσης δυνατό να **καθοριστεί μια άδεια κατά την αποστολή του broadcast**. Η εφαρμογή παραλήπτης θα χρειαστεί να έχει αυτή την άδεια. -Υπάρχουν **δύο τύποι** Broadcasts: **Normal** (ασύγχρονα) και **Ordered** (συγχρονισμένα). Η **σειρά** βασίζεται στην **καθορισμένη προτεραιότητα εντός του στοιχείου παραλήπτη**. **Κάθε εφαρμογή μπορεί να επεξεργαστεί, να μεταφέρει ή να απορρίψει το Broadcast.** +Υπάρχουν **δύο τύποι** Broadcasts: **Normal** (ασύγχρονα) και **Ordered** (συγχρονισμένα). Η **σειρά** βασίζεται στην **καθορισμένη προτεραιότητα μέσα στο στοιχείο παραλήπτη**. **Κάθε εφαρμογή μπορεί να επεξεργαστεί, να μεταφέρει ή να απορρίψει το Broadcast.** Είναι δυνατό να **σταλεί** ένα **broadcast** χρησιμοποιώντας τη λειτουργία `sendBroadcast(intent, receiverPermission)` από την κλάση `Context`.\ Μπορείτε επίσης να χρησιμοποιήσετε τη λειτουργία **`sendBroadcast`** από τον **`LocalBroadCastManager`** που διασφαλίζει ότι το **μήνυμα δεν θα φύγει ποτέ από την εφαρμογή**. Χρησιμοποιώντας αυτό, δεν θα χρειαστεί καν να εξάγετε ένα συστατικό παραλήπτη. ### Sticky Broadcasts -Αυτού του είδους οι Broadcasts **μπορούν να προσπελαστούν πολύ μετά την αποστολή τους**.\ +Αυτού του είδους τα Broadcasts **μπορούν να προσπελαστούν πολύ μετά την αποστολή τους**.\ Αυτά καταργήθηκαν στην έκδοση API 21 και συνιστάται να **μην τα χρησιμοποιείτε**.\ **Επιτρέπουν σε οποιαδήποτε εφαρμογή να υποκλέψει τα δεδομένα, αλλά και να τα τροποποιήσει.** @@ -184,7 +184,7 @@ context.startService(intent); ## Deep links / URL schemes -Στις εφαρμογές Android, οι **deep links** χρησιμοποιούνται για να ξεκινήσουν μια ενέργεια (Intent) απευθείας μέσω ενός URL. Αυτό γίνεται δηλώνοντας ένα συγκεκριμένο **URL scheme** εντός μιας δραστηριότητας. Όταν μια συσκευή Android προσπαθεί να **πρόσβαση σε ένα URL με αυτό το scheme**, η καθορισμένη δραστηριότητα εντός της εφαρμογής εκκινείται. +Στις εφαρμογές Android, οι **deep links** χρησιμοποιούνται για να ξεκινήσουν μια ενέργεια (Intent) απευθείας μέσω ενός URL. Αυτό γίνεται δηλώνοντας ένα συγκεκριμένο **URL scheme** μέσα σε μια δραστηριότητα. Όταν μια συσκευή Android προσπαθεί να **πρόσβαση σε ένα URL με αυτό το scheme**, η καθορισμένη δραστηριότητα μέσα στην εφαρμογή εκκινείται. Το scheme πρέπει να δηλωθεί στο **`AndroidManifest.xml`** αρχείο: ```xml @@ -246,11 +246,11 @@ android:host="example" ``` Όχι όλες οι εφαρμογές χρειάζονται μια δραστηριότητα εκκίνησης, ειδικά αυτές χωρίς διεπαφή χρήστη, όπως οι υπηρεσίες φόντου. -Οι δραστηριότητες μπορούν να γίνουν διαθέσιμες σε άλλες εφαρμογές ή διεργασίες σημειώνοντάς τες ως "εξαγόμενες" στο μανιφέστο. Αυτή η ρύθμιση επιτρέπει σε άλλες εφαρμογές να ξεκινούν αυτή τη δραστηριότητα: +Οι δραστηριότητες μπορούν να γίνουν διαθέσιμες σε άλλες εφαρμογές ή διαδικασίες σημειώνοντάς τες ως "εξαγόμενες" στο μανιφέστο. Αυτή η ρύθμιση επιτρέπει σε άλλες εφαρμογές να ξεκινούν αυτή τη δραστηριότητα: ```markdown ``` -Ωστόσο, η πρόσβαση σε μια δραστηριότητα από άλλη εφαρμογή δεν είναι πάντα κίνδυνος ασφαλείας. Η ανησυχία προκύπτει αν ευαίσθητα δεδομένα μοιράζονται ακατάλληλα, κάτι που θα μπορούσε να οδηγήσει σε διαρροές πληροφοριών. +Ωστόσο, η πρόσβαση σε μια δραστηριότητα από μια άλλη εφαρμογή δεν είναι πάντα κίνδυνος ασφαλείας. Η ανησυχία προκύπτει αν ευαίσθητα δεδομένα μοιράζονται ακατάλληλα, κάτι που θα μπορούσε να οδηγήσει σε διαρροές πληροφοριών. Ο κύκλος ζωής μιας δραστηριότητας **ξεκινά με τη μέθοδο onCreate**, ρυθμίζοντας το UI και προετοιμάζοντας τη δραστηριότητα για αλληλεπίδραση με τον χρήστη. @@ -286,7 +286,7 @@ super.onCreate(); **Broadcast receivers** λειτουργούν ως ακροατές σε ένα σύστημα μηνυμάτων, επιτρέποντας σε πολλές εφαρμογές να ανταποκριθούν στα ίδια μηνύματα από το σύστημα. Μια εφαρμογή μπορεί να **καταχωρήσει έναν δέκτη** με **δύο κύριους τρόπους**: μέσω του **Manifest** της εφαρμογής ή **δυναμικά** μέσα στον κώδικα της εφαρμογής μέσω του **`registerReceiver`** API. Στο Manifest, οι εκπομπές φιλτράρονται με άδειες, ενώ οι δυναμικά καταχωρημένοι δέκτες μπορούν επίσης να καθορίσουν άδειες κατά την καταχώρηση. -**Intent filters** είναι κρίσιμα και στους δύο τρόπους καταχώρησης, καθορίζοντας ποιες εκπομπές ενεργοποιούν τον δέκτη. Μόλις σταλεί μια αντίστοιχη εκπομπή, η μέθοδος **`onReceive`** του δέκτη καλείται, επιτρέποντας στην εφαρμογή να αντιδράσει ανάλογα, όπως προσαρμόζοντας τη συμπεριφορά της σε μια ειδοποίηση χαμηλής μπαταρίας. +**Intent filters** είναι κρίσιμα και στις δύο μεθόδους καταχώρησης, καθορίζοντας ποιες εκπομπές ενεργοποιούν τον δέκτη. Μόλις σταλεί μια αντίστοιχη εκπομπή, η μέθοδος **`onReceive`** του δέκτη καλείται, επιτρέποντας στην εφαρμογή να αντιδράσει αναλόγως, όπως η προσαρμογή της συμπεριφοράς σε απάντηση σε μια ειδοποίηση χαμηλής μπαταρίας. Οι εκπομπές μπορεί να είναι είτε **ασύγχρονες**, φτάνοντας σε όλους τους δέκτες χωρίς σειρά, είτε **συγχρονισμένες**, όπου οι δέκτες λαμβάνουν την εκπομπή με βάση καθορισμένες προτεραιότητες. Ωστόσο, είναι σημαντικό να σημειωθεί ο πιθανός κίνδυνος ασφαλείας, καθώς οποιαδήποτε εφαρμογή μπορεί να δώσει προτεραιότητα στον εαυτό της για να παρεμποδίσει μια εκπομπή. @@ -298,7 +298,7 @@ super.onCreate(); Η επικύρωση εισόδου είναι πρωταρχικής σημασίας για την αποφυγή ευπαθειών, όπως η SQL injection. Οι Content Providers υποστηρίζουν βασικές λειτουργίες: `insert()`, `update()`, `delete()`, και `query()`, διευκολύνοντας τη χειρισμό και την κοινή χρήση δεδομένων μεταξύ εφαρμογών. -**FileProvider**, ένας εξειδικευμένος Content Provider, επικεντρώνεται στην ασφαλή κοινή χρήση αρχείων. Ορίζεται στο manifest της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο πρόσβασης σε φακέλους, που δηλώνονται με `android:exported` και `android:resource` που δείχνουν στις ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά την κοινή χρήση καταλόγων για την αποφυγή της τυχαίας έκθεσης ευαίσθητων δεδομένων. +**FileProvider**, ένας εξειδικευμένος Content Provider, επικεντρώνεται στην ασφαλή κοινή χρήση αρχείων. Ορίζεται στο manifest της εφαρμογής με συγκεκριμένα χαρακτηριστικά για τον έλεγχο πρόσβασης σε φακέλους, που δηλώνονται με `android:exported` και `android:resource` που δείχνουν στις ρυθμίσεις φακέλων. Συνιστάται προσοχή κατά την κοινή χρήση καταλόγων για να αποφευχθεί η τυχαία έκθεση ευαίσθητων δεδομένων. Παράδειγμα δήλωσης manifest για FileProvider: ```xml @@ -323,7 +323,7 @@ android:resource="@xml/filepaths" /> ## WebViews -Τα WebViews είναι σαν **μικροί περιηγητές ιστού** μέσα σε εφαρμογές Android, αντλώντας περιεχόμενο είτε από το διαδίκτυο είτε από τοπικά αρχεία. Αντιμετωπίζουν παρόμοιους κινδύνους με τους κανονικούς περιηγητές, ωστόσο υπάρχουν τρόποι για να **μειωθούν αυτοί οι κίνδυνοι** μέσω συγκεκριμένων **ρυθμίσεων**. +Τα WebViews είναι σαν **μικροί περιηγητές ιστού** μέσα σε εφαρμογές Android, αντλώντας περιεχόμενο είτε από το διαδίκτυο είτε από τοπικά αρχεία. Αντιμετωπίζουν παρόμοιους κινδύνους με τους κανονικούς περιηγητές, ωστόσο υπάρχουν τρόποι για **μείωση αυτών των κινδύνων** μέσω συγκεκριμένων **ρυθμίσεων**. Η Android προσφέρει δύο κύριους τύπους WebView: diff --git a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md index eb33772c4..1d616add8 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -8,10 +8,10 @@ Ακολουθεί μια γρήγορη ανάλυση των μεταβάσεων δραστηριοτήτων: -- **Activity 1** ξεκινά ως η μοναδική δραστηριότητα στο προσκήνιο. -- Η εκκίνηση της **Activity 2** σπρώχνει την **Activity 1** στο back stack, φέρνοντας την **Activity 2** στο προσκήνιο. +- **Activity 1** ξεκινά ως η μοναδική δραστηριότητα στο foreground. +- Η εκκίνηση της **Activity 2** σπρώχνει την **Activity 1** στο back stack, φέρνοντας την **Activity 2** στο foreground. - Η εκκίνηση της **Activity 3** μετακινεί την **Activity 1** και την **Activity 2** πιο πίσω στο stack, με την **Activity 3** τώρα μπροστά. -- Το κλείσιμο της **Activity 3** φέρνει την **Activity 2** πίσω στο προσκήνιο, επιδεικνύοντας τον απλοποιημένο μηχανισμό πλοήγησης εργασιών του Android. +- Το κλείσιμο της **Activity 3** φέρνει την **Activity 2** πίσω στο foreground, επιδεικνύοντας τον απλοποιημένο μηχανισμό πλοήγησης εργασιών του Android. ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) @@ -19,19 +19,19 @@ ### Overview of Task Affinity and Launch Modes -Στις εφαρμογές Android, η **task affinity** καθορίζει την προτιμώμενη task μιας δραστηριότητας, ευθυγραμμισμένη συνήθως με το όνομα πακέτου της εφαρμογής. Αυτή η ρύθμιση είναι καθοριστική για τη δημιουργία μιας εφαρμογής proof-of-concept (PoC) για την επίδειξη της επίθεσης. +Στις εφαρμογές Android, η **task affinity** καθορίζει την προτιμώμενη εργασία μιας δραστηριότητας, ευθυγραμμισμένη συνήθως με το όνομα πακέτου της εφαρμογής. Αυτή η ρύθμιση είναι καθοριστική για τη δημιουργία μιας εφαρμογής proof-of-concept (PoC) για την επίδειξη της επίθεσης. ### Launch Modes -Το χαρακτηριστικό `launchMode` κατευθύνει τη διαχείριση των παραδειγμάτων δραστηριοτήτων μέσα σε tasks. Η λειτουργία **singleTask** είναι κρίσιμη για αυτή την επίθεση, καθορίζοντας τρία σενάρια με βάση τα υπάρχοντα παραδείγματα δραστηριοτήτων και τις αντιστοιχίες task affinity. Η εκμετάλλευση βασίζεται στην ικανότητα της εφαρμογής του επιτιθέμενου να μιμείται την task affinity της στοχευμένης εφαρμογής, παραπλανώντας το σύστημα Android να εκκινήσει την εφαρμογή του επιτιθέμενου αντί για την προοριζόμενη στόχο. +Το χαρακτηριστικό `launchMode` κατευθύνει τη διαχείριση των περιπτώσεων δραστηριοτήτων μέσα σε εργασίες. Η λειτουργία **singleTask** είναι καθοριστική για αυτή την επίθεση, καθορίζοντας τρία σενάρια με βάση τις υπάρχουσες περιπτώσεις δραστηριοτήτων και τις αντιστοιχίες task affinity. Η εκμετάλλευση βασίζεται στην ικανότητα της εφαρμογής του επιτιθέμενου να μιμείται την task affinity της στοχευμένης εφαρμογής, παραπλανώντας το σύστημα Android να εκκινήσει την εφαρμογή του επιτιθέμενου αντί για την προοριζόμενη στόχο. ### Detailed Attack Steps 1. **Malicious App Installation**: Το θύμα εγκαθιστά την εφαρμογή του επιτιθέμενου στη συσκευή του. 2. **Initial Activation**: Το θύμα ανοίγει πρώτα την κακόβουλη εφαρμογή, προετοιμάζοντας τη συσκευή για την επίθεση. 3. **Target App Launch Attempt**: Το θύμα προσπαθεί να ανοίξει την στοχευμένη εφαρμογή. -4. **Hijack Execution**: Λόγω της αντιστοιχίας task affinity, η κακόβουλη εφαρμογή εκκινείται αντί της στοχευμένης εφαρμογής. -5. **Deception**: Η κακόβουλη εφαρμογή παρουσιάζει μια ψεύτικη οθόνη σύνδεσης που μοιάζει με την στοχευμένη εφαρμογή, εξαπατώντας τον χρήστη να εισάγει ευαίσθητες πληροφορίες. +4. **Hijack Execution**: Λόγω της αντιστοιχίας task affinity, η κακόβουλη εφαρμογή εκκινείται στη θέση της στοχευμένης εφαρμογής. +5. **Deception**: Η κακόβουλη εφαρμογή παρουσιάζει μια ψεύτικη οθόνη σύνδεσης που μοιάζει με την στοχευμένη εφαρμογή, παραπλανώντας τον χρήστη να εισάγει ευαίσθητες πληροφορίες. Για μια πρακτική εφαρμογή αυτής της επίθεσης, ανατρέξτε στο αποθετήριο Task Hijacking Strandhogg στο GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg). diff --git a/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md b/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md index cd731b9e6..f7cc10643 100644 --- a/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md +++ b/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md @@ -6,7 +6,7 @@ ### [JD-Gui](https://github.com/java-decompiler/jd-gui) -Ως ο πρωτοπόρος GUI Java decompiler, **JD-Gui** σας επιτρέπει να ερευνάτε τον κώδικα Java μέσα σε αρχεία APK. Είναι απλό στη χρήση; αφού αποκτήσετε το APK, απλώς ανοίξτε το με το JD-Gui για να επιθεωρήσετε τον κώδικα. +Ως ο πρωτοπόρος GUI Java decompiler, **JD-Gui** σας επιτρέπει να εξερευνήσετε τον κώδικα Java μέσα σε αρχεία APK. Είναι απλό στη χρήση; Αφού αποκτήσετε το APK, απλώς ανοίξτε το με το JD-Gui για να επιθεωρήσετε τον κώδικα. ### [Jadx](https://github.com/skylot/jadx) @@ -28,7 +28,7 @@ **Enjarify** μεταφράζει τον Dalvik bytecode σε Java bytecode, επιτρέποντας στα εργαλεία ανάλυσης Java να αναλύουν τις εφαρμογές Android πιο αποτελεσματικά. -- Για να χρησιμοποιήσετε το Enjarify, εκτελέστε: `enjarify app.apk` Αυτό δημιουργεί τον αντίστοιχο Java bytecode του παρεχόμενου APK. +- Για να χρησιμοποιήσετε το Enjarify, εκτελέστε: `enjarify app.apk` Αυτό δημιουργεί τον ισοδύναμο Java bytecode του παρεχόμενου APK. ### [CFR](https://github.com/leibnitz27/cfr) @@ -53,10 +53,10 @@ Για απλή αποσυμπίεση με το **procyon**: -- Αποσυμπιέστε ένα αρχείο JAR σε καθορισμένο φάκελο: `procyon -jar "app.jar" -o "output_directory"` +- Αποσυμπιέστε ένα αρχείο JAR σε έναν καθορισμένο φάκελο: `procyon -jar "app.jar" -o "output_directory"` ### [frida-DEXdump](https://github.com/hluwa/frida-dexdump) -Αυτό το εργαλείο μπορεί να χρησιμοποιηθεί για να αποθηκεύσει το DEX ενός εκτελούμενου APK στη μνήμη. Αυτό βοηθά να ξεπεραστεί η στατική παραπλάνηση που αφαιρείται ενώ η εφαρμογή εκτελείται στη μνήμη. +Αυτό το εργαλείο μπορεί να χρησιμοποιηθεί για να αποθηκεύσει το DEX μιας εκτελούμενης APK στη μνήμη. Αυτό βοηθά να παρακαμφθεί η στατική παραπλάνηση που αφαιρείται ενώ η εφαρμογή εκτελείται στη μνήμη. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md index 8fff01d3c..007f62909 100644 --- a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md +++ b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md @@ -18,7 +18,7 @@ brew tap homebrew/cask brew install --cask android-sdk ``` -Ή από το **Android Studio GUI** όπως υποδεικνύεται στο [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) που θα τα εγκαταστήσει σε `~/Library/Android/sdk/cmdline-tools/latest/bin/` και `~/Library/Android/sdk/platform-tools/` και `~/Library/Android/sdk/emulator/` +Ή από το **Android Studio GUI** όπως υποδεικνύεται στο [https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a](https://stackoverflow.com/questions/46402772/failed-to-install-android-sdk-java-lang-noclassdeffounderror-javax-xml-bind-a) που θα τα εγκαταστήσει στο `~/Library/Android/sdk/cmdline-tools/latest/bin/` και `~/Library/Android/sdk/platform-tools/` και `~/Library/Android/sdk/emulator/` Για τα προβλήματα με την Java: ```java @@ -52,7 +52,7 @@ _**επιλέξτε** το τηλέφωνο που θέλετε να χρησι
Έτσι, επιλέξτε το και αν δεν έχει κατέβει, κάντε κλικ στο σύμβολο _**Download**_ δίπλα στο όνομα (**τώρα περιμένετε μέχρι να κατέβει η εικόνα).**\ -Μόλις κατέβει η εικόνα, απλά επιλέξτε **`Next`** και **`Finish`**. +Μόλις η εικόνα κατέβει, απλά επιλέξτε **`Next`** και **`Finish`**. Η εικονική μηχανή θα δημιουργηθεί. Τώρα **κάθε φορά που αποκτάτε πρόσβαση στον AVD manager, θα είναι παρούσα**. @@ -101,7 +101,7 @@ C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat --list ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat "platforms;android-28" "system-images;android-28;google_apis;x86_64" ``` -Αφού έχετε κατεβάσει την εικόνα Android που θέλετε να χρησιμοποιήσετε, μπορείτε να **καταχωρήσετε όλες τις κατεβασμένες εικόνες Android** με: +Αφού έχετε κατεβάσει την εικόνα Android που θέλετε να χρησιμοποιήσετε, μπορείτε να **καταγράψετε όλες τις κατεβασμένες εικόνες Android** με: ``` C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list target ---------- @@ -121,7 +121,7 @@ Revision: 4 ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X" ``` -Στην τελευταία εντολή **δημιούργησα μια VM με όνομα** "_AVD9_" χρησιμοποιώντας τη ** συσκευή** "_Nexus 5X_" και την **εικόνα Android** "_system-images;android-28;google_apis;x86_64_".\ +Στην τελευταία εντολή **δημιούργησα μια VM με το όνομα** "_AVD9_" χρησιμοποιώντας τη ** συσκευή** "_Nexus 5X_" και την **εικόνα Android** "_system-images;android-28;google_apis;x86_64_".\ Τώρα μπορείτε να **καταγράψετε τις εικονικές μηχανές** που έχετε δημιουργήσει με: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd @@ -165,8 +165,8 @@ C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht **Δίκτυο** -- `-dns-server 192.0.2.0, 192.0.2.255` : Επιτρέψτε να υποδείξετε τους διακομιστές DNS χωρισμένους με κόμμα στη VM. -- **`-http-proxy 192.168.1.12:8080`** : Επιτρέψτε να υποδείξετε έναν HTTP proxy προς χρήση (πολύ χρήσιμο για την καταγραφή της κίνησης χρησιμοποιώντας το Burp) +- `-dns-server 192.0.2.0, 192.0.2.255` : Επιτρέπει να υποδείξετε τους διακομιστές DNS χωρισμένους με κόμμα στη VM. +- **`-http-proxy 192.168.1.12:8080`** : Επιτρέπει να υποδείξετε έναν HTTP proxy προς χρήση (πολύ χρήσιμο για την καταγραφή της κίνησης χρησιμοποιώντας το Burp) - `-port 5556` : Ορίστε τον αριθμό θύρας TCP που χρησιμοποιείται για την κονσόλα και το adb. - `-ports 5556,5559` : Ορίστε τις θύρες TCP που χρησιμοποιούνται για την κονσόλα και το adb. - **`-tcpdump /path/dumpfile.cap`** : Καταγράψτε όλη την κίνηση σε ένα αρχείο @@ -185,7 +185,7 @@ C:\Users\\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht $ adb root adbd cannot run as root in production builds ``` -Χρησιμοποιώντας [rootAVD](https://github.com/newbit1/rootAVD) με [Magisk](https://github.com/topjohnwu/Magisk) κατάφερα να το ριζώσω (ακολουθήστε για παράδειγμα [**αυτό το βίντεο**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ή** [**αυτό**](https://www.youtube.com/watch?v=qQicUW0svB8)). +Χρησιμοποιώντας [rootAVD](https://github.com/newbit1/rootAVD) με [Magisk](https://github.com/topjohnwu/Magisk) κατάφερα να το ριζώσω (ακολουθήστε για παράδειγμα [**αυτό το βίντεο**](https://www.youtube.com/watch?v=Wk0ixxmkzAI) **ή** [**αυτό εδώ**](https://www.youtube.com/watch?v=qQicUW0svB8)). ## Εγκατάσταση Πιστοποιητικού Burp diff --git a/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md b/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md index 3488c7411..087454b30 100644 --- a/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md +++ b/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md @@ -4,7 +4,7 @@ ## **Μέθοδος 1 – Παράκαμψη χωρίς Χρήση Crypto Object** -Η εστίαση εδώ είναι στο _onAuthenticationSucceeded_ callback, το οποίο είναι κρίσιμο στη διαδικασία αυθεντικοποίησης. Ερευνητές από την WithSecure ανέπτυξαν ένα [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), που επιτρέπει την παράκαμψη του NULL _CryptoObject_ στο _onAuthenticationSucceeded(...)_. Το script αναγκάζει μια αυτόματη παράκαμψη της αυθεντικοποίησης δακτυλικών αποτυπωμάτων κατά την κλήση της μεθόδου. Παρακάτω είναι ένα απλοποιημένο απόσπασμα που δείχνει την παράκαμψη σε ένα περιβάλλον Δακτυλικών Αποτυπωμάτων Android, με την πλήρη εφαρμογή διαθέσιμη στο [GitHub](https://github.com/St3v3nsS/InsecureBanking). +Η εστίαση εδώ είναι στο _onAuthenticationSucceeded_ callback, το οποίο είναι κρίσιμο στη διαδικασία αυθεντικοποίησης. Ερευνητές από την WithSecure ανέπτυξαν ένα [Frida script](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js), που επιτρέπει την παράκαμψη του NULL _CryptoObject_ στο _onAuthenticationSucceeded(...)_. Το script αναγκάζει μια αυτόματη παράκαμψη της αυθεντικοποίησης δακτυλικού αποτυπώματος κατά την κλήση της μεθόδου. Παρακάτω είναι ένα απλοποιημένο απόσπασμα που δείχνει την παράκαμψη σε ένα περιβάλλον Δακτυλικού Αποτυπώματος Android, με την πλήρη εφαρμογή διαθέσιμη στο [GitHub](https://github.com/St3v3nsS/InsecureBanking). ```javascript biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() { @Override @@ -56,7 +56,7 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in Υπάρχουν εξειδικευμένα εργαλεία και σενάρια σχεδιασμένα για να δοκιμάσουν και να παρακάμψουν τους μηχανισμούς αυθεντικοποίησης. Για παράδειγμα: -1. **MAGISK Modules**: Το MAGISK είναι ένα εργαλείο για Android που επιτρέπει στους χρήστες να αποκτούν πρόσβαση root στις συσκευές τους και να προσθέτουν modules που μπορούν να τροποποιήσουν ή να παραποιήσουν πληροφορίες σε επίπεδο υλικού, συμπεριλαμβανομένων των δακτυλικών αποτυπωμάτων. +1. **MAGISK Modules**: Το MAGISK είναι ένα εργαλείο για Android που επιτρέπει στους χρήστες να ριζώνουν τις συσκευές τους και να προσθέτουν modules που μπορούν να τροποποιήσουν ή να παραποιήσουν πληροφορίες σε επίπεδο υλικού, συμπεριλαμβανομένων των δακτυλικών αποτυπωμάτων. 2. **Προσαρμοσμένα Σενάρια**: Σενάρια μπορούν να γραφούν για να αλληλεπιδρούν με το Android Debug Bridge (ADB) ή απευθείας με το backend της εφαρμογής για να προσομοιώσουν ή να παρακάμψουν την αυθεντικοποίηση με δακτυλικά αποτυπώματα. ## Αναφορές diff --git a/src/mobile-pentesting/android-app-pentesting/content-protocol.md b/src/mobile-pentesting/android-app-pentesting/content-protocol.md index dbac64e0d..8a790249b 100644 --- a/src/mobile-pentesting/android-app-pentesting/content-protocol.md +++ b/src/mobile-pentesting/android-app-pentesting/content-protocol.md @@ -5,7 +5,7 @@ ### Καταγραφή Αρχείων στο Media Store -Για να καταγράψετε τα αρχεία που διαχειρίζεται το Media Store, μπορεί να χρησιμοποιηθεί η παρακάτω εντολή: +Για να καταγράψετε αρχεία που διαχειρίζεται το Media Store, μπορεί να χρησιμοποιηθεί η παρακάτω εντολή: ```bash $ content query --uri content://media/external/file ``` @@ -17,7 +17,7 @@ $ content query --uri content://media/external/file --projection _id,_data ### Η Πρόσβαση του Chrome στους Παροχείς Περιεχομένου -Ο Chrome στο Android μπορεί να έχει πρόσβαση στους παροχείς περιεχομένου μέσω του σχήματος `content://`, επιτρέποντάς του να έχει πρόσβαση σε πόρους όπως φωτογραφίες ή έγγραφα που έχουν εξαχθεί από εφαρμογές τρίτων. Για να το εικονογραφήσουμε αυτό, μπορεί να εισαχθεί ένα αρχείο στο Media Store και στη συνέχεια να αποκτηθεί πρόσβαση μέσω του Chrome: +Ο Chrome στο Android μπορεί να έχει πρόσβαση στους παροχείς περιεχομένου μέσω του σχήματος `content://`, επιτρέποντάς του να έχει πρόσβαση σε πόρους όπως φωτογραφίες ή έγγραφα που εξάγονται από εφαρμογές τρίτων. Για να το εικονογραφήσουμε αυτό, ένα αρχείο μπορεί να εισαχθεί στο Media Store και στη συνέχεια να προσπελαστεί μέσω του Chrome: Εισάγετε μια προσαρμοσμένη καταχώρηση στο Media Store: ```bash @@ -41,11 +41,11 @@ content query --uri content://media/external/file --projection _id,_data | grep ``` ### Chrome CVE-2020-6516: Παράκαμψη Πολιτικής Ίδιων Προελεύσεων -Η _Πολιτική Ίδιων Προελεύσεων_ (SOP) είναι ένα πρωτόκολλο ασφαλείας στους περιηγητές που περιορίζει τις ιστοσελίδες από το να αλληλεπιδρούν με πόρους από διαφορετικές προελεύσεις, εκτός αν επιτρέπεται ρητά από μια πολιτική Διαμοιρασμού Πόρων Διαφορετικών Προελεύσεων (CORS). Αυτή η πολιτική στοχεύει στην πρόληψη διαρροών πληροφοριών και επιθέσεων Cross-Site Request Forgery. Ο Chrome θεωρεί το `content://` ως τοπικό σχήμα, υπονοώντας αυστηρότερους κανόνες SOP, όπου κάθε τοπικό σχήμα URL αντιμετωπίζεται ως ξεχωριστή προέλευση. +Η _Πολιτική Ίδιων Προελεύσεων_ (SOP) είναι ένα πρωτόκολλο ασφαλείας στους περιηγητές που περιορίζει τις ιστοσελίδες από το να αλληλεπιδρούν με πόρους από διαφορετικές προελεύσεις, εκτός αν επιτρέπεται ρητά από μια πολιτική Διαμοιρασμού Πόρων Διαφορετικών Προελεύσεων (CORS). Αυτή η πολιτική στοχεύει στην πρόληψη διαρροών πληροφοριών και πλαστογράφησης αιτημάτων από άλλες τοποθεσίες. Ο Chrome θεωρεί το `content://` ως τοπικό σχήμα, υπονοώντας αυστηρότερους κανόνες SOP, όπου κάθε τοπικό σχήμα URL αντιμετωπίζεται ως ξεχωριστή προέλευση. Ωστόσο, το CVE-2020-6516 ήταν μια ευπάθεια στον Chrome που επέτρεπε την παράκαμψη των κανόνων SOP για πόρους που φορτώνονταν μέσω ενός URL `content://`. Στην πράξη, ο κώδικας JavaScript από ένα URL `content://` μπορούσε να έχει πρόσβαση σε άλλους πόρους που φορτώνονταν μέσω URL `content://`, γεγονός που ήταν σημαντική ανησυχία ασφαλείας, ειδικά σε συσκευές Android που εκτελούν εκδόσεις πριν από το Android 10, όπου η περιορισμένη αποθήκευση δεν είχε εφαρμοστεί. -Η απόδειξη της έννοιας παρακάτω δείχνει αυτή την ευπάθεια, όπου ένα έγγραφο HTML, αφού ανέβει κάτω από **/sdcard** και προστεθεί στο Media Store, χρησιμοποιεί το `XMLHttpRequest` στον JavaScript του για να έχει πρόσβαση και να εμφανίσει τα περιεχόμενα ενός άλλου αρχείου στο Media Store, παρακάμπτοντας τους κανόνες SOP. +Η απόδειξη της έννοιας παρακάτω δείχνει αυτή την ευπάθεια, όπου ένα έγγραφο HTML, αφού ανέβει κάτω από **/sdcard** και προστεθεί στο Media Store, χρησιμοποιεί `XMLHttpRequest` στον JavaScript του για να έχει πρόσβαση και να εμφανίσει τα περιεχόμενα ενός άλλου αρχείου στο Media Store, παρακάμπτοντας τους κανόνες SOP. Απόδειξη της Έννοιας HTML: ```xml diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md index 97fab4dd2..bf7b59644 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md @@ -41,18 +41,18 @@ drozer console connect | **Εντολές** | **Περιγραφή** | | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Help MODULE** | Εμφανίζει βοήθεια για το επιλεγμένο module | -| **list** | Εμφανίζει μια λίστα με όλα τα drozer modules που μπορούν να εκτελούνται στην τρέχουσα συνεδρία. Αυτό κρύβει modules που δεν έχετε κατάλληλες άδειες για να εκτελέσετε. | +| **Help MODULE** | Εμφανίζει βοήθεια για το επιλεγμένο module | +| **list** | Εμφανίζει μια λίστα με όλα τα drozer modules που μπορούν να εκτελούνται στην τρέχουσα συνεδρία. Αυτό κρύβει modules για τα οποία δεν έχετε κατάλληλες άδειες εκτέλεσης. | | **shell** | Ξεκινά μια διαδραστική Linux shell στη συσκευή, στο πλαίσιο του Agent. | | **clean** | Αφαιρεί τα προσωρινά αρχεία που αποθηκεύει το drozer στη συσκευή Android. | | **load** | Φορτώνει ένα αρχείο που περιέχει εντολές drozer και τις εκτελεί διαδοχικά. | | **module** | Βρίσκει και εγκαθιστά επιπλέον drozer modules από το Διαδίκτυο. | -| **unset** | Αφαιρεί μια ονομαστική μεταβλητή που το drozer περνά σε οποιαδήποτε Linux shells που δημιουργεί. | -| **set** | Αποθηκεύει μια τιμή σε μια μεταβλητή που θα περαστεί ως περιβαλλοντική μεταβλητή σε οποιαδήποτε Linux shells που δημιουργεί το drozer. | +| **unset** | Αφαιρεί μια ονομαστική μεταβλητή που το drozer περνά σε οποιαδήποτε Linux shells που δημιουργεί. | +| **set** | Αποθηκεύει μια τιμή σε μια μεταβλητή που θα περαστεί ως περιβαλλοντική μεταβλητή σε οποιαδήποτε Linux shells που δημιουργεί το drozer. | | **shell** | Ξεκινά μια διαδραστική Linux shell στη συσκευή, στο πλαίσιο του Agent | -| **run MODULE** | Εκτελεί ένα drozer module | -| **exploit** | Το Drozer μπορεί να δημιουργήσει exploits για εκτέλεση στη συσκευή. `drozer exploit list` | -| **payload** | Τα exploits χρειάζονται ένα payload. `drozer payload list` | +| **run MODULE** | Εκτελεί ένα drozer module | +| **exploit** | Το drozer μπορεί να δημιουργήσει exploits για εκτέλεση στη συσκευή. `drozer exploit list` | +| **payload** | Τα exploits χρειάζονται ένα payload. `drozer payload list` | ### Πακέτο @@ -142,7 +142,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ![](<../../../images/image (82).png>) -#### Λίστα υπηρεσίας +#### Λίστα υπηρεσιών ```bash dz> run app.service.info -a com.mwr.example.sieve Package: com.mwr.example.sieve @@ -235,7 +235,7 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo ```xml ) ![](<../../../images/image (173).png>) -_Σημειώστε ότι στην εισαγωγή και την ενημέρωση μπορείτε να χρησιμοποιήσετε --string για να υποδείξετε συμβολοσειρά, --double για να υποδείξετε διπλό, --float, --integer, --long, --short, --boolean_ +_Note that in insert and update you can use --string to indicate string, --double to indicate a double, --float, --integer, --long, --short, --boolean_ ### Ενημέρωση περιεχομένου -Γνωρίζοντας το όνομα των στηλών μπορείτε επίσης να **τροποποιήσετε τις καταχωρίσεις**: +Knowing the name of the columns you could also **τροποποιήσετε τις καταχωρίσεις**: ![](<../../../images/image (780).png>) @@ -109,12 +109,12 @@ _Σημειώστε ότι στην εισαγωγή και την ενημέρ ### **SQL Injection** -Είναι απλό να δοκιμάσετε για SQL injection **(SQLite)** χειραγωγώντας τα **projection** και **selection fields** που περνούν στον πάροχο περιεχομένου.\ -Όταν κάνετε ερωτήσεις στον Content Provider υπάρχουν 2 ενδιαφέροντα επιχειρήματα για να αναζητήσετε πληροφορίες: _--selection_ και _--projection_: +It is simple to test for SQL injection **(SQLite)** by manipulating the **projection** and **selection fields** that are passed to the content provider.\ +When quering the Content Provider there are 2 interesting arguments to search for information: _--selection_ and _--projection_: ![](<../../../images/image (784).png>) -Μπορείτε να προσπαθήσετε να **καταχραστείτε** αυτές τις **παραμέτρους** για να δοκιμάσετε για **SQL injections**: +You can try to **abuse** this **parameters** to test for **SQL injections**: ``` dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'" unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (') @@ -162,12 +162,12 @@ dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc ``` ### **Path Traversal** -Αν μπορείτε να έχετε πρόσβαση σε αρχεία, μπορείτε να προσπαθήσετε να εκμεταλλευτείτε ένα Path Traversal (σε αυτή την περίπτωση αυτό δεν είναι απαραίτητο αλλά μπορείτε να προσπαθήσετε να χρησιμοποιήσετε το "_../_" και παρόμοια κόλπα). +Αν μπορείτε να έχετε πρόσβαση σε αρχεία, μπορείτε να προσπαθήσετε να εκμεταλλευτείτε ένα Path Traversal (σε αυτή την περίπτωση αυτό δεν είναι απαραίτητο αλλά μπορείτε να προσπαθήσετε να χρησιμοποιήσετε "_../_" και παρόμοια κόλπα). ``` dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts 127.0.0.1 localhost ``` -**Αυτόματη ανακάλυψη διαδρομών Path Traversal από το Drozer** +**Αυτόματη ανακάλυψη διαδρομών Traversal από το Drozer** ``` dz> run scanner.provider.traversal -a com.mwr.example.sieve Scanning com.mwr.example.sieve... diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md index f7dd06e08..b62c3dd63 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md @@ -20,9 +20,9 @@ adb root; adb connect localhost:6000; sleep 1; adb push frida-server /data/local frida-ps -U #List packages and processes frida-ps -U | grep -i #Get all the package name ``` -## Tutorials +## Μαθήματα -### [Tutorial 1](frida-tutorial-1.md) +### [Μάθημα 1](frida-tutorial-1.md) **Από**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ **APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\ @@ -30,14 +30,14 @@ frida-ps -U | grep -i #Get all the package name **Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε](frida-tutorial-1.md).** -### [Tutorial 2](frida-tutorial-2.md) +### [Μάθημα 2](frida-tutorial-2.md) **Από**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Μέρη 2, 3 & 4)\ **APKs και Πηγαίος Κώδικας**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) **Ακολουθήστε τον [σύνδεσμο για να το διαβάσετε.](frida-tutorial-2.md)** -### [Tutorial 3](owaspuncrackable-1.md) +### [Μάθημα 3](owaspuncrackable-1.md) **Από**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk) @@ -46,9 +46,9 @@ frida-ps -U | grep -i #Get all the package name **Μπορείτε να βρείτε περισσότερα καταπληκτικά σενάρια Frida εδώ:** [**https://codeshare.frida.re/**](https://codeshare.frida.re) -## Quick Examples +## Γρήγορα Παραδείγματα -### Calling Frida from command line +### Καλώντας το Frida από τη γραμμή εντολών ```bash frida-ps -U @@ -74,7 +74,7 @@ sys.stdin.read() ``` ### Hooking functions without parameters -Hook την συνάρτηση `a()` της κλάσης `sg.vantagepoint.a.c` +Hook the function `a()` of the class `sg.vantagepoint.a.c` ```javascript Java.perform(function () { ; rootcheck1.a.overload().implementation = function() { @@ -159,7 +159,7 @@ return ret ``` ### Λήψη ενός ήδη δημιουργημένου αντικειμένου μιας κλάσης -Αν θέλετε να εξαγάγετε κάποιο χαρακτηριστικό ενός δημιουργημένου αντικειμένου, μπορείτε να χρησιμοποιήσετε αυτό. +Αν θέλετε να εξάγετε κάποιο χαρακτηριστικό ενός δημιουργημένου αντικειμένου, μπορείτε να χρησιμοποιήσετε αυτό. Σε αυτό το παράδειγμα θα δείτε πώς να αποκτήσετε το αντικείμενο της κλάσης my_activity και πώς να καλέσετε τη συνάρτηση .secret() που θα εκτυπώσει ένα ιδιωτικό χαρακτηριστικό του αντικειμένου: ```javascript diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md index 2c7be3584..ae5cf7242 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md @@ -8,9 +8,9 @@ ## Python -Η Frida σας επιτρέπει να **εισάγετε κώδικα JavaScript** μέσα σε συναρτήσεις μιας εκτελούμενης εφαρμογής. Αλλά μπορείτε να χρησιμοποιήσετε **python** για να **καλέσετε** τα hooks και ακόμη και να **αλληλεπιδράσετε** με τα **hooks**. +Frida σας επιτρέπει να **εισάγετε κώδικα JavaScript** μέσα σε συναρτήσεις μιας εκτελούμενης εφαρμογής. Αλλά μπορείτε να χρησιμοποιήσετε **python** για να **καλέσετε** τα hooks και ακόμη και να **αλληλεπιδράσετε** με τα **hooks**. -Αυτό είναι ένα εύκολο σενάριο python που μπορείτε να χρησιμοποιήσετε με όλα τα προτεινόμενα παραδείγματα σε αυτό το σεμινάριο: +Αυτό είναι ένα εύκολο σενάριο python που μπορείτε να χρησιμοποιήσετε με όλα τα προτεινόμενα παραδείγματα σε αυτό το tutorial: ```python #hooking.py import frida, sys diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md index b7af4fb25..4de2f070d 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md @@ -2,8 +2,8 @@ {{#include ../../../banners/hacktricks-training.md}} -**Αυτό είναι ένα συνοπτικό κείμενο της ανάρτησης**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Μέρη 2, 3 & 4)\ -**APKs και Κώδικας Πηγής**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) +**Αυτό είναι μια περίληψη της ανάρτησης**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Μέρη 2, 3 & 4)\ +**APKs και Πηγαίος Κώδικας**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) Το μέρος 1 είναι πολύ εύκολο. @@ -150,7 +150,7 @@ hooksecretfunction: hookSecret, ``` ## Μέρος 4 -Εδώ θα δείτε πώς να κάνετε **Python και JS να αλληλεπιδρούν** χρησιμοποιώντας αντικείμενα JSON. Η JS χρησιμοποιεί τη συνάρτηση `send()` για να στείλει δεδομένα στον πελάτη Python, και η Python χρησιμοποιεί τις συναρτήσεις `post()` για να στείλει δεδομένα στο σενάριο JS. Η **JS θα μπλοκάρει την εκτέλεση** μέχρι να λάβει μια απάντηση από την Python. +Εδώ θα δείτε πώς να κάνετε **Python και JS να αλληλεπιδρούν** χρησιμοποιώντας αντικείμενα JSON. Ο JS χρησιμοποιεί τη συνάρτηση `send()` για να στείλει δεδομένα στον πελάτη Python, και η Python χρησιμοποιεί τις συναρτήσεις `post()` για να στείλει δεδομένα στο σενάριο JS. Ο **JS θα μπλοκάρει την εκτέλεση** μέχρι να λάβει μια απάντηση από την Python. ### Python ```python diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md index a183fb2aa..03da7bfe2 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md @@ -22,7 +22,7 @@ {% file src="../../../images/app-release.zip" %} -Ή από το [πρωτότυπο αποθετήριο](https://github.com/asvid/FridaApp)(κατεβάστε app-release.apk) +Ή από το [πρωτότυπο αποθετήριο](https://github.com/asvid/FridaApp) (κατεβάστε app-release.apk) ### Εγκατάσταση ```bash @@ -32,14 +32,14 @@ pip3 install objection Κάντε μια **κανονική σύνδεση ADB** και **ξεκινήστε** τον **server frida** στη συσκευή (και ελέγξτε ότι το frida λειτουργεί τόσο στον πελάτη όσο και στον server). -Αν χρησιμοποιείτε μια **rooted συσκευή**, είναι απαραίτητο να επιλέξετε την εφαρμογή που θέλετε να δοκιμάσετε μέσα στην _**--gadget**_ επιλογή. σε αυτή την περίπτωση: +Αν χρησιμοποιείτε μια **rooted συσκευή**, είναι απαραίτητο να επιλέξετε την εφαρμογή που θέλετε να δοκιμάσετε μέσα στην επιλογή _**--gadget**_. σε αυτή την περίπτωση: ```bash frida-ps -Uai objection --gadget asvid.github.io.fridaapp explore ``` ### Βασικές Ενέργειες -Δεν θα παρατίθενται όλες οι δυνατές εντολές του objection σε αυτό το tutorial, μόνο αυτές που έχω βρει πιο χρήσιμες. +Δεν θα παρατεθούν όλες οι δυνατές εντολές του objection σε αυτό το tutorial, μόνο αυτές που έχω βρει πιο χρήσιμες. #### Περιβάλλον @@ -169,7 +169,7 @@ android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args -- ### Εμφανίσεις κλάσης -Αναζητήστε και εκτυπώστε **ζωντανές εμφανίσεις μιας συγκεκριμένης Java κλάσης**, που καθορίζεται από ένα πλήρως προσδιορισμένο όνομα κλάσης. Το αποτέλεσμα είναι η προσπάθεια να αποκτήσετε μια τιμή string για μια ανακαλυφθείσα objection, η οποία θα περιέχει συνήθως **τιμές ιδιοτήτων για το αντικείμενο**. +Αναζητήστε και εκτυπώστε **ζωντανές εμφανίσεις μιας συγκεκριμένης Java κλάσης**, που καθορίζεται από ένα πλήρως προσδιορισμένο όνομα κλάσης. Το αποτέλεσμα είναι η προσπάθεια να αποκτήσετε μια τιμή string για μια ανακαλυφθείσα objection που θα περιέχει συνήθως **τιμές ιδιοτήτων για το αντικείμενο**. ``` android heap print_instances ``` @@ -185,7 +185,7 @@ android intent launch_service ``` ### Μνήμη -#### Εκχύλισμα +#### Dump ```bash memory dump all #Dump all memory memory dump from_base #Dump a part @@ -215,7 +215,7 @@ memory write "
" "" (--string) Μπορείτε να χρησιμοποιήσετε την εντολή `sqlite` για να αλληλεπιδράσετε με βάσεις δεδομένων sqlite. -### Έξοδος +### Exit ```bash exit ``` @@ -223,6 +223,6 @@ exit - Οι μέθοδοι hooking μερικές φορές προκαλούν κρασάρισμα της εφαρμογής (αυτό οφείλεται επίσης στο Frida). - Δεν μπορείτε να χρησιμοποιήσετε τις παρουσίες των κλάσεων για να καλέσετε συναρτήσεις της παρουσίας. Και δεν μπορείτε να δημιουργήσετε νέες παρουσίες κλάσεων και να τις χρησιμοποιήσετε για να καλέσετε συναρτήσεις. -- Δεν υπάρχει μια συντόμευση (όπως αυτή για το sslpinnin) για να hookάρετε όλες τις κοινές μεθόδους κρυπτογράφησης που χρησιμοποιούνται από την εφαρμογή για να δείτε κρυπτογραφημένο κείμενο, απλό κείμενο, κλειδιά, IVs και αλγόριθμους που χρησιμοποιούνται. +- Δεν υπάρχει μια συντόμευση (όπως αυτή για το sslpinnin) για να κάνετε hook όλες τις κοινές μεθόδους κρυπτογράφησης που χρησιμοποιούνται από την εφαρμογή για να δείτε κρυπτογραφημένο κείμενο, απλό κείμενο, κλειδιά, IVs και αλγόριθμους που χρησιμοποιούνται. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md index 3d39efb5a..555ac859b 100644 --- a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md @@ -29,7 +29,7 @@ adb reboot #Now, reboot the machine ## Χρήση του Magisc -Αν **έχετε ριζώσει τη συσκευή σας με το Magisc** (ίσως έναν εξομοιωτή), και **δεν μπορείτε να ακολουθήσετε** τα προηγούμενα **βήματα** για να εγκαταστήσετε το πιστοποιητικό Burp επειδή το **σύστημα αρχείων είναι μόνο για ανάγνωση** και δεν μπορείτε να το επανατοποθετήσετε σε εγ writable, υπάρχει ένας άλλος τρόπος. +Αν **έχετε ριζώσει τη συσκευή σας με το Magisc** (ίσως έναν εξομοιωτή), και **δεν μπορείτε να ακολουθήσετε** τα προηγούμενα **βήματα** για να εγκαταστήσετε το πιστοποιητικό Burp επειδή το **filesystem είναι μόνο για ανάγνωση** και δεν μπορείτε να το ξανατοποθετήσετε ως εγγράψιμο, υπάρχει ένας άλλος τρόπος. Εξηγείται σε [**αυτό το βίντεο**](https://www.youtube.com/watch?v=qQicUW0svB8) που πρέπει να κάνετε: @@ -53,11 +53,11 @@ adb reboot #Now, reboot the machine Στην τελευταία έκδοση Android 14, έχει παρατηρηθεί μια σημαντική αλλαγή στη διαχείριση των πιστοποιητικών Αρχής Πιστοποίησης (CA) που είναι εμπιστευμένα από το σύστημα. Προηγουμένως, αυτά τα πιστοποιητικά βρίσκονταν στο **`/system/etc/security/cacerts/`**, προσβάσιμα και τροποποιήσιμα από χρήστες με δικαιώματα root, γεγονός που επέτρεπε άμεση εφαρμογή σε όλο το σύστημα. Ωστόσο, με το Android 14, η τοποθεσία αποθήκευσης έχει μεταφερθεί στο **`/apex/com.android.conscrypt/cacerts`**, έναν φάκελο εντός της διαδρομής **`/apex`**, ο οποίος είναι εκ φύσεως αμετάβλητος. -Οι προσπάθειες επανατοποθέτησης της **διαδρομής APEX cacerts** ως εγ writable αποτυγχάνουν, καθώς το σύστημα δεν επιτρέπει τέτοιες λειτουργίες. Ακόμη και οι προσπάθειες αποσύνδεσης ή επικάλυψης του φακέλου με ένα προσωρινό σύστημα αρχείων (tmpfs) δεν παρακάμπτουν την αμεταβλητότητα; οι εφαρμογές συνεχίζουν να έχουν πρόσβαση στα αρχικά δεδομένα πιστοποιητικού ανεξάρτητα από τις αλλαγές στο επίπεδο του συστήματος αρχείων. Αυτή η ανθεκτικότητα οφείλεται στο ότι η τοποθέτηση **`/apex`** έχει ρυθμιστεί με ΙΔΙΩΤΙΚΗ προπαγάνδα, διασφαλίζοντας ότι οποιεσδήποτε τροποποιήσεις εντός του φακέλου **`/apex`** δεν επηρεάζουν άλλες διαδικασίες. +Οι προσπάθειες να ξανατοποθετηθεί η **διαδρομή APEX cacerts** ως εγγράψιμη αποτυγχάνουν, καθώς το σύστημα δεν επιτρέπει τέτοιες λειτουργίες. Ακόμη και οι προσπάθειες να αποσυνδεθεί ή να επικαλυφθεί ο φάκελος με ένα προσωρινό σύστημα αρχείων (tmpfs) δεν παρακάμπτουν την αμεταβλησία; οι εφαρμογές συνεχίζουν να έχουν πρόσβαση στα αρχικά δεδομένα πιστοποιητικού ανεξάρτητα από τις αλλαγές στο επίπεδο του συστήματος αρχείων. Αυτή η ανθεκτικότητα οφείλεται στο ότι η τοποθέτηση **`/apex`** έχει ρυθμιστεί με ΙΔΙΩΤΙΚΗ προπαγάνδα, διασφαλίζοντας ότι οποιεσδήποτε τροποποιήσεις εντός του φακέλου **`/apex`** δεν επηρεάζουν άλλες διαδικασίες. Η αρχικοποίηση του Android περιλαμβάνει τη διαδικασία `init`, η οποία, κατά την εκκίνηση του λειτουργικού συστήματος, ξεκινά επίσης τη διαδικασία Zygote. Αυτή η διαδικασία είναι υπεύθυνη για την εκκίνηση διαδικασιών εφαρμογών με ένα νέο namespace τοποθέτησης που περιλαμβάνει μια ιδιωτική τοποθέτηση **`/apex`**, απομονώνοντας έτσι τις αλλαγές σε αυτόν τον φάκελο από άλλες διαδικασίες. -Ωστόσο, υπάρχει μια λύση για όσους χρειάζονται να τροποποιήσουν τα πιστοποιητικά CA που είναι εμπιστευμένα από το σύστημα εντός του φακέλου **`/apex`**. Αυτό περιλαμβάνει την χειροκίνητη επανατοποθέτηση του **`/apex`** για να αφαιρεθεί η ΙΔΙΩΤΙΚΗ προπαγάνδα, καθιστώντας το έτσι εγ writable. Η διαδικασία περιλαμβάνει την αντιγραφή των περιεχομένων του **`/apex/com.android.conscrypt`** σε άλλη τοποθεσία, την αποσύνδεση του φακέλου **`/apex/com.android.conscrypt`** για να εξαλειφθεί ο περιορισμός μόνο για ανάγνωση, και στη συνέχεια την αποκατάσταση των περιεχομένων στην αρχική τους τοποθεσία εντός του **`/apex`**. Αυτή η προσέγγιση απαιτεί γρήγορη δράση για να αποφευχθούν οι κραδασμοί του συστήματος. Για να διασφαλιστεί η εφαρμογή αυτών των αλλαγών σε όλο το σύστημα, συνιστάται να επανεκκινήσετε τον `system_server`, ο οποίος επανεκκινεί αποτελεσματικά όλες τις εφαρμογές και φέρνει το σύστημα σε μια συνεπή κατάσταση. +Ωστόσο, υπάρχει μια λύση για όσους χρειάζονται να τροποποιήσουν τα πιστοποιητικά CA που είναι εμπιστευμένα από το σύστημα εντός του φακέλου **`/apex`**. Αυτό περιλαμβάνει την χειροκίνητη ξανατοποθέτηση του **`/apex`** για να αφαιρεθεί η ΙΔΙΩΤΙΚΗ προπαγάνδα, καθιστώντας το έτσι εγγράψιμο. Η διαδικασία περιλαμβάνει την αντιγραφή των περιεχομένων του **`/apex/com.android.conscrypt`** σε άλλη τοποθεσία, την αποσύνδεση του φακέλου **`/apex/com.android.conscrypt`** για να εξαλειφθεί ο περιορισμός μόνο για ανάγνωση, και στη συνέχεια την αποκατάσταση των περιεχομένων στην αρχική τους τοποθεσία εντός του **`/apex`**. Αυτή η προσέγγιση απαιτεί γρήγορη δράση για να αποφευχθούν οι κραδασμοί του συστήματος. Για να διασφαλιστεί η εφαρμογή αυτών των αλλαγών σε όλο το σύστημα, συνιστάται να επανεκκινήσετε τον `system_server`, ο οποίος επανεκκινεί αποτελεσματικά όλες τις εφαρμογές και φέρνει το σύστημα σε μια συνεπή κατάσταση. ```bash # Create a separate temp directory, to hold the current certificates # Otherwise, when we add the mount we can't read the current certs anymore. @@ -117,12 +117,12 @@ echo "System certificate injected" ``` ### Bind-mounting through NSEnter -1. **Ρύθμιση ενός Εγγράψιμου Καταλόγου**: Αρχικά, δημιουργείται ένας εγγράψιμος κατάλογος με την τοποθέτηση ενός `tmpfs` πάνω από τον υπάρχοντα κατάλογο πιστοποιητικών μη-APEX συστήματος. Αυτό επιτυγχάνεται με την ακόλουθη εντολή: +1. **Ρύθμιση ενός Εγγράψιμου Καταλόγου**: Αρχικά, δημιουργείται ένας εγγράψιμος κατάλογος με την τοποθέτηση ενός `tmpfs` πάνω από τον υπάρχοντα κατάλογο πιστοποιητικών συστήματος που δεν είναι APEX. Αυτό επιτυγχάνεται με την ακόλουθη εντολή: ```bash mount -t tmpfs tmpfs /system/etc/security/cacerts ``` -2. **Προετοιμασία Πιστοποιητικών CA**: Αφού ρυθμιστεί ο εγγράψιμος κατάλογος, τα πιστοποιητικά CA που προορίζονται για χρήση θα πρέπει να αντιγραφούν σε αυτόν τον κατάλογο. Αυτό μπορεί να περιλαμβάνει την αντιγραφή των προεπιλεγμένων πιστοποιητικών από το `/apex/com.android.conscrypt/cacerts/`. Είναι απαραίτητο να προσαρμοστούν οι άδειες και οι ετικέτες SELinux αυτών των πιστοποιητικών αναλόγως. -3. **Δέσμευση Μοντάρισμα για Zygote**: Χρησιμοποιώντας το `nsenter`, εισέρχεται κανείς στο namespace μονταρίσματος του Zygote. Το Zygote, ως η διαδικασία που είναι υπεύθυνη για την εκκίνηση εφαρμογών Android, απαιτεί αυτό το βήμα για να διασφαλιστεί ότι όλες οι εφαρμογές που θα ξεκινήσουν από εδώ και στο εξής θα χρησιμοποιούν τα νέα ρυθμισμένα πιστοποιητικά CA. Η εντολή που χρησιμοποιείται είναι: +2. **Προετοιμασία Πιστοποιητικών CA**: Αφού ρυθμιστεί ο εγγράψιμος φάκελος, τα πιστοποιητικά CA που προορίζονται για χρήση θα πρέπει να αντιγραφούν σε αυτόν τον φάκελο. Αυτό μπορεί να περιλαμβάνει την αντιγραφή των προεπιλεγμένων πιστοποιητικών από το `/apex/com.android.conscrypt/cacerts/`. Είναι απαραίτητο να προσαρμοστούν οι άδειες και οι ετικέτες SELinux αυτών των πιστοποιητικών αναλόγως. +3. **Δέσμευση Μοντάρισμα για Zygote**: Χρησιμοποιώντας το `nsenter`, εισέρχεται κανείς στο namespace μοντάρισμα του Zygote. Το Zygote, ως η διαδικασία που είναι υπεύθυνη για την εκκίνηση εφαρμογών Android, απαιτεί αυτό το βήμα για να διασφαλιστεί ότι όλες οι εφαρμογές που θα ξεκινήσουν από εδώ και στο εξής θα χρησιμοποιούν τα νέα ρυθμισμένα πιστοποιητικά CA. Η εντολή που χρησιμοποιείται είναι: ```bash nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` @@ -132,7 +132,7 @@ nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/securi ```bash nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` -5. **Εναλλακτική Προσέγγιση - Ήπια Επανεκκίνηση**: Μια εναλλακτική μέθοδος περιλαμβάνει την εκτέλεση της δεσμευμένης τοποθέτησης στη διαδικασία `init` (PID 1) ακολουθούμενη από μια ήπια επανεκκίνηση του λειτουργικού συστήματος με τις εντολές `stop && start`. Αυτή η προσέγγιση θα διαδώσει τις αλλαγές σε όλα τα namespaces, αποφεύγοντας την ανάγκη να απευθυνθεί κανείς ξεχωριστά σε κάθε εκτελούμενη εφαρμογή. Ωστόσο, αυτή η μέθοδος γενικά προτιμάται λιγότερο λόγω της ταλαιπωρίας της επανεκκίνησης. +5. **Εναλλακτική Προσέγγιση - Ήπια Επανεκκίνηση**: Μια εναλλακτική μέθοδος περιλαμβάνει την εκτέλεση της δέσμευσης στο `init` διαδικασία (PID 1) ακολουθούμενη από μια ήπια επανεκκίνηση του λειτουργικού συστήματος με τις εντολές `stop && start`. Αυτή η προσέγγιση θα διαδώσει τις αλλαγές σε όλα τα namespaces, αποφεύγοντας την ανάγκη να απευθυνθεί κανείς ξεχωριστά σε κάθε εκτελούμενη εφαρμογή. Ωστόσο, αυτή η μέθοδος γενικά προτιμάται λιγότερο λόγω της ταλαιπωρίας της επανεκκίνησης. ## Αναφορές diff --git a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md index 6ea8f39c2..4ad8cb399 100644 --- a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md @@ -37,10 +37,10 @@ ``` -Στη συνέχεια, αποθηκεύστε το αρχείο και βγείτε από όλους τους φακέλους και ξαναχτίστε το apk με την παρακάτω εντολή: `apktool b *folder-name/* -o *output-file.apk*` +Στη συνέχεια, αποθηκεύστε το αρχείο και βγείτε από όλους τους καταλόγους και ξαναχτίστε το apk με την παρακάτω εντολή: `apktool b *folder-name/* -o *output-file.apk*` ![](../../images/img12.png) -Τέλος, χρειάζεται απλώς να **υπογράψετε την νέα εφαρμογή**. [Διαβάστε αυτή την ενότητα της σελίδας Smali - Decompiling/\[Modifying\]/Compiling για να μάθετε πώς να την υπογράψετε](smali-changes.md#sing-the-new-apk). +Τέλος, χρειάζεται απλώς να **υπογράψετε τη νέα εφαρμογή**. [Διαβάστε αυτή την ενότητα της σελίδας Smali - Decompiling/\[Modifying\]/Compiling για να μάθετε πώς να την υπογράψετε](smali-changes.md#sing-the-new-apk). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md b/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md index d17828aa9..123109e44 100644 --- a/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md +++ b/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md @@ -2,39 +2,39 @@ ## Χειροκίνητες **Τεχνικές Απο-αποκρυπτογράφησης** -Στον τομέα της **ασφάλειας λογισμικού**, η διαδικασία καθιστώντας τον κωδικό που έχει αποκρυφτεί κατανοητό, γνωστή ως **απο-αποκρυπτογράφηση**, είναι κρίσιμη. Αυτός ο οδηγός εξετάζει διάφορες στρατηγικές για την απο-αποκρυπτογράφηση, εστιάζοντας σε τεχνικές στατικής ανάλυσης και αναγνώριση προτύπων απόκρυψης. Επιπλέον, εισάγει μια άσκηση για πρακτική εφαρμογή και προτείνει περαιτέρω πόρους για όσους ενδιαφέρονται να εξερευνήσουν πιο προχωρημένα θέματα. +Στον τομέα της **ασφάλειας λογισμικού**, η διαδικασία καθιστώντας τον κωδικό που έχει αποκρυφθεί κατανοητό, γνωστή ως **απο-αποκρυπτογράφηση**, είναι κρίσιμη. Αυτός ο οδηγός εξετάζει διάφορες στρατηγικές για την απο-αποκρυπτογράφηση, εστιάζοντας σε τεχνικές στατικής ανάλυσης και αναγνώριση προτύπων αποκρυπτογράφησης. Επιπλέον, εισάγει μια άσκηση για πρακτική εφαρμογή και προτείνει περαιτέρω πόρους για όσους ενδιαφέρονται να εξερευνήσουν πιο προχωρημένα θέματα. ### **Στρατηγικές για Στατική Απο-αποκρυπτογράφηση** -Όταν ασχολείστε με **αποκρυφωμένο κώδικα**, μπορούν να χρησιμοποιηθούν αρκετές στρατηγικές ανάλογα με τη φύση της απόκρυψης: +Όταν ασχολείστε με **αποκρυφωμένο κώδικα**, μπορούν να χρησιμοποιηθούν αρκετές στρατηγικές ανάλογα με τη φύση της αποκρυπτογράφησης: -- **DEX bytecode (Java)**: Μια αποτελεσματική προσέγγιση περιλαμβάνει την αναγνώριση των μεθόδων απο-αποκρυπτογράφησης της εφαρμογής, και στη συνέχεια την αναπαραγωγή αυτών των μεθόδων σε ένα αρχείο Java. Αυτό το αρχείο εκτελείται για να αντιστρέψει την απόκρυψη στα στοχευμένα στοιχεία. +- **DEX bytecode (Java)**: Μια αποτελεσματική προσέγγιση περιλαμβάνει την αναγνώριση των μεθόδων απο-αποκρυπτογράφησης της εφαρμογής, και στη συνέχεια την αναπαραγωγή αυτών των μεθόδων σε ένα αρχείο Java. Αυτό το αρχείο εκτελείται για να αντιστρέψει την αποκρυπτογράφηση στα στοχευμένα στοιχεία. - **Java και Native Code**: Μια άλλη μέθοδος είναι να μεταφράσετε τον αλγόριθμο απο-αποκρυπτογράφησης σε μια γλώσσα scripting όπως η Python. Αυτή η στρατηγική τονίζει ότι ο κύριος στόχος δεν είναι να κατανοηθεί πλήρως ο αλγόριθμος αλλά να εκτελείται αποτελεσματικά. -### **Αναγνώριση Απόκρυψης** +### **Αναγνώριση Αποκρυπτογράφησης** Η αναγνώριση του αποκρυφωμένου κώδικα είναι το πρώτο βήμα στη διαδικασία απο-αποκρυπτογράφησης. Κύριοι δείκτες περιλαμβάνουν: -- Η **απουσία ή η ανακατωμένη μορφή συμβολοσειρών** σε Java και Android, που μπορεί να υποδηλώνει απόκρυψη συμβολοσειρών. +- Η **απουσία ή η ανακατωμένη μορφή των συμβολοσειρών** σε Java και Android, που μπορεί να υποδηλώνει αποκρυπτογράφηση συμβολοσειρών. - Η **παρουσία δυαδικών αρχείων** στον κατάλογο assets ή κλήσεις προς `DexClassLoader`, υποδεικνύοντας αποσυμπίεση κώδικα και δυναμική φόρτωση. -- Η χρήση **native βιβλιοθηκών μαζί με μη αναγνωρίσιμες JNI συναρτήσεις**, υποδεικνύοντας πιθανή απόκρυψη των native μεθόδων. +- Η χρήση **native βιβλιοθηκών μαζί με μη αναγνωρίσιμες JNI συναρτήσεις**, υποδεικνύοντας πιθανή αποκρυπτογράφηση των native μεθόδων. ## **Δυναμική Ανάλυση στην Απο-αποκρυπτογράφηση** -Με την εκτέλεση του κώδικα σε ελεγχόμενο περιβάλλον, η δυναμική ανάλυση **επιτρέπει την παρατήρηση του πώς συμπεριφέρεται ο αποκρυφωμένος κώδικας σε πραγματικό χρόνο**. Αυτή η μέθοδος είναι ιδιαίτερα αποτελεσματική στην αποκάλυψη των εσωτερικών λειτουργιών πολύπλοκων προτύπων απόκρυψης που έχουν σχεδιαστεί για να κρύβουν την αληθινή πρόθεση του κώδικα. +Με την εκτέλεση του κώδικα σε ελεγχόμενο περιβάλλον, η δυναμική ανάλυση **επιτρέπει την παρατήρηση του πώς συμπεριφέρεται ο αποκρυφωμένος κώδικας σε πραγματικό χρόνο**. Αυτή η μέθοδος είναι ιδιαίτερα αποτελεσματική στην αποκάλυψη των εσωτερικών λειτουργιών πολύπλοκων προτύπων αποκρυπτογράφησης που έχουν σχεδιαστεί για να κρύβουν την αληθινή πρόθεση του κώδικα. ### **Εφαρμογές Δυναμικής Ανάλυσης** -- **Αποκρυπτογράφηση σε Χρόνο Εκτέλεσης**: Πολλές τεχνικές απόκρυψης περιλαμβάνουν την κρυπτογράφηση συμβολοσειρών ή τμημάτων κώδικα που αποκρυπτογραφούνται μόνο κατά την εκτέλεση. Μέσω της δυναμικής ανάλυσης, αυτά τα κρυπτογραφημένα στοιχεία μπορούν να καταγραφούν τη στιγμή της αποκρυπτογράφησης, αποκαλύπτοντας την αληθινή τους μορφή. -- **Αναγνώριση Τεχνικών Απόκρυψης**: Παρακολουθώντας τη συμπεριφορά της εφαρμογής, η δυναμική ανάλυση μπορεί να βοηθήσει στην αναγνώριση συγκεκριμένων τεχνικών απόκρυψης που χρησιμοποιούνται, όπως η εικονικοποίηση κώδικα, οι packers ή η δυναμική δημιουργία κώδικα. +- **Αποκρυπτογράφηση σε Χρόνο Εκτέλεσης**: Πολλές τεχνικές αποκρυπτογράφησης περιλαμβάνουν την κρυπτογράφηση συμβολοσειρών ή τμημάτων κώδικα που αποκρυπτογραφούνται μόνο κατά την εκτέλεση. Μέσω της δυναμικής ανάλυσης, αυτά τα κρυπτογραφημένα στοιχεία μπορούν να καταγραφούν τη στιγμή της αποκρυπτογράφησης, αποκαλύπτοντας την αληθινή τους μορφή. +- **Αναγνώριση Τεχνικών Αποκρυπτογράφησης**: Παρακολουθώντας τη συμπεριφορά της εφαρμογής, η δυναμική ανάλυση μπορεί να βοηθήσει στην αναγνώριση συγκεκριμένων τεχνικών αποκρυπτογράφησης που χρησιμοποιούνται, όπως η εικονικοποίηση κώδικα, οι packers ή η δυναμική δημιουργία κώδικα. - **Ανακάλυψη Κρυφής Λειτουργικότητας**: Ο αποκρυφωμένος κώδικας μπορεί να περιέχει κρυφές λειτουργίες που δεν είναι προφανείς μόνο μέσω στατικής ανάλυσης. Η δυναμική ανάλυση επιτρέπει την παρατήρηση όλων των διαδρομών κώδικα, συμπεριλαμβανομένων εκείνων που εκτελούνται υπό προϋποθέσεις, για να αποκαλύψει τέτοιες κρυφές λειτουργίες. ## Αναφορές και Περαιτέρω Ανάγνωση - [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html) - BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)] -- Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο πολύπλοκες βιβλιοθήκες anti-analysis που έχω δει να χρησιμοποιούνται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές απόκρυψης σε native κώδικα. +- Αυτή η ομιλία καλύπτει την αντίστροφη μηχανική μιας από τις πιο πολύπλοκες βιβλιοθήκες anti-analysis που έχω δει να χρησιμοποιούνται από μια εφαρμογή Android. Καλύπτει κυρίως τεχνικές αποκρυπτογράφησης σε native κώδικα. - REcon 2019: “The Path to the Payload: Android Edition” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)] -- Αυτή η ομιλία συζητά μια σειρά τεχνικών απόκρυψης, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα botnet Android για να κρύψει τη συμπεριφορά του. +- Αυτή η ομιλία συζητά μια σειρά τεχνικών αποκρυπτογράφησης, αποκλειστικά σε κώδικα Java, που χρησιμοποιούσε ένα Android botnet για να κρύψει τη συμπεριφορά του. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md b/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md index 4bdf0a4ad..e80976634 100644 --- a/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md +++ b/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md @@ -11,7 +11,7 @@ - **Εγγενείς Βιβλιοθήκες σε Εφαρμογές Android:** - Χρησιμοποιούνται για εργασίες που απαιτούν υψηλή απόδοση. - Γραμμένες σε C ή C++, καθιστώντας την αντίστροφη μηχανική δύσκολη. -- Βρίσκονται σε μορφή `.so` (shared object), παρόμοια με τα δυαδικά αρχεία Linux. +- Βρίσκονται σε μορφή `.so` (shared object), παρόμοια με τα εκτελέσιμα Linux. - Οι δημιουργοί κακόβουλου λογισμικού προτιμούν τον εγγενή κώδικα για να κάνουν την ανάλυση πιο δύσκολη. - **Java Native Interface (JNI) & Android NDK:** - Το JNI επιτρέπει την υλοποίηση μεθόδων Java σε εγγενή κώδικα. diff --git a/src/mobile-pentesting/android-app-pentesting/smali-changes.md b/src/mobile-pentesting/android-app-pentesting/smali-changes.md index 12a6709d7..41c83877c 100644 --- a/src/mobile-pentesting/android-app-pentesting/smali-changes.md +++ b/src/mobile-pentesting/android-app-pentesting/smali-changes.md @@ -1,24 +1,24 @@ -# Smali - Αποσυμπίεση/\[Τροποποίηση]/Συμπίεση +# Smali - Decompiling/\[Modifying]/Compiling {{#include ../../banners/hacktricks-training.md}} -Μερικές φορές είναι ενδιαφέρον να τροποποιήσετε τον κώδικα της εφαρμογής για να αποκτήσετε πρόσβαση σε κρυφές πληροφορίες (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Τότε, θα μπορούσε να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να τον συμπιέσετε ξανά. +Μερικές φορές είναι ενδιαφέρον να τροποποιήσετε τον κώδικα της εφαρμογής για να αποκτήσετε πρόσβαση σε κρυφές πληροφορίες (ίσως καλά κρυμμένους κωδικούς ή σημαίες). Τότε, θα μπορούσε να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να τον ξανασυμπιέσετε. -**Αναφορά Opcodes:** [http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html](http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html) +**Opcodes reference:** [http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html](http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html) -## Γρήγορος Τρόπος +## Fast Way -Χρησιμοποιώντας το **Visual Studio Code** και την επέκταση [APKLab](https://github.com/APKLab/APKLab), μπορείτε να **αποσυμπιέσετε αυτόματα**, να τροποποιήσετε, **να συμπιέσετε ξανά**, να υπογράψετε και να εγκαταστήσετε την εφαρμογή χωρίς να εκτελέσετε καμία εντολή. +Χρησιμοποιώντας το **Visual Studio Code** και την επέκταση [APKLab](https://github.com/APKLab/APKLab), μπορείτε να **αποσυμπιέσετε αυτόματα**, να τροποποιήσετε, **να ξανασυμπιέσετε**, να υπογράψετε και να εγκαταστήσετε την εφαρμογή χωρίς να εκτελέσετε καμία εντολή. -Ένα άλλο **σενάριο** που διευκολύνει πολύ αυτή την εργασία είναι [**https://github.com/ax/apk.sh**](https://github.com/ax/apk.sh) +Ένα άλλο **script** που διευκολύνει πολύ αυτή την εργασία είναι [**https://github.com/ax/apk.sh**](https://github.com/ax/apk.sh) -## Αποσυμπίεση του APK +## Decompile the APK -Χρησιμοποιώντας το APKTool μπορείτε να έχετε πρόσβαση στον **κώδικα smali και τους πόρους**: +Χρησιμοποιώντας το APKTool μπορείτε να αποκτήσετε πρόσβαση στον **κώδικα smali και τους πόρους**: ```bash apktool d APP.apk ``` -Αν το **apktool** σας δώσει οποιοδήποτε σφάλμα, προσπαθήστε να [εγκαταστήσετε την **τελευταία έκδοση**](https://ibotpeaches.github.io/Apktool/install/) +Αν το **apktool** σας δώσει κάποιο σφάλμα, προσπαθήστε να [εγκαταστήσετε την **τελευταία έκδοση**](https://ibotpeaches.github.io/Apktool/install/) Ορισμένα **ενδιαφέροντα αρχεία που θα πρέπει να εξετάσετε είναι**: @@ -44,7 +44,7 @@ apktool d APP.apk ```bash apktool b . #In the folder generated when you decompiled the application ``` -Θα **συγκεντρώσει** το νέο APK **μέσα** στον φάκελο _**dist**_. +Θα **συγκεντρώσει** το νέο APK **μέσα** στον _**φάκελο dist**_. Αν το **apktool** ρίξει ένα **σφάλμα**, δοκιμάστε[ να εγκαταστήσετε την **τελευταία έκδοση**](https://ibotpeaches.github.io/Apktool/install/) @@ -149,7 +149,7 @@ invoke-static {v5, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/Strin Θυμηθείτε να προσθέσετε 3 στον αριθμό των _.locals_ στην αρχή της συνάρτησης. -Αυτός ο κώδικας είναι έτοιμος να εισαχθεί στη **μέση μιας συνάρτησης** (**αλλάξτε** τον αριθμό των **μεταβλητών** όπως απαιτείται). Θα πάρει την **τιμή του this.o**, **θα την μετατρέψει** σε **String** και στη συνέχεια **θα κάνει** ένα **toast** με την τιμή του. +Αυτός ο κώδικας είναι έτοιμος να εισαχθεί στη **μέση μιας συνάρτησης** (**αλλάξτε** τον αριθμό των **μεταβλητών** όπως απαιτείται). Θα πάρει την **τιμή του this.o**, θα την **μετατρέψει** σε **String** και στη συνέχεια θα **δημιουργήσει** ένα **toast** με την τιμή του. ```bash const/4 v10, 0x1 const/4 v11, 0x1 diff --git a/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md b/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md index 0ba9f18fb..108083d4b 100644 --- a/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md +++ b/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md @@ -15,9 +15,9 @@ - Μεταβείτε στις **Ρυθμίσεις** της συσκευής σας. - Προχωρήστε σε **Εφαρμογές** ή **Διαχειριστής Εφαρμογών** (αυτό μπορεί να διαφέρει ανάλογα με τη συσκευή σας). -- Βρείτε και επιλέξτε το **Google Play Store** από τη λίστα των εφαρμογών. +- Βρείτε και επιλέξτε το **Google Play Store** από τη λίστα εφαρμογών. - Πατήστε **Αναγκαστική διακοπή** για να τερματίσετε οποιαδήποτε εκτελούμενη διαδικασία της εφαρμογής. -- Στη συνέχεια, πατήστε **Καθαρισμός δεδομένων** ή **Καθαρισμός αποθήκευσης** (η ακριβής διατύπωση μπορεί να διαφέρει) για να επαναφέρετε την εφαρμογή Google Play Store στην προεπιλεγμένη κατάσταση. +- Στη συνέχεια, πατήστε **Καθαρισμός Δεδομένων** ή **Καθαρισμός Αποθήκευσης** (η ακριβής διατύπωση μπορεί να διαφέρει) για να επαναφέρετε την εφαρμογή Google Play Store στην προεπιλεγμένη κατάσταση. 4. **Αποκτήστε πρόσβαση στην περιορισμένη εφαρμογή:** - Ανοίξτε το **Google Play Store**. diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index 7fb5d04a4..824f5fedf 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -5,11 +5,11 @@ ## **Βασικές Πληροφορίες** **Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ περνά την αλληλεπίδραση στην εφαρμογή θύμα.\ -Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί ενέργειες στην εφαρμογή θύμα**. +Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί πραγματικά ενέργειες στην εφαρμογή θύμα**. ### Ανίχνευση -Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν οποιαδήποτε άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί επίσης αυτή την άδεια**. +Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν κάποια άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί και αυτή την άδεια**. ### Προστασία @@ -19,11 +19,11 @@ #### `filterTouchesWhenObscured` -Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, το `View` δεν θα λαμβάνει επαφές όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο. +Αν **`android:filterTouchesWhenObscured`** είναι ρυθμισμένο σε **`true`**, το `View` δεν θα λαμβάνει αγγίγματα όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο. #### **`setFilterTouchesWhenObscured`** -Η ιδιότητα **`setFilterTouchesWhenObscured`** ρυθμισμένη σε true μπορεί επίσης να αποτρέψει την εκμετάλλευση αυτής της ευπάθειας αν η έκδοση του Android είναι χαμηλότερη.\ +Η ιδιότητα **`setFilterTouchesWhenObscured`** ρυθμισμένη σε true μπορεί επίσης να αποτρέψει την εκμετάλλευση αυτής της ευπάθειας αν η έκδοση Android είναι χαμηλότερη.\ Αν ρυθμιστεί σε **`true`**, για παράδειγμα, ένα κουμπί μπορεί να απενεργοποιηθεί αυτόματα **αν καλύπτεται**: ```xml
### Παράδειγμα SIP REGISTER -Η μέθοδος REGISTER χρησιμοποιείται στο Πρωτόκολλο Έναρξης Συνεδρίας (SIP) για να επιτρέψει σε έναν χρήστη (UA), όπως ένα τηλέφωνο VoIP ή ένα softphone, να **καταχωρήσει την τοποθεσία του σε έναν διακομιστή καταχώρισης SIP**. Αυτή η διαδικασία ενημερώνει τον διακομιστή **για το πού να δρομολογήσει τις εισερχόμενες SIP αιτήσεις που προορίζονται για τον καταχωρημένο χρήστη**. Ο διακομιστής καταχώρισης είναι συνήθως μέρος ενός διακομιστή μεσολάβησης SIP ή ενός αφιερωμένου διακομιστή καταχώρισης. +Η μέθοδος REGISTER χρησιμοποιείται στο Πρωτόκολλο Έναρξης Συνεδρίας (SIP) για να επιτρέψει σε έναν χρήστη (UA), όπως ένα τηλέφωνο VoIP ή ένα softphone, να **καταχωρήσει την τοποθεσία του σε έναν διακομιστή καταχώρησης SIP**. Αυτή η διαδικασία ενημερώνει τον διακομιστή **για το πού να δρομολογήσει τις εισερχόμενες SIP αιτήσεις που προορίζονται για τον καταχωρημένο χρήστη**. Ο διακομιστής καταχώρησης είναι συνήθως μέρος ενός διακομιστή μεσολάβησης SIP ή ενός αφιερωμένου διακομιστή καταχώρησης. -Ακολουθεί ένα λεπτομερές παράδειγμα των μηνυμάτων SIP που εμπλέκονται σε μια διαδικασία αυθεντικοποίησης REGISTER: +Ακολουθεί ένα λεπτομερές παράδειγμα των μηνυμάτων SIP που εμπλέκονται σε μια διαδικασία αυθεντικοποίησης REGISTER: -1. Αρχικό **REGISTER** αίτημα από τον UA προς τον διακομιστή καταχώρισης: +1. Αρχικό **REGISTER** αίτημα από τον UA προς τον διακομιστή καταχώρησης: ```yaml REGISTER sip:example.com SIP/2.0 Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds @@ -207,7 +207,7 @@ qop = "auth" response = calculate_sip_md5_response(username, password, realm, method, uri, nonce, nc, cnonce, qop) print(f"MD5 response value: {response}") ``` -4. **Επιτυχής εγγραφή** απάντηση από τον διακομιστή μητρώου: +4. **Επιτυχής εγγραφή** από τον διακομιστή μητρώου: ```yaml SIP/2.0 200 OK Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md index c3515c96e..9a58dd422 100644 --- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md +++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md @@ -6,14 +6,14 @@ Δοκιμάστε να χρησιμοποιήσετε **διαφορετικούς ρήματα** για να αποκτήσετε πρόσβαση στο αρχείο: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK` -- Ελέγξτε τις κεφαλίδες απόκρισης, ίσως κάποιες πληροφορίες να μπορούν να δοθούν. Για παράδειγμα, μια **200 απόκριση** σε **HEAD** με `Content-Length: 55` σημαίνει ότι το **HEAD verb μπορεί να έχει πρόσβαση στις πληροφορίες**. Αλλά πρέπει ακόμα να βρείτε έναν τρόπο να εξάγετε αυτές τις πληροφορίες. +- Ελέγξτε τις κεφαλίδες απόκρισης, ίσως κάποιες πληροφορίες να μπορούν να δοθούν. Για παράδειγμα, μια **200 απόκριση** σε **HEAD** με `Content-Length: 55` σημαίνει ότι το **HEAD verb μπορεί να αποκτήσει πρόσβαση στις πληροφορίες**. Αλλά πρέπει ακόμα να βρείτε έναν τρόπο να εξάγετε αυτές τις πληροφορίες. - Χρησιμοποιώντας μια HTTP κεφαλίδα όπως `X-HTTP-Method-Override: PUT` μπορεί να αντικαταστήσει το ρήμα που χρησιμοποιείται. - Χρησιμοποιήστε το **`TRACE`** ρήμα και αν είστε πολύ τυχεροί ίσως στην απόκριση να δείτε επίσης τις **κεφαλίδες που προστέθηκαν από ενδιάμεσους διακομιστές** που μπορεί να είναι χρήσιμες. ## HTTP Headers Fuzzing - **Αλλάξτε την κεφαλίδα Host** σε κάποια αυθαίρετη τιμή ([που λειτούργησε εδώ](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) -- Δοκιμάστε να [**χρησιμοποιήσετε άλλους User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) για να αποκτήσετε πρόσβαση στον πόρο. +- Δοκιμάστε να [**χρησιμοποιήσετε άλλους User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) για να αποκτήσετε πρόσβαση στους πόρους. - **Fuzz HTTP Headers**: Δοκιμάστε να χρησιμοποιήσετε HTTP Proxy **Headers**, HTTP Authentication Basic και NTLM brute-force (με λίγους μόνο συνδυασμούς) και άλλες τεχνικές. Για να κάνω όλα αυτά έχω δημιουργήσει το εργαλείο [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass). - `X-Originating-IP: 127.0.0.1` @@ -45,7 +45,7 @@ Αν το _/path_ είναι μπλοκαρισμένο: - Δοκιμάστε να χρησιμοποιήσετε _**/**_**%2e/path \_(αν η πρόσβαση είναι μπλοκαρισμένη από έναν διακομιστή μεσολάβησης, αυτό θα μπορούσε να παρακάμψει την προστασία). Δοκιμάστε επίσης**\_\*\* /%252e\*\*/path (διπλή κωδικοποίηση URL) -- Δοκιμάστε **Unicode bypass**: _/**%ef%bc%8f**path_ (Οι κωδικοποιημένοι χαρακτήρες URL είναι όπως το "/") έτσι όταν κωδικοποιηθούν ξανά θα είναι _//path_ και ίσως έχετε ήδη παρακάμψει τον έλεγχο ονόματος _/path_ +- Δοκιμάστε **Unicode bypass**: _/**%ef%bc%8f**path_ (Οι χαρακτήρες κωδικοποιημένοι URL είναι όπως το "/") έτσι όταν κωδικοποιηθούν ξανά θα είναι _//path_ και ίσως έχετε ήδη παρακάμψει τον έλεγχο ονόματος _/path_ - **Άλλες παρακάμψεις μονοπατιών**: - site.com/secret –> HTTP 403 Forbidden - site.com/SECRET –> HTTP 200 OK @@ -78,7 +78,7 @@ - Αφαιρέστε τις παραμέτρους - Αναδιατάξτε τις παραμέτρους - Χρησιμοποιήστε ειδικούς χαρακτήρες. -- Εκτελέστε δοκιμές ορίου στις παραμέτρους — παρέχετε τιμές όπως _-234_ ή _0_ ή _99999999_ (μόνο μερικές παραδείγματα). +- Εκτελέστε δοκιμές ορίων στις παραμέτρους — παρέχετε τιμές όπως _-234_ ή _0_ ή _99999999_ (μόνο μερικές παραδείγματα). ## **Protocol version** @@ -105,7 +105,7 @@ root toor test test guest guest ``` -## Αυτόματα Εργαλεία +## Αυτόματες Εργαλεία - [https://github.com/lobuhi/byp4xx](https://github.com/lobuhi/byp4xx) - [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403) @@ -114,4 +114,5 @@ guest guest - [Forbidden Buster](https://github.com/Sn1r/Forbidden-Buster) - [NoMoreForbidden](https://github.com/akinerk/NoMoreForbidden) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index ccaa19d00..522816f4d 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -25,20 +25,20 @@ web-api-pentesting.md ## Περίληψη Μεθοδολογίας -> Σε αυτή τη μεθοδολογία θα υποθέσουμε ότι θα επιτεθείτε σε ένα domain (ή υποdomain) και μόνο σε αυτό. Έτσι, θα πρέπει να εφαρμόσετε αυτή τη μεθοδολογία σε κάθε ανακαλυφθέν domain, υποdomain ή IP με ακαθόριστο web server εντός του πεδίου εφαρμογής. +> Σε αυτή τη μεθοδολογία θα υποθέσουμε ότι θα επιτεθείτε σε ένα domain (ή subdomain) και μόνο σε αυτό. Έτσι, θα πρέπει να εφαρμόσετε αυτή τη μεθοδολογία σε κάθε ανακαλυφθέν domain, subdomain ή IP με ακαθόριστο web server εντός του πεδίου εφαρμογής. - [ ] Ξεκινήστε με την **ταυτοποίηση** των **τεχνολογιών** που χρησιμοποιούνται από τον web server. Αναζητήστε **κόλπα** που να έχετε υπόψη σας κατά τη διάρκεια της υπόλοιπης δοκιμής αν μπορείτε να ταυτοποιήσετε επιτυχώς την τεχνολογία. - [ ] Υπάρχει κάποια **γνωστή ευπάθεια** της έκδοσης της τεχνολογίας; - [ ] Χρησιμοποιείτε κάποια **γνωστή τεχνολογία**; Υπάρχει κάποιο **χρήσιμο κόλπο** για να εξάγετε περισσότερες πληροφορίες; -- [ ] Υπάρχει κάποιος **ειδικευμένος σαρωτής** που να τρέξετε (όπως το wpscan); +- [ ] Υπάρχει κάποιος **ειδικευμένος σαρωτής** που να τρέξει (όπως το wpscan); - [ ] Ξεκινήστε με **γενικούς σαρωτές**. Ποτέ δεν ξέρετε αν θα βρουν κάτι ή αν θα βρουν κάποιες ενδιαφέρουσες πληροφορίες. - [ ] Ξεκινήστε με τους **αρχικούς ελέγχους**: **robots**, **sitemap**, **σφάλμα 404** και **σάρωση SSL/TLS** (αν είναι HTTPS). -- [ ] Ξεκινήστε **spidering** τη σελίδα: Είναι καιρός να **βρείτε** όλα τα πιθανά **αρχεία, φακέλους** και **παραμέτρους που χρησιμοποιούνται.** Επίσης, ελέγξτε για **ειδικές ανακαλύψεις**. +- [ ] Ξεκινήστε **spidering** τη σελίδα: Είναι ώρα να **βρείτε** όλα τα πιθανά **αρχεία, φακέλους** και **παραμέτρους που χρησιμοποιούνται.** Επίσης, ελέγξτε για **ειδικές ανακαλύψεις**. - [ ] _Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να γίνει spidering._ -- [ ] **Brute-Forcing Καταλόγων**: Προσπαθήστε να κάνετε brute force σε όλους τους ανακαλυφθέντες φακέλους αναζητώντας νέα **αρχεία** και **καταλόγους**. +- [ ] **Brute-Forcing Φακέλων**: Προσπαθήστε να κάνετε brute force σε όλους τους ανακαλυφθέντες φακέλους αναζητώντας νέα **αρχεία** και **φακέλους**. - [ ] _Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να γίνει Brute-Forced._ - [ ] **Έλεγχος Αντιγράφων**: Δοκιμάστε αν μπορείτε να βρείτε **αντίγραφα** των **ανακαλυφθέντων αρχείων** προσθέτοντας κοινές επεκτάσεις αντιγράφων. -- [ ] **Brute-Force παραμέτρων**: Προσπαθήστε να **βρείτε κρυφές παραμέτρους**. +- [ ] **Brute-Force παράμετροι**: Προσπαθήστε να **βρείτε κρυφές παραμέτρους**. - [ ] Μόλις έχετε **ταυτοποιήσει** όλα τα πιθανά **endpoints** που δέχονται **είσοδο χρήστη**, ελέγξτε για κάθε είδους **ευπάθειες** που σχετίζονται με αυτό. - [ ] [Ακολουθήστε αυτή τη λίστα ελέγχου](../../pentesting-web/web-vulnerabilities-methodology.md) @@ -46,7 +46,7 @@ web-api-pentesting.md ### Ταυτοποίηση -Ελέγξτε αν υπάρχουν **γνωστές ευπάθειες** για την **έκδοση** του server που εκτελείται.\ +Ελέγξτε αν υπάρχουν **γνωστές ευπάθειες** για την **έκδοση** του server που τρέχει.\ Οι **HTTP headers και τα cookies της απάντησης** θα μπορούσαν να είναι πολύ χρήσιμα για να **ταυτοποιήσετε** τις **τεχνολογίες** και/ή την **έκδοση** που χρησιμοποιείται. Η **σάρωση Nmap** μπορεί να ταυτοποιήσει την έκδοση του server, αλλά θα μπορούσαν επίσης να είναι χρήσιμα τα εργαλεία [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ή [**https://builtwith.com/**](https://builtwith.com)**:** ```bash whatweb -a 1 #Stealthy @@ -106,11 +106,11 @@ _Λάβετε υπόψη ότι το **ίδιο domain** μπορεί να χρ Εάν ο **πηγαίος κώδικας** της εφαρμογής είναι διαθέσιμος στο **github**, εκτός από την εκτέλεση ενός **White box test** της εφαρμογής, υπάρχει **ορισμένες πληροφορίες** που θα μπορούσαν να είναι **χρήσιμες** για την τρέχουσα **Black-Box testing**: - Υπάρχει κάποιο **Change-log ή Readme ή Version** αρχείο ή οτιδήποτε με **πληροφορίες έκδοσης προσβάσιμες** μέσω διαδικτύου; -- Πώς και πού αποθηκεύονται τα **credentials**; Υπάρχει κάποιο (προσβάσιμο;) **αρχείο** με credentials (ονόματα χρηστών ή κωδικούς); -- Είναι οι **κωδικοί** σε **καθαρό κείμενο**, **κρυπτογραφημένοι** ή ποιος **αλγόριθμος κατακερματισμού** χρησιμοποιείται; +- Πώς και πού αποθηκεύονται τα **credentials**; Υπάρχει κάποιο (προσβάσιμο;) **αρχείο** με credentials (ονόματα χρηστών ή κωδικούς πρόσβασης); +- Είναι οι **κωδικοί πρόσβασης** σε **καθαρό κείμενο**, **κρυπτογραφημένοι** ή ποιος **αλγόριθμος κατακερματισμού** χρησιμοποιείται; - Χρησιμοποιεί κάποιο **master key** για την κρυπτογράφηση κάποιου πράγματος; Ποιος **αλγόριθμος** χρησιμοποιείται; - Μπορείτε να **πρόσβαση σε οποιοδήποτε από αυτά τα αρχεία** εκμεταλλευόμενοι κάποια ευπάθεια; -- Υπάρχει κάποια **ενδιαφέρουσα πληροφορία στο github** (λυμένα και μη λυμένα) **issues**; Ή στην **ιστορία commit** (ίσως κάποιο **password που εισήχθη σε ένα παλιό commit**) ; +- Υπάρχει κάποια **ενδιαφέρουσα πληροφορία στο github** (λυμένα και μη λυμένα) **ζητήματα**; Ή στην **ιστορία commit** (ίσως κάποιο **password που εισήχθη σε ένα παλιό commit**) ; {{#ref}} code-review-tools.md @@ -145,7 +145,7 @@ wpscan --force update -e --url joomscan --ec -u joomlavs.rb #https://github.com/rastating/joomlavs ``` -> Σε αυτό το σημείο θα πρέπει ήδη να έχετε κάποιες πληροφορίες σχετικά με τον web server που χρησιμοποιεί ο πελάτης (αν έχουν δοθεί δεδομένα) και μερικά κόλπα που πρέπει να έχετε κατά νου κατά τη διάρκεια της δοκιμής. Αν είστε τυχεροί, μπορεί να έχετε βρει ακόμη και ένα CMS και να έχετε τρέξει κάποιο scanner. +> Σε αυτό το σημείο θα πρέπει ήδη να έχετε κάποιες πληροφορίες για τον web server που χρησιμοποιεί ο πελάτης (αν έχουν δοθεί δεδομένα) και μερικά κόλπα που πρέπει να έχετε κατά νου κατά τη διάρκεια της δοκιμής. Αν είστε τυχεροί, μπορεί να έχετε βρει ακόμη και ένα CMS και να έχετε τρέξει κάποιο scanner. ## Βήμα-βήμα Ανακάλυψη Εφαρμογής Ιστού @@ -153,7 +153,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs ### Αρχικές ελέγχοι -**Προεπιλεγμένες σελίδες με ενδιαφέροντα στοιχεία:** +**Προεπιλεγμένες σελίδες με ενδιαφέροντα πληροφορίες:** - /robots.txt - /sitemap.xml @@ -169,7 +169,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs - Πρόσβαση σε **ψεύτικες σελίδες** όπως /whatever_fake.php (.aspx,.html,.κ.λπ.) - **Προσθέστε "\[]", "]]", και "\[\["** στις **τιμές cookie** και **τιμές παραμέτρων** για να δημιουργήσετε σφάλματα - Δημιουργήστε σφάλμα δίνοντας είσοδο ως **`/~randomthing/%s`** στο **τέλος** της **διεύθυνσης URL** -- Δοκιμάστε **διαφορετικά HTTP Verbs** όπως PATCH, DEBUG ή λανθασμένα όπως FAKE +- Δοκιμάστε **διαφορετικά HTTP Verbs** όπως PATCH, DEBUG ή λάθος όπως FAKE #### **Ελέγξτε αν μπορείτε να ανεβάσετε αρχεία (**[**PUT verb, WebDav**](put-method-webdav.md)**)** @@ -180,7 +180,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs ### **SSL/TLS ευπάθειες** -- Αν η εφαρμογή **δεν αναγκάζει τον χρήστη σε HTTPS** σε κανένα σημείο, τότε είναι **ευάλωτη σε MitM** +- Αν η εφαρμογή **δεν αναγκάζει τον χρήστη να χρησιμοποιεί HTTPS** σε κανένα σημείο, τότε είναι **ευάλωτη σε MitM** - Αν η εφαρμογή **αποστέλλει ευαίσθητα δεδομένα (κωδικούς πρόσβασης) χρησιμοποιώντας HTTP**. Τότε είναι μια υψηλή ευπάθεια. Χρησιμοποιήστε [**testssl.sh**](https://github.com/drwetter/testssl.sh) για να ελέγξετε για **ευπάθειες** (Στα προγράμματα Bug Bounty πιθανώς αυτές οι ευπάθειες δεν θα γίνουν αποδεκτές) και χρησιμοποιήστε [**a2sv** ](https://github.com/hahwul/a2sv) για να επανελέγξετε τις ευπάθειες: @@ -206,25 +206,25 @@ sslyze --regular - [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, υποδεικνύει επίσης "juicy files". - [**evine** ](https://github.com/saeeddhqan/evine)(go): Διαδραστικός CLI HTML spider. Αναζητά επίσης στο Archive.org. - [**meg**](https://github.com/tomnomnom/meg) (go): Αυτό το εργαλείο δεν είναι spider αλλά μπορεί να είναι χρήσιμο. Μπορείτε απλώς να υποδείξετε ένα αρχείο με hosts και ένα αρχείο με paths και το meg θα ανακτήσει κάθε path σε κάθε host και θα αποθηκεύσει την απάντηση. -- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider με δυνατότητες rendering JS. Ωστόσο, φαίνεται ότι δεν συντηρείται, η προcompiled έκδοση είναι παλιά και ο τρέχων κώδικας δεν συντάσσεται. +- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider με δυνατότητες απόδοσης JS. Ωστόσο, φαίνεται ότι δεν συντηρείται, η προcompiled έκδοση είναι παλιά και ο τρέχων κώδικας δεν συντάσσεται. - [**gau**](https://github.com/lc/gau) (go): HTML spider που χρησιμοποιεί εξωτερικούς παρόχους (wayback, otx, commoncrawl). - [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Αυτό το script θα βρει URLs με παραμέτρους και θα τα καταγράψει. -- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider με δυνατότητες rendering JS. +- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider με δυνατότητες απόδοσης JS. - [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, με δυνατότητες beautify JS ικανές να αναζητούν νέους δρόμους σε αρχεία JS. Θα άξιζε επίσης να ρίξετε μια ματιά στο [JSScanner](https://github.com/dark-warlord14/JSScanner), το οποίο είναι ένα wrapper του LinkFinder. -- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Για την εξαγωγή endpoints τόσο από HTML πηγή όσο και από ενσωματωμένα αρχεία javascript. Χρήσιμο για bug hunters, red teamers, infosec ninjas. -- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ένα script python 2.7 που χρησιμοποιεί Tornado και JSBeautifier για να αναλύσει σχετικές URLs από αρχεία JavaScript. Χρήσιμο για την εύκολη ανακάλυψη AJAX requests. Φαίνεται ότι δεν συντηρείται. +- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Για την εξαγωγή endpoints τόσο από HTML πηγή όσο και από ενσωματωμένα αρχεία javascript. Χρήσιμο για κυνηγούς σφαλμάτων, red teamers, infosec ninjas. +- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Ένα script python 2.7 που χρησιμοποιεί Tornado και JSBeautifier για να αναλύσει σχετικές URLs από αρχεία JavaScript. Χρήσιμο για την εύκολη ανακάλυψη AJAX αιτημάτων. Φαίνεται ότι δεν συντηρείται. - [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Δίνοντας ένα αρχείο (HTML) θα εξάγει URLs από αυτό χρησιμοποιώντας έξυπνη κανονική έκφραση για να βρει και να εξάγει τις σχετικές URLs από άσχημα (minify) αρχεία. - [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, διάφορα εργαλεία): Συγκεντρώνει ενδιαφέρουσες πληροφορίες από αρχεία JS χρησιμοποιώντας διάφορα εργαλεία. - [**subjs**](https://github.com/lc/subjs) (go): Βρείτε αρχεία JS. -- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Φορτώστε μια σελίδα σε έναν headless browser και εκτυπώστε όλες τις URLs που φορτώθηκαν για να φορτωθεί η σελίδα. +- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Φορτώστε μια σελίδα σε έναν headless browser και εκτυπώστε όλες τις URLs που φορτώθηκαν για να φορτώσετε τη σελίδα. - [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Εργαλείο ανακάλυψης περιεχομένου που συνδυάζει πολλές επιλογές των προηγούμενων εργαλείων. -- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Μια επέκταση Burp για να βρείτε paths και params σε αρχεία JS. -- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ένα εργαλείο που δίνοντας το .js.map URL θα σας δώσει τον beautified JS κώδικα. +- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Μια επέκταση Burp για να βρείτε δρόμους και παραμέτρους σε αρχεία JS. +- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Ένα εργαλείο που δίνοντας το URL .js.map θα σας δώσει τον beautified κώδικα JS. - [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Αυτό είναι ένα εργαλείο που χρησιμοποιείται για την ανακάλυψη endpoints για έναν δεδομένο στόχο. - [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ανακαλύψτε συνδέσμους από τη μηχανή wayback (κατεβάζοντας επίσης τις απαντήσεις στη wayback και αναζητώντας περισσότερους συνδέσμους). -- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (ακόμη και συμπληρώνοντας φόρμες) και επίσης βρείτε ευαίσθητες πληροφορίες χρησιμοποιώντας συγκεκριμένες regex. +- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawl (ακόμη και συμπληρώνοντας φόρμες) και επίσης βρείτε ευαίσθητες πληροφορίες χρησιμοποιώντας συγκεκριμένες κανονικές εκφράσεις. - [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Το Spider Suite είναι ένα προηγμένο multi-feature GUI web security Crawler/Spider σχεδιασμένο για επαγγελματίες κυβερνοασφάλειας. -- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Είναι ένα πακέτο Go και [εργαλείο γραμμής εντολών](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για την εξαγωγή URLs, paths, μυστικών και άλλων ενδιαφέροντων δεδομένων από τον πηγαίο κώδικα JavaScript. +- [**jsluice**](https://github.com/BishopFox/jsluice) (go): Είναι ένα πακέτο Go και [εργαλείο γραμμής εντολών](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) για την εξαγωγή URLs, δρόμων, μυστικών και άλλων ενδιαφερόντων δεδομένων από τον πηγαίο κώδικα JavaScript. - [**ParaForge**](https://github.com/Anof-cyber/ParaForge): Το ParaForge είναι μια απλή **επέκταση Burp Suite** για **να εξάγει τις παραμέτρους και τα endpoints** από το αίτημα για να δημιουργήσει προσαρμοσμένες λίστες λέξεων για fuzzing και αρίθμηση. - [**katana**](https://github.com/projectdiscovery/katana) (go): Καταπληκτικό εργαλείο για αυτό. - [**Crawley**](https://github.com/s0rg/crawley) (go): Εκτυπώνει κάθε σύνδεσμο που μπορεί να βρει. @@ -243,7 +243,7 @@ sslyze --regular - [**uro**](https://github.com/s0md3v/uro) (python): Αυτό δεν είναι spider αλλά ένα εργαλείο που δίνοντας τη λίστα των βρεθέντων URLs θα διαγράψει τα "διπλά" URLs. - [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Επέκταση Burp για να δημιουργήσει μια λίστα φακέλων από την ιστορία burp διαφόρων σελίδων. - [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Αφαιρεί URLs με διπλές λειτουργίες (βάσει js imports). -- [**Chamaleon**](https://github.com/iustin24/chameleon): Χρησιμοποιεί wapalyzer για να ανιχνεύσει τις χρησιμοποιούμενες τεχνολογίες και να επιλέξει τις λίστες λέξεων που θα χρησιμοποιηθούν. +- [**Chamaleon**](https://github.com/iustin24/chameleon): Χρησιμοποιεί το wapalyzer για να ανιχνεύσει τις χρησιμοποιούμενες τεχνολογίες και να επιλέξει τις λίστες λέξεων που θα χρησιμοποιηθούν. **Συνιστώμενα λεξικά:** @@ -264,14 +264,14 @@ sslyze --regular - _/usr/share/wordlists/dirb/big.txt_ - _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_ -_Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να υποβληθεί σε Brute-Force._ +_Σημειώστε ότι κάθε φορά που ανακαλύπτεται ένας νέος φάκελος κατά τη διάρκεια του brute-forcing ή του spidering, θα πρέπει να γίνει Brute-Forced._ ### Τι να ελέγξετε σε κάθε αρχείο που βρέθηκε - [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Βρείτε σπασμένους συνδέσμους μέσα σε HTML που μπορεί να είναι επιρρεπείς σε καταλήψεις. - **Αντίγραφα αρχείων**: Μόλις βρείτε όλα τα αρχεία, αναζητήστε αντίγραφα όλων των εκτελέσιμων αρχείων ("_.php_", "_.aspx_"...). Κοινές παραλλαγές για την ονομασία ενός αντιγράφου είναι: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp και file.old._ Μπορείτε επίσης να χρησιμοποιήσετε το εργαλείο [**bfac**](https://github.com/mazen160/bfac) **ή** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** - **Ανακαλύψτε νέες παραμέτρους**: Μπορείτε να χρησιμοποιήσετε εργαλεία όπως [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **και** [**Param Miner**](https://github.com/PortSwigger/param-miner) **για να ανακαλύψετε κρυφές παραμέτρους. Αν μπορείτε, θα μπορούσατε να προσπαθήσετε να αναζητήσετε** κρυφές παραμέτρους σε κάθε εκτελέσιμο αρχείο web. -- _Arjun όλες οι προεπιλεγμένες λίστες λέξεων:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) +- _Arjun all default wordlists:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) - _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) @@ -291,8 +291,8 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται - [Αν βρείτε ένα _**.git**_ αρχείο μπορεί να εξαχθεί κάποια πληροφορία](git.md). - Αν βρείτε ένα _**.env**_ πληροφορίες όπως api keys, κωδικούς db και άλλες πληροφορίες μπορεί να βρεθούν. - Αν βρείτε **API endpoints** θα [πρέπει επίσης να τα δοκιμάσετε](web-api-pentesting.md). Αυτά δεν είναι αρχεία, αλλά πιθανότατα θα "μοιάζουν" με αυτά. -- **JS αρχεία**: Στην ενότητα spidering αναφέρθηκαν διάφορα εργαλεία που μπορούν να εξάγουν paths από αρχεία JS. Επίσης, θα ήταν ενδιαφέρον να **παρακολουθείτε κάθε JS αρχείο που βρέθηκε**, καθώς σε ορισμένες περιπτώσεις, μια αλλαγή μπορεί να υποδηλώνει ότι μια πιθανή ευπάθεια εισήχθη στον κώδικα. Μπορείτε να χρησιμοποιήσετε για παράδειγμα [**JSMon**](https://github.com/robre/jsmon)**.** -- Θα πρέπει επίσης να ελέγξετε τα ανακαλυφθέντα JS αρχεία με [**RetireJS**](https://github.com/retirejs/retire.js/) ή [**JSHole**](https://github.com/callforpapers-source/jshole) για να δείτε αν είναι ευάλωτα. +- **JS αρχεία**: Στην ενότητα spidering αναφέρθηκαν διάφορα εργαλεία που μπορούν να εξάγουν δρόμους από αρχεία JS. Επίσης, θα ήταν ενδιαφέρον να **παρακολουθείτε κάθε JS αρχείο που βρέθηκε**, καθώς σε ορισμένες περιπτώσεις, μια αλλαγή μπορεί να υποδηλώνει ότι μια πιθανή ευπάθεια εισήχθη στον κώδικα. Μπορείτε να χρησιμοποιήσετε για παράδειγμα [**JSMon**](https://github.com/robre/jsmon)**.** +- Πρέπει επίσης να ελέγξετε τα ανακαλυφθέντα JS αρχεία με [**RetireJS**](https://github.com/retirejs/retire.js/) ή [**JSHole**](https://github.com/callforpapers-source/jshole) για να δείτε αν είναι ευάλωτα. - **Javascript Deobfuscator and Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator). - **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org). - **JsFuck deobfuscation** (javascript με χαρακτήρες:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)). @@ -308,7 +308,7 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται **502 Proxy Error** -Αν οποιαδήποτε σελίδα **απαντά** με αυτόν τον **κωδικό**, είναι πιθανό να είναι μια **κακώς ρυθμισμένη proxy**. **Αν στείλετε ένα HTTP αίτημα όπως: `GET https://google.com HTTP/1.1`** (με την κεφαλίδα host και άλλες κοινές κεφαλίδες), η **proxy** θα προσπαθήσει να **προσεγγίσει** _**google.com**_ **και θα έχετε βρει μια** SSRF. +Αν οποιαδήποτε σελίδα **απαντά** με αυτόν τον **κωδικό**, είναι πιθανό να είναι μια **κακώς ρυθμισμένη proxy**. **Αν στείλετε ένα HTTP αίτημα όπως: `GET https://google.com HTTP/1.1`** (με την κεφαλίδα host και άλλες κοινές κεφαλίδες), η **proxy** θα προσπαθήσει να **πρόσβαση** _**google.com**_ **και θα έχετε βρει μια** SSRF. **NTLM Authentication - Info disclosure** @@ -322,7 +322,7 @@ _Σημειώστε ότι κάθε φορά που ανακαλύπτεται ### Έλεγχος ευπαθειών Web -Τώρα που έχει πραγματοποιηθεί μια εκτενής αρίθμηση της web εφαρμογής, είναι καιρός να ελέγξετε για πολλές πιθανές ευπάθειες. Μπορείτε να βρείτε τη λίστα ελέγχου εδώ: +Τώρα που έχει γίνει μια εκτενής αρίθμηση της web εφαρμογής, είναι καιρός να ελέγξετε για πολλές πιθανές ευπάθειες. Μπορείτε να βρείτε τη λίστα ελέγχου εδώ: {{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md diff --git a/src/network-services-pentesting/pentesting-web/angular.md b/src/network-services-pentesting/pentesting-web/angular.md index eaf32f1e1..1ae506a0b 100644 --- a/src/network-services-pentesting/pentesting-web/angular.md +++ b/src/network-services-pentesting/pentesting-web/angular.md @@ -5,7 +5,7 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist). * [ ] Το Angular θεωρείται ένα framework πλευράς πελάτη και δεν αναμένεται να παρέχει προστασία πλευράς διακομιστή -* [ ] Το sourcemap για τα scripts είναι απενεργοποιημένο στη ρύθμιση του έργου +* [ ] Το sourcemap για τα scripts είναι απενεργοποιημένο στην παραμετροποίηση του έργου * [ ] Η μη αξιόπιστη είσοδος χρήστη πάντα διαστρεβλώνεται ή καθαρίζεται πριν χρησιμοποιηθεί σε πρότυπα * [ ] Ο χρήστης δεν έχει έλεγχο πάνω σε πρότυπα πλευράς διακομιστή ή πλευράς πελάτη * [ ] Η μη αξιόπιστη είσοδος χρήστη καθαρίζεται χρησιμοποιώντας ένα κατάλληλο πλαίσιο ασφαλείας πριν γίνει αξιόπιστη από την εφαρμογή @@ -14,7 +14,7 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist). ## What is Angular -Το Angular είναι ένα **ισχυρό** και **ανοιχτού κώδικα** framework front-end που διατηρείται από την **Google**. Χρησιμοποιεί **TypeScript** για να βελτιώσει την αναγνωσιμότητα του κώδικα και την αποσφαλμάτωση. Με ισχυρούς μηχανισμούς ασφαλείας, το Angular αποτρέπει κοινές ευπάθειες πλευράς πελάτη όπως **XSS** και **ανοιχτές ανακατευθύνσεις**. Μπορεί να χρησιμοποιηθεί και στην **πλευρά του διακομιστή**, καθιστώντας τις παρατηρήσεις ασφαλείας σημαντικές από **και τις δύο πλευρές**. +Το Angular είναι ένα **ισχυρό** και **ανοιχτού κώδικα** framework front-end που διατηρείται από την **Google**. Χρησιμοποιεί **TypeScript** για να βελτιώσει την αναγνωσιμότητα του κώδικα και την αποσφαλμάτωση. Με ισχυρούς μηχανισμούς ασφαλείας, το Angular αποτρέπει κοινές ευπάθειες πλευράς πελάτη όπως **XSS** και **ανοιχτές ανακατευθύνσεις**. Μπορεί να χρησιμοποιηθεί και στην **πλευρά του διακομιστή**, καθιστώντας τις παραμέτρους ασφαλείας σημαντικές από **και τις δύο πλευρές**. ## Framework architecture @@ -39,7 +39,7 @@ my-workspace/ ├── angular.json #provides workspace-wide and project-specific configuration defaults └── tsconfig.json #provides the base TypeScript configuration for projects in the workspace ``` -Σύμφωνα με την τεκμηρίωση, κάθε εφαρμογή Angular έχει τουλάχιστον ένα συστατικό, το ριζικό συστατικό (`AppComponent`) που συνδέει μια ιεραρχία συστατικών με το DOM. Κάθε συστατικό ορίζει μια κλάση που περιέχει δεδομένα και λογική της εφαρμογής και σχετίζεται με ένα HTML template που ορίζει μια προβολή που θα εμφανίζεται σε ένα στοχευμένο περιβάλλον. Ο διακοσμητής `@Component()` αναγνωρίζει την κλάση αμέσως από κάτω του ως συστατικό και παρέχει το template και σχετικές μεταδεδομένες πληροφορίες που είναι συγκεκριμένες για το συστατικό. Το `AppComponent` ορίζεται στο αρχείο `app.component.ts`. +Σύμφωνα με την τεκμηρίωση, κάθε εφαρμογή Angular έχει τουλάχιστον ένα συστατικό, το ριζικό συστατικό (`AppComponent`) που συνδέει μια ιεραρχία συστατικών με το DOM. Κάθε συστατικό ορίζει μια κλάση που περιέχει δεδομένα και λογική της εφαρμογής, και σχετίζεται με ένα HTML πρότυπο που ορίζει μια προβολή που θα εμφανίζεται σε ένα στοχευμένο περιβάλλον. Ο διακοσμητής `@Component()` αναγνωρίζει την κλάση αμέσως από κάτω του ως συστατικό και παρέχει το πρότυπο και σχετικές μεταδεδομένες πληροφορίες που είναι συγκεκριμένες για το συστατικό. Το `AppComponent` ορίζεται στο αρχείο `app.component.ts`. Τα Angular NgModules δηλώνουν ένα πλαίσιο μεταγλώττισης για ένα σύνολο συστατικών που είναι αφιερωμένο σε έναν τομέα εφαρμογής, μια ροή εργασίας ή ένα στενά σχετιζόμενο σύνολο δυνατοτήτων. Κάθε εφαρμογή Angular έχει ένα ριζικό module, που ονομάζεται συμβατικά `AppModule`, το οποίο παρέχει τον μηχανισμό εκκίνησης που εκκινεί την εφαρμογή. Μια εφαρμογή συνήθως περιέχει πολλά λειτουργικά modules. Το `AppModule` ορίζεται στο αρχείο `app.module.ts`. @@ -49,7 +49,7 @@ my-workspace/ ## Ρύθμιση sourcemap -Το πλαίσιο Angular μεταφράζει αρχεία TypeScript σε κώδικα JavaScript ακολουθώντας τις επιλογές του `tsconfig.json` και στη συνέχεια κατασκευάζει ένα έργο με τη ρύθμιση του `angular.json`. Κοιτάζοντας το αρχείο `angular.json`, παρατηρήσαμε μια επιλογή για να ενεργοποιήσουμε ή να απενεργοποιήσουμε ένα sourcemap. Σύμφωνα με την τεκμηρίωση του Angular, η προεπιλεγμένη ρύθμιση έχει ένα αρχείο sourcemap ενεργοποιημένο για τα scripts και δεν είναι κρυφό από προεπιλογή: +Το πλαίσιο Angular μεταφράζει αρχεία TypeScript σε κώδικα JavaScript ακολουθώντας τις επιλογές `tsconfig.json` και στη συνέχεια κατασκευάζει ένα έργο με τη ρύθμιση `angular.json`. Κοιτάζοντας το αρχείο `angular.json`, παρατηρήσαμε μια επιλογή για να ενεργοποιήσουμε ή να απενεργοποιήσουμε ένα sourcemap. Σύμφωνα με την τεκμηρίωση Angular, η προεπιλεγμένη ρύθμιση έχει ένα αρχείο sourcemap ενεργοποιημένο για τα σενάρια και δεν είναι κρυφό από προεπιλογή: ```json "sourceMap": { "scripts": true, @@ -58,7 +58,7 @@ my-workspace/ "hidden": false } ``` -Γενικά, τα αρχεία sourcemap χρησιμοποιούνται για σκοπούς αποσφαλμάτωσης καθώς αντιστοιχίζουν τα παραγόμενα αρχεία στα αρχικά τους αρχεία. Επομένως, δεν συνιστάται η χρήση τους σε περιβάλλον παραγωγής. Εάν είναι ενεργοποιημένα τα sourcemaps, βελτιώνουν την αναγνωσιμότητα και βοηθούν στην ανάλυση αρχείων αναπαράγοντας την αρχική κατάσταση του έργου Angular. Ωστόσο, εάν είναι απενεργοποιημένα, ένας αναθεωρητής μπορεί να αναλύσει χειροκίνητα ένα συμπιεσμένο αρχείο JavaScript αναζητώντας αντιασφαλιστικά μοτίβα. +Γενικά, τα αρχεία sourcemap χρησιμοποιούνται για σκοπούς αποσφαλμάτωσης καθώς αντιστοιχούν στα παραγόμενα αρχεία με τα αρχικά τους αρχεία. Επομένως, δεν συνιστάται η χρήση τους σε περιβάλλον παραγωγής. Εάν είναι ενεργοποιημένα τα sourcemaps, βελτιώνουν την αναγνωσιμότητα και βοηθούν στην ανάλυση αρχείων αναπαράγοντας την αρχική κατάσταση του έργου Angular. Ωστόσο, εάν είναι απενεργοποιημένα, ένας αναθεωρητής μπορεί να αναλύσει χειροκίνητα ένα συμπιεσμένο αρχείο JavaScript αναζητώντας αντιασφαλιστικά μοτίβα. Επιπλέον, ένα συμπιεσμένο αρχείο JavaScript με ένα έργο Angular μπορεί να βρεθεί στα εργαλεία προγραμματιστή του προγράμματος περιήγησης → Πηγές (ή Αποσφαλμάτωσης και Πηγές) → \[id].main.js. Ανάλογα με τις ενεργοποιημένες επιλογές, αυτό το αρχείο μπορεί να περιέχει την παρακάτω γραμμή στο τέλος `//# sourceMappingURL=[id].main.js.map` ή μπορεί να μην την περιέχει, εάν η **κρυφή** επιλογή είναι ρυθμισμένη σε **true**. Παρ' όλα αυτά, εάν το sourcemap είναι απενεργοποιημένο για **scripts**, η δοκιμή γίνεται πιο περίπλοκη και δεν μπορούμε να αποκτήσουμε το αρχείο. Επιπλέον, το sourcemap μπορεί να ενεργοποιηθεί κατά την κατασκευή του έργου όπως `ng build --source-map`. @@ -68,20 +68,20 @@ my-workspace/ Μπορούμε να ταξινομήσουμε τη δέσμευση με βάση τη ροή δεδομένων: -* Πηγή δεδομένων προς στόχο προβολής (περιλαμβάνει _παρεμβολή_, _ιδιότητες_, _ατομικά χαρακτηριστικά_, _κλάσεις_ και _στυλ_); μπορεί να εφαρμοστεί χρησιμοποιώντας `[]` ή `{{}}` στο πρότυπο; +* Πηγή δεδομένων προς στόχο προβολής (περιλαμβάνει _παρεμβολή_, _ιδιότητες_, _attributes_, _classes_ και _styles_); μπορεί να εφαρμοστεί χρησιμοποιώντας `[]` ή `{{}}` στο πρότυπο; * Στόχος προβολής προς πηγή δεδομένων (περιλαμβάνει _γεγονότα_); μπορεί να εφαρμοστεί χρησιμοποιώντας `()` στο πρότυπο; -* Δύο κατευθύνσεων; μπορεί να εφαρμοστεί χρησιμοποιώντας `[()]` στο πρότυπο. +* Δύο κατευθύνσεις; μπορεί να εφαρμοστεί χρησιμοποιώντας `[()]` στο πρότυπο. -Η δέσμευση μπορεί να καλείται σε ιδιότητες, γεγονότα και ατομικά χαρακτηριστικά, καθώς και σε οποιοδήποτε δημόσιο μέλος μιας πηγής οδηγίας: +Η δέσμευση μπορεί να καλείται σε ιδιότητες, γεγονότα και attributes, καθώς και σε οποιοδήποτε δημόσιο μέλος μιας πηγής οδηγίας: -| ΤΥΠΟΣ | ΣΤΟΧΟΣ | ΠΑΡΑΔΕΙΓΜΑΤΑ | -| -------- | ------------------------------------------------------- | ----------------------------------------------------------------- | -| Ιδιότητα | Ιδιότητα στοιχείου, Ιδιότητα συστατικού, Ιδιότητα οδηγίας | \ | -| Γεγονός | Γεγονός στοιχείου, Γεγονός συστατικού, Γεγονός οδηγίας | \