Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, was die App-Bewertungsfunktion der GitHub Copilot-Modernisierungsfunktion erkennen kann. Die Bewertung umfasst zwei Schlüsselfunktionen:
Problemerkennung in drei Bereichen, die für Ihre Modernisierungsreise von entscheidender Bedeutung sind:
- Cloudbereitschaft: Identifiziert 16 Kategorien von Bedenken, einschließlich Dateisystemnutzung, Anmeldeinformationsverwaltung, Messagingdienste, Datenbankverbindungen, Containerisierungslücken, Sitzungsverarbeitung, Remotekommunikationsmuster und vieles mehr.
- Java-Upgrade: Kennzeichnet veraltete Java-Versionen, End-of-OSS-Support-Frameworks (Spring Boot, Spring Cloud, Jakarta EE), Hunderte von entfernten oder veralteten APIs und Legacybuildtools wie Ant.
- Sicherheit: Erkennt 42 Sicherheitsschwächen, die aus dem ISO/IEC 5055-Standard stammen, und deckt Einfügungsrisiken (SQL, LDAP, XPath, Betriebssystembefehl), hartcodierte Anmeldeinformationen und kryptografische Schlüssel, Synchronisierungsprobleme, Ressourcenlebenszyklusprobleme und andere besonders betroffene CWEs ab.
Anwendungsverständnis: Bei Legacy-Codebasen werden die Abhängigkeiten und Technologien sichtbar gemacht, sodass Sie ein klares Bild davon erhalten, worauf Ihre Anwendung angewiesen ist, bevor Sie mit der Migration beginnen.
In den folgenden Abschnitten wird die Problemabdeckung für jede Domäne ausführlich beschrieben.
Domäne: Cloudbereitschaft
| Domäne | Kategorie | Erkennungszusammenfassung | Warum es wichtig ist |
|---|---|---|---|
cloud-readiness |
credential-migration |
Erkennt hartcodierte AWS-Anmeldeinformationen (aws_access_key_id, aws_secret_access_key), AWS Secrets Manager-Verwendung und eingebettete Geheimverwaltungsbibliotheken wie Spring Cloud Vault. |
Sicherheit: Hartcodierte Zugangsdaten und anbieterspezifische Geheimspeicher sind hochanfällig. Cloudeigene Anwendungen erfordern eine zentrale, identitätsbasierte Sicherheit, um den Diebstahl von Anmeldeinformationen zu verhindern. |
cloud-readiness |
region-configuration |
Identifiziert hartcodierte AWS-Regions-IDs (aws.region, AWS_REGION) in Code- oder Konfigurationsdateien. |
Portabilität: Hardcoding-Regionen binden die Anwendung an die physische Infrastruktur eines bestimmten Anbieters und behindern die globale Bereitstellung und Resilienz. |
cloud-readiness |
storage-migration |
Erkennt die AWS S3 SDK-Verwendung (Buckets, Objekte, vorsignierte URLs), S3 TransferManager und Google Cloud Storage-Clientbibliotheken. | Zuverlässigkeit und Ausrichtung: Diese Abhängigkeiten sperren Sie in den Objektspeicher eines Anbieters und funktionieren nicht mit den systemeigenen Speicherdiensten der Zielplattform. |
cloud-readiness |
messaging-service-migration |
Kennzeichnet Abhängigkeiten und Verbindungszeichenfolgen für Amazon SQS/SNS, Kafka, RabbitMQ (AMQP), ActiveMQ (Artemis), IBM MQ, TIBCO EMS, Solace PubSub+, Amazon Kinesis, Apache Pulsar und Google Cloud Pub/Sub. | Skalierbarkeit und Zuverlässigkeit: Ältere Messagingbroker basieren häufig auf festen Endpunkten und datenträgerbasierter Persistenz, die die horizontale Skalierung und hohe Verfügbarkeit in Cloudumgebungen behindern. |
cloud-readiness |
database-migration |
Erkennt Verbindungszeichenfolgen, Treiber und Timeouteinstellungen für MongoDB, MySQL, PostgreSQL, MSSQL, Cassandra, MariaDB, Oracle, Db2, Sybase ASE, Firebird, SQLite, Google Firestore und Google Cloud Spanner. | Zuverlässigkeit: Selbstverwaltete oder nicht systemeigene Datenbanken fehlen automatisierte Cloudskalierung. Hartcodierte Timeouts und feste Wiederholungsintervalle können zu Blockierungen und "Wiederholungsstürmen" während teilweiser Ausfälle führen. |
cloud-readiness |
file-system-management |
Identifiziert die Verwendung relativer/absoluter Pfade, Heimverzeichnisse (/home/), file:// Schemas sowie Standardaufrufe für Java IO/NIO oder Apache Commons IO, um auf lokalen Speicher zuzugreifen. |
Staatenlosigkeit: Cloudcontainer sind kurzlebig. Das Schreiben in ein lokales Dateisystem führt zu Datenverlusten bei Neustarts oder Skalierungsvorgängen der Instanz; Persistente Daten müssen externisiert werden. |
cloud-readiness |
local-credential |
Kennzeichnet Java KeyStore-Dateien (.jks), KeyStore.load-Methodenaufrufe und Klartext-Kennwörter (password, pwd) in Eigenschaften- oder XML-Dateien. |
Sicherheitsrisiko: Vertrauliches Material, das in Klartext oder lokalen Dateien gespeichert ist, kann leicht kompromittiert werden, wenn nicht autorisierte Personen auf die Anwendungsumgebung oder Konfigurationsdateien zugreifen. |
cloud-readiness |
configuration-management |
Detektiert System.getenv, System.getProperty externer .properties/.xml/.ini Dateien sowie den Zugriff auf die Windows-Registrierung für Anwendungseinstellungen. |
Externalisierung: Betriebssystemspezifische Speicher- oder lokale Dateien sind im großen Maßstab nicht verwaltbar und können nicht dynamisch aktualisiert werden, ohne Codeänderungen in allen Instanzen. |
cloud-readiness |
session-management |
Identifiziert die Datenspeicherung in HttpSession Objekten und die Verwendung des "verteilungsfähigen" Tags in Webdeskriptoren. |
Skalierbarkeit: Standard-HTTP-Sitzungen eignen sich nicht für die Cloudskalierung; Der Zustand muss in einen verteilten Cache externisiert werden, um Datenverluste während der Datenverkehrsverschiebungen zwischen Instanzen zu verhindern. |
cloud-readiness |
remote-communication |
Erkennt eng gekoppelte Protokolle (CORBA, RMI, JCA), unsichere HTTP/FTP-Protokolle, Java Mail-API, direkte Socket-/NIO-Kanalverwendung und hartcodierte URLs. | Cloudkompatibilität und Sicherheit: Eng gekoppelte Interaktionen behindern die Skalierbarkeit. Unsichere Protokolle und hartcodierte URLs sind anfällig und spröde in dynamischen Cloudnetzwerkumgebungen. |
cloud-readiness |
jakarta-migration |
Erkennt die Verwendung von Jakarta/Java EE-spezifischen APIs für NoSQL, JPA, Data, WebSockets und JAX-RS sowie serverspezifische Artefakte von JBoss EAP, WebLogic oder WebSphere. | Unterstützbarkeit: Die Migration zu einer cloud-nativen Laufzeitumgebung erfordert die Anpassung an die modernen Jakarta-Namespaces und die Entfernung von Abhängigkeiten von proprietären Anwendungsservern, um die Portabilität sicherzustellen. |
cloud-readiness |
containerization |
Kennzeichnet das Fehlen einer Dockerfile oder problematische Dockerfile-Anweisungen, wie apt-get upgrade, Kleinbuchstaben-Syntax und Syntax-Abstandsprobleme. |
Zuverlässigkeit: Die Standardisierung in Containerbuilds ist für stabile, reproduzierbare Bereitstellungen erforderlich und um sicherzustellen, dass Sich Bilder in verschiedenen Umgebungen vorhersehbar verhalten. |
cloud-readiness |
scheduled-job-migration |
Identifiziert AWS Lambda-Handler, Google Cloud Functions, Quartz Scheduler-Abhängigkeiten und Spring Batch Workflows. | Cloud Compute Alignment: Geplante Aufträge und serverlose Funktionen müssen umgestaltet werden, um die ereignisgesteuerten und serverlosen Computemodelle der Zielcloud zu verwenden, um den Infrastrukturaufwand zu reduzieren. |
cloud-readiness |
apm-migration |
Identifiziert eingebettete APM-Agents und -Bibliotheken für New Relic, Elastic APM und Dynatrace. | Observability: Diese Tools erfordern eine spezifische Cloud-Plattform-Integration, um Telemetrie-, Latenz- und Gesundheitsdaten in einer verwalteten Umgebung ordnungsgemäß zu erfassen. |
cloud-readiness |
auth-migration |
Erkennt SAML/OpenSAML, OAuth 2.0, OpenID, Spring Security, LDAP-Verwendung und ältere Webform-Authentifizierungsmuster. | Moderne Identität: Ältere Webformulare und LDAP-Authentifizierung fehlen den Flexibilitäts- und Sicherheitsfeatures (MFA, SSO) moderner anspruchsbasierter Cloudidentitätsanbieter. |
cloud-readiness |
os-compatibility |
Identifiziert Projektabhängigkeiten von Windows-spezifischen Dynamic-Link Bibliotheken (.dll Dateien). | Portabilität: DLLs sind betriebssystemspezifisch und werden nicht in standardmäßigen Linux-basierten Cloudcontainerumgebungen ausgeführt. Sie müssen sie durch plattformübergreifende Shared Libraries ersetzen. |
Domäne: Java-Upgrade
| Domäne | Kategorie | Erkennungszusammenfassung | Warum es wichtig ist |
|---|---|---|---|
java-upgrade |
java-version-upgrade |
Identifiziert die Verwendung von Nicht-LTS-Java-Versionen (9, 10, 12-16, 19, 20) und Legacyversionen (1.x bis 8 und 11). | Sicherheit und Support: Ältere und nicht LTS-Versionen enthalten bekannte Sicherheitslücken und fehlen langfristige Wartungsupdates, sodass die Infrastruktur Angriffen ausgesetzt ist. |
java-upgrade |
framework-upgrade |
Erkennt Spring Boot-, Spring Cloud-, Spring Framework- und Jakarta EE-Versionen, die das Ende der OSS-Unterstützung erreicht haben. | Unterstützbarkeit: Veraltete Frameworks erhalten keine Sicherheitsupdates mehr, wodurch die Anwendung zu einem Sicherheitsrisiko wird und mit modernen cloudeigenen Tools nicht mehr kompatibel ist. |
java-upgrade |
deprecated-apis |
Katalogisiert Hunderte von entfernten oder veralteten APIs, einschließlich sun.misc.BASE64, Thread.stop, SecurityManager-Methoden und proprietären Hooks von JBoss, Seam 2, WebLogic und WebSphere. |
Stabilität und Portabilität: Die Verwendung entfernter APIs führt zu Laufzeitabstürzen auf modernen JVMs. Proprietäre Anbieter-Hooks (wie WebLogic/JBoss Internals) verhindern, dass die Anwendung über Standardlaufzeiten portierbar ist. |
java-upgrade |
build-tool |
Identifiziert Ältere Buildsysteme wie Ant (build.xml) oder Eclipse-spezifische Projektkonfigurationen (WTP/JEM natures). |
Automatisierung: Legacytools verfügen nicht über die Standardkonventionen und abhängigkeitsverwaltung, die für eine effiziente Integration in moderne CI/CD-Pipelines erforderlich sind. |
Domäne: Sicherheit (ISO 5055 geführt)
ISO/IEC 5055 ist ein ISO-Standard zur Messung der internen Struktur eines Softwareprodukts auf vier geschäftskritische Faktoren: Sicherheit, Zuverlässigkeit, Leistungseffizienz und Wartungsfähigkeit. Diese Faktoren bestimmen, wie vertrauenswürdig, zuverlässig und robust ein Softwaresystem ist. Im Wesentlichen soll ISO 5055 "die 8% von Fehlern finden und verhindern, die 90% von Produktionsproblemen verursachen". ISO 5055 identifiziert die kritischsten und wirkungsvollsten CWEs unter den einzelnen Qualitätsmerkmalen: Zuverlässigkeit, Leistungseffizienz, Sicherheit und Wartungsbarkeit. Bei der GitHub Copilot-Modernisierung erkennen Sie anhand der kuratierten CWEs für Sicherheit, die in ISO 5055 definiert sind, wie die folgende Tabelle zeigt.
| CWE_ID | Title | Beschreibung |
|---|---|---|
CWE-22 |
Falsche Einschränkung eines Pfadnamens zu einem eingeschränkten Verzeichnis ('Path Traversal') | Das Produkt verwendet externe Eingaben, um einen Pfadnamen zu erstellen, der eine Datei oder ein Verzeichnis unter einem eingeschränkten übergeordneten Verzeichnis identifiziert. Es neutralisiert jedoch nicht richtig spezielle Elemente, die dazu führen können, dass der Pfadname außerhalb des eingeschränkten Verzeichnisses aufgelöst wird. |
CWE-23 |
Relative Pfad-Traversal | Das Produkt verwendet externe Eingaben, um einen Pfadnamen innerhalb eines eingeschränkten Verzeichnisses zu konstruieren, neutralisiert jedoch keine Sequenzen wie .., die außerhalb dieses Verzeichnisses aufgelöst werden können. |
CWE-36 |
Absoluter Pfaddurchlauf | Das Produkt verwendet externe Eingaben, um einen Pfadnamen innerhalb eines eingeschränkten Verzeichnisses zu erstellen, neutralisiert jedoch keine absoluten Pfadsequenzen wie /abs/path, die außerhalb dieses Verzeichnisses aufgelöst werden können. |
CWE-77 |
Unsachgemäße Neutralisierung spezieller Elemente, die in einem Befehl verwendet werden ('Command Injection') | Das Produkt erstellt einen Befehl mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine speziellen Elemente, die den vorgesehenen Befehl ändern können, der an eine nachgeschaltete Komponente gesendet wird. |
CWE-78 |
Unsachgemäße Neutralisierung spezieller Elemente, die in einem Betriebssystembefehl ('Os Command Injection') verwendet werden | Das Produkt erstellt einen Betriebssystembefehl mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine speziellen Elemente, die den vorgesehenen Betriebssystembefehl ändern können, der an eine nachgeschaltete Komponente gesendet wird. |
CWE-88 |
Unsachgemäße Neutralisierung von Argumenttrennzeichen in einem Befehl ('Argument Injection') | Das Produkt erstellt eine Befehlszeichenfolge für eine separate Komponente, trennt jedoch nicht ordnungsgemäß Argumente, Optionen oder Schalter innerhalb dieser Zeichenfolge. |
CWE-79 |
Unsachgemäße Neutralisierung der Eingabe während der Webseitengenerierung ('Websiteübergreifendes Skripting') | Das Produkt kann keine benutzersteuerungsfähige Eingabe neutralisieren, bevor es in der Ausgabe platziert wird, die als Webseite für andere Benutzer verwendet wird. |
CWE-89 |
Unsachgemäße Neutralisierung spezieller Elemente, die in einem SQL-Befehl ('SQL Injection') verwendet werden | Das Produkt erstellt einen SQL-Befehl mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine Elemente, die den Befehl ändern könnten, sodass Eingaben als SQL-Syntax statt als normale Daten interpretiert werden können. |
CWE-564 |
SQL-Injektion: Ruhezustand | Die Verwendung von Ruhezustand zum Ausführen dynamischer SQL-Anweisungen, die mit benutzergesteuerter Eingabe erstellt wurden, kann es einem Angreifer ermöglichen, die Bedeutung der Anweisung zu ändern oder beliebige SQL-Befehle auszuführen. |
CWE-90 |
Unsachgemäße Neutralisierung spezieller Elemente, die in einer LDAP-Abfrage ('LDAP Injection') verwendet werden | Das Produkt erstellt eine LDAP-Abfrage mithilfe von extern beeinflussten Eingaben, neutralisiert jedoch keine Elemente, die die beabsichtigte Abfrage ändern können, die an eine nachgeschaltete Komponente gesendet wird. |
CWE-91 |
XML Injection (auch als Blind XPath Injection bezeichnet) | Das Produkt neutralisiert spezielle Elemente, die in XML verwendet werden, nicht ordnungsgemäß, sodass Angreifer die Syntax, inhalte oder Befehle vor der Verarbeitung ändern können. |
CWE-99 |
Unzureichende Kontrolle von Ressourcenbezeichnern ('Resource Injection') | Das Produkt empfängt Eingaben, beschränkt sie jedoch nicht ordnungsgemäß, bevor es als Bezeichner für eine Ressource außerhalb des vorgesehenen Kontrollbereichs verwendet wird. |
CWE-130 |
Falsche Behandlung von Längenparameterinkonsistenz | Das Produkt analysiert eine formatierte Nachricht oder Struktur, behandelt aber fälschlicherweise ein Längenfeld, das mit der tatsächlichen Länge der zugeordneten Daten inkonsistent ist. |
CWE-259 |
Verwendung von hartcodiertem Kennwort | Das Produkt enthält ein hartcodiertes Kennwort, das für die eigene eingehende Authentifizierung oder ausgehende Kommunikation mit externen Komponenten verwendet wird. |
CWE-321 |
Verwendung hartcodierter kryptografischer Schlüssel | Das Produkt verwendet einen hartcodierten, unveränderlichen kryptografischen Schlüssel. |
CWE-434 |
Uneingeschränkter Upload der Datei mit gefährlichem Typ | Das Produkt ermöglicht das Hochladen gefährlicher Dateitypen, die automatisch in ihrer Umgebung verarbeitet werden. |
CWE-456 |
Fehlende Initialisierung einer Variablen | Das Produkt initialisiert keine kritischen Variablen, wodurch die Ausführungsumgebung unerwartete Werte verwendet. |
CWE-457 |
Verwendung einer nicht initialisierten Variablen | Der Code verwendet eine Variable, die nicht initialisiert ist, was zu unvorhersehbaren oder unbeabsichtigten Ergebnissen führt. |
CWE-477 |
Verwendung veralteter Funktion | Der Code verwendet veraltete oder obsolete Funktionen, was darauf hindeutet, dass er nicht aktiv überprüft oder gepflegt wird. |
CWE-502 |
Deserialisierung von nicht vertrauenswürdigen Daten | Das Produkt deserialisiert nicht vertrauenswürdige Daten, ohne ausreichend sicherzustellen, dass die resultierenden Daten gültig sind. |
CWE-543 |
Verwendung des Singleton-Musters ohne Synchronisierung in einem Multithread-Kontext | Das Produkt verwendet das Singletonmuster beim Erstellen einer Ressource in einer Multithreadumgebung ohne ordnungsgemäße Synchronisierung. |
CWE-567 |
Nicht synchronisierter Zugriff auf gemeinsame Daten in einem mehrfädigen Kontext | Das Produkt synchronisiert nicht ordnungsgemäß freigegebene Daten, z. B. statische Variablen, über Threads hinweg, was zu nicht definiertem Verhalten führt. |
CWE-570 |
Der Ausdruck ist immer falsch. | Das Produkt enthält einen Ausdruck, der immer als "false" ausgewertet wird. |
CWE-571 |
Der Ausdruck ist immer wahr | Das Produkt enthält einen Ausdruck, der immer als wahr ausgewertet wird. |
CWE-606 |
Ungeprüfte Eingabe für Schleifenbedingung | Das Produkt überprüft Eingaben, die für Schleifenbedingungen verwendet werden, nicht ordnungsgemäß, was möglicherweise zu einer Dienstblockade durch übermäßiges Schleifen führen kann. |
CWE-643 |
Unsachgemäße Neutralisierung von Daten in XPath-Ausdrücken ('XPath Injection') | Das Produkt verwendet externe Eingaben, um einen XPath-Ausdruck für eine XML-Datenbank dynamisch zu erstellen, diese Eingabe jedoch nicht zu neutralisieren. |
CWE-652 |
Unsachgemäße Neutralisierung von Daten in XQuery-Ausdrücken ('XQuery Injection') | Das Produkt verwendet externe Eingaben, um einen XQuery-Ausdruck dynamisch zu erstellen, neutralisiert diese Eingaben jedoch nicht ordnungsgemäß. |
CWE-662 |
Falsche Synchronisierung | Das Produkt ermöglicht mehreren Threads oder Systemen den Zugriff auf eine freigegebene Ressource ohne ordnungsgemäße Synchronisierung, was möglicherweise gleichzeitige Zugriffsprobleme verursacht. |
CWE-665 |
Falsche Initialisierung | Das Produkt initialisiert eine Ressource entweder nicht oder falsch, was dazu führen kann, dass sie sich bei Zugriff in einem unerwarteten Zustand befindet. |
CWE-667 |
Unsachgemäßes Sperren | Das Produkt kann eine Sperre auf eine Ressource nicht ordnungsgemäß erwerben oder freigeben, was zu unerwarteten Zustandsänderungen führt. |
CWE-672 |
Operation an einer Ressource nach deren Ablauf oder Freigabe | Das Produkt greift auf eine Ressource zu oder arbeitet auf einer Ressource, nachdem es abgelaufen, freigegeben oder widerrufen wurde. |
CWE-681 |
Falsche Konvertierung zwischen numerischen Typen | Daten können während der Typkonvertierung ausgelassen oder in unerwartete Werte übersetzt werden, was bei Verwendung in sensiblen Kontexten gefährlich sein kann. |
CWE-682 |
Falsche Berechnung | Das Produkt führt eine Berechnung durch, die zu einem späteren Zeitpunkt falsche Ergebnisse generiert, die in sicherheitskritischen Entscheidungen oder im Ressourcenmanagement verwendet werden. |
CWE-732 |
Falsche Berechtigungszuweisung für kritische Ressource | Berechtigungen für eine sicherheitskritische Ressource werden so angegeben, dass unbeabsichtigte Akteure sie lesen oder ändern können. |
CWE-772 |
Fehlende Freigabe der Ressource nach der effektiven Lebensdauer | Das Produkt gibt eine Ressource nicht frei, nachdem ihre effektive Nutzungsdauer beendet ist und sie nicht mehr benötigt wird. |
CWE-775 |
Fehlende Freigabe von Dateideskriptoren oder Handles nach Ablauf der effektiven Lebensdauer | Das Produkt kann einen Dateideskriptor oder ein Handle nicht freigeben, nachdem er nicht mehr benötigt wird. |
CWE-778 |
Unzureichende Protokollierung | Das Produkt zeichnet ein sicherheitskritisches Ereignis nicht auf oder überlässt beim Protokollieren wichtige Details. |
CWE-783 |
Operatorrangfolge-Logikfehler | Ein Ausdruck verwendet falsche Logik, die durch die Rangfolge des Operators verursacht wird. |
CWE-789 |
Speicherzuordnung mit übermäßigem Größenwert | Das Produkt weist Speicher auf der Grundlage eines nicht vertrauenswürdigen Größenwertes zu, ohne sicherzustellen, dass er innerhalb der erwarteten Grenzwerte liegt. |
CWE-798 |
Verwendung hartcodierter Anmeldeinformationen | Das Produkt enthält hartcodierte Anmeldeinformationen, z. B. ein Kennwort oder einen kryptografischen Schlüssel. |
CWE-820 |
Fehlende Synchronisierung | Das Produkt verwendet eine freigegebene Ressource gleichzeitig, ohne zu versuchen, den Zugriff zu synchronisieren. |
CWE-821 |
Falsche Synchronisierung | Das Produkt verwendet gleichzeitig eine freigegebene Ressource, synchronisiert den Zugriff jedoch nicht ordnungsgemäß. |
CWE-835 |
Schleife mit unerreichbarer Abbruchbedingung ('Endlosschleife') | Das Produkt enthält eine Iteration oder Schleife mit einer Beendigungsbedingung, die nicht erreicht werden kann. |
CWE-611 |
Unzulässige Einschränkung der EXTERNEN XML-Entitätsreferenz | Das Produkt verarbeitet XML-Dokumente, die Entitäten mit URIs enthalten, die außerhalb des vorgesehenen Kontrollbereichs aufgelöst werden. |
CWE-1057 |
Datenzugriffsvorgänge außerhalb der erwarteten Data Manager-Komponente | Das Produkt führt Datenzugriffsvorgänge durch, die eine dedizierte, zentrale Daten-Manager-Komponente umgehen, die gemäß Entwurf erforderlich ist. |