{"id":7596,"date":"2021-09-22T13:13:26","date_gmt":"2021-09-22T11:13:26","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=7596"},"modified":"2021-09-22T13:13:27","modified_gmt":"2021-09-22T11:13:27","slug":"bug-im-mod_ibm_upload-plugin-des-ibm-http-server-verhindert-virenscan-in-hcl-connections","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/bug-im-mod_ibm_upload-plugin-des-ibm-http-server-verhindert-virenscan-in-hcl-connections\/","title":{"rendered":"Bug im mod_ibm_upload Plugin des IBM HTTP Server verhindert Virenscan in HCL Connections"},"content":{"rendered":"<p>HCL Connections bietet die M\u00f6glichkeit, sowohl Upload- als auch Download \u00fcber den IBM HTTP Server abzuwickeln. Das ist performancetechnisch aus verschiedenen Gr\u00fcnden sinnvoll: Grunds\u00e4tzlich ist WebSphere f\u00fcr den Dateiupload nicht optimal geeignet, vor allem wenn es sich um gr\u00f6\u00dfere Dateien handelt. Auf dem Server entsteht dabei eine hohe Last. Beim Download gr\u00f6\u00dferer Videos kam es dadurch bereits zu einer \u00dcberlastung, obwohl vergleichsweise wenige Nutzer sie heruntergeladen haben. <\/p>\n<p><a href=\"https:\/\/help.hcltechsw.com\/connections\/v65\/admin\/install\/t_install_post_files_uploads.html?hl=ibm%2Chttp%2Cserver%2Cupload\" target=\"_blank\" rel=\"nofollow\">Als L\u00f6sung bietet sich mod_ibm_upload an<\/a>: Es verschiebt den Upload auf den vorgelagerten IBM HTTP Server (IHS), einem Apache2-Fork. Dieser sendet lediglich Metadaten (Dateiname, Gr\u00f6\u00dfe usw) an den WAS, um die Datei in Connections zu registrieren. Der Dateiinhalt, welcher vom Nutzer hochgeladen wird, muss hierbei nicht an WAS gesendet werden &#8211; Dies f\u00fchrt zu einer deutlichen Entlastung des WebSphere-Servers. Au\u00dferdem l\u00e4sst sich das nicht mehr zeitgem\u00e4\u00dfe Limit von 4GB pro Datei via IHS erh\u00f6hen.<\/p>\n<h2 class=\"wp-block-heading\">Probleme mit dem Virenscan durch den IHS<\/h2>\n<p><a href=\"https:\/\/help.hcltechsw.com\/connections\/v65\/admin\/secure\/t_admin_common_virus_scanning.html\" target=\"_blank\" rel=\"nofollow\">Connections bietet eine Schnittstelle, um jegliche hochgeladene Dateien von einem externen Virenscanner pr\u00fcfen zu lassen<\/a>. Auf den Sinn und Unsinn von AVs m\u00f6chte ich an dieser Stelle nicht weiter eingehen &#8211; es war in dieser Umgebung eine Anforderung, daher wurde der Scan \u00fcber den bereits vorhandenen Virenscanner aktiviert. Bis zur Aktivierung des Uploads per IHS war dies auch weitgehend unauff\u00e4llig im Hintergrund. <\/p>\n<p>Nun haben die Nutzer in letzter Zeit aber zunehmend Fehlermeldungen beim Download erhalten, die vor einem fehlenden Virenscan warnten:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-32.png\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"195\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-32.png\" alt=\"\" class=\"wp-image-7597\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-32.png 629w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-32-548x170.png 548w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-32-300x93.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2021\/09\/grafik-32-70x22.png 70w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/a><\/figure>\n<p>Weder in den Logs von Connections noch bei den Kollegen vom Virenscanner wurde ein Grund gefunden. Anfangs schien es alle Dateien zu betreffen. Nach einer ausf\u00fchrlicheren Analyse zeigte sich, dass besonders kleine Dateien keine Warnmeldung erhalten. Dies konnte auf 16 MB eingegrenzt werden. 16 MB war in der <strong>files-config.xml<\/strong> als Limit f\u00fcr die <strong>SimpleUploadAPI <\/strong>festgelegt. Das bedeutet: Alles unter 16 MB leitet der IHS an WAS weiter und agiert hier lediglich als Reverse-Proxy. Ab 16 MB wickelt der IHS den Upload selbst mithilfe von <strong>mod_ibm_upload <\/strong>ab. Es konnte reproduziert werden, dass der IBM HTTP Server den Virenscan nicht durchf\u00fchrt.<\/p>\n<h2 class=\"wp-block-heading\">So speichert Connections den AV-Scanstatus einer Datei<\/h2>\n<p>In der Tabelle <strong>FILES.MEDIA<\/strong> der Dateien-Anwendung gibt es eine Spalte <strong>MALWARE_SCAN<\/strong>. Der Wert 1 steht f\u00fcr nicht gescannt. Dies hat in der Regel externe Ursachen, beispielsweise ein Timeout beim Virenscanner oder \u00e4hnliches. Ist MALWARE_SCAN gleich 1, erscheint obige Warnmeldung. Ansonsten gibt es nur noch den Status 2 f\u00fcr \u00fcberpr\u00fcfte Dateien. Ob der Virenscanner bei seiner Pr\u00fcfung etwas gefunden hat, vermerkt Connections nicht in der Datenbank. <\/p>\n<p>Das h\u00e4ngt wohl damit zusammen, dass Connections keine Dateien im System beh\u00e4lt, die aus Sicht des AV infiziert sind. Testen l\u00e4sst sich das mit einem <a href=\"https:\/\/dont.panic.at\/index.php?content=Send_EICAR\" target=\"_blank\" rel=\"nofollow\">Eicar-Testvirus<\/a>. Darin ist eine spezielle Zeichenfolge enthalten, auf die Virenscanner anspringen. Im folgenden Beispiel habe ich <strong>eicar.zip<\/strong> mit diesem Testvirus in Connections hochgeladen und anschlie\u00dfend <strong>eicar_download.zip<\/strong> aus Connections wieder heruntergeladen:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ sha256sum *.zip\n88cacb01739eaa240517ea5c181789d5d7705b4b7c79f56e426b45e05818c946  eicar_download.zip\na2ff6af2c04d27f5890127a2b447e7bed80e1c34c1cf62215a193f0ce3b5ffa4  eicar.zip<\/code><\/pre>\n<p>Wie man sieht, wurde die Datei ver\u00e4ndert. Schauen wir uns den Inhalt an, wird klar, was passiert ist:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ unzip -l eicar\nArchive:  eicar.zip\n  Length      Date    Time    Name\n---------  ---------- -----   ----\n       68  2011-06-16 09:35   eicar.com\n---------                     -------\n       68                     1 file\n\n$ unzip -l eicar_download.zip\nArchive:  eicar_download.zip\n  Length      Date    Time    Name\n---------  ---------- -----   ----\n      123  2011-06-16 09:35   DELETED0.TXT\n---------                     -------\n      123                     1 file\n\n$ zmore *.zip\n::::::::::::::\neicar_download.zip\n::::::::::::::\nFile: no.file\/eicar.com was infected with EICAR Test String (11101). File not submitted to quarantine. File was deleted.\n::::::::::::::\neicar.zip\n::::::::::::::\n[...] EICAR-STANDARD-ANTIVIRUS-TEST-FILE[...]<\/code><\/pre>\n<p>Die originale ZIP-Datei enth\u00e4lt eine Exe-Datei mit dem Testvirus. Den Inhalt am Ende habe ich zensiert, da gewisse Virenscanner hysterisch generieren und dann eine gesamte Domain als potenziell gef\u00e4hrlich betrachten. Dort stand die Zeichenkette, k\u00f6nnt ihr bei Bedarf selbst anschauen, in dem ihr die Datei mit einem Texteditor \u00f6ffnet (ist nicht gro\u00df). In der heruntergeladenen Datei dagegen gibt es nur noch eine Textdatei <strong>DLETED0.TXT<\/strong>. Darin steht, was der AV gefunden hat. <\/p>\n<p>Mit der Logik wird auch klar, warum es nur zwei Stati gibt: Aus Sicht von CNX gibt es keine Dateien mit bekannten Infizierungen im System. Somit bekommt auch eine als infiziert erkannte Datei wie <strong>eicar.zip<\/strong> den Status 2, da diese nach dem Scan <em>unsch\u00e4dlich<\/em> gemacht wurde.<\/p>\n<h2 class=\"wp-block-heading\">Welche Dateien sind betroffen und wie k\u00f6nnen wir die Meldung entfernen?<\/h2>\n<p>Mit einer einfachen SQL-Abfrage:<\/p>\n<p>Die Mehrheit sollte Status 2 haben. Je nachdem wie lange der IHS Upload aktiv war, mehr oder weniger mit Status 1. Um die oben gezeigte Meldung zu entfernen, m\u00fcssen Dateien mit Scan-Status = 1 auf 2 gesetzt werden:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-sql\" data-line=\"\">UPDATE files.MEDIA\nSET MALWARE_SCAN = 2\nWHERE MALWARE_SCAN = 1<\/code><\/pre>\n<p>Diese \u00c4nderung wird sofort wirksam, d.H. ohne Neustart verschwindet die Meldung. Wer zuvor einen Virenscan ben\u00f6tigt, kann diesen auf dem <strong>SHARED_DIRECTORY <\/strong>von Connections laufen lassen.<\/p>\n<h2 class=\"wp-block-heading\">Wie l\u00f6sen wir das Problem nachhaltig?<\/h2>\n<p>Eine nachhaltige L\u00f6sung ist das aber ja nicht: Wenn nach Ausf\u00fchren der Abfrage eine neue Datei per IHS hochgeladen wird, erh\u00e4lt diese wieder Status 1 und erzeugt damit eine Warnung. Au\u00dferdem ist der fehlende Virenscan wohl zumindest aus Compilance-Gr\u00fcnden ein Problem, wenn dort das Scannen auf Viren ausgehandelt wurde. Eine wirkliche L\u00f6sung gibt es derzeit nicht, ein Ticket dazu habe ich bei HCL er\u00f6ffnet.<\/p>\n<p>Als Workaround kann man in meinen Augen lediglich wie folgt verfahren: Das Limit f\u00fcr die <strong>SimpleUploadAPI <\/strong>entsprechend hochsetzen, damit m\u00f6glichst alle Uploads \u00fcber den WAS erzwungen werden. Der Download kann weiterhin \u00fcber den IHS erfolgen, da dies keinen Einfluss auf den Virenscan hat. Und das ist meiner Erfahrung nach auch das Hauptproblem: L\u00e4dt ein Nutzer z.B. eine 2GB gro\u00dfe Datei hoch, blockiert das einen Thread. Au\u00dferdem steigt der RAM-Verbrauch an. Im Regelfall werden aber mehr Nutzer anschlie\u00dfend diese Datei herunterladen &#8211; im schlechtesten Falle parallel. Es ist in meinen Augen also wesentlich wichtiger, per IHS zumindest herunterzuladen. <\/p>\n<p>F\u00fcr den Upload sollte man nat\u00fcrlich auch vorsorgen und dem App-Server genug Arbeitsspeicher zur Verf\u00fcgung stellen. Vor allem bei gr\u00f6\u00dferen Dateien, sonst kann auch der reine Upload Probleme machen. 4-6 GB scheinen hier als Anhaltspunkt sinnvoll, im Zweifel lieber etwas mehr als zu wenig. Wobei man auch hier nicht vergessen darf, die VM entsprechend anzupassen, damit diese tats\u00e4chlich gen\u00fcgend RAM zur Verf\u00fcgung stehen hat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>HCL Connections bietet die M\u00f6glichkeit, sowohl Upload- als auch Download \u00fcber den IBM HTTP Server abzuwickeln. Das ist performancetechnisch aus verschiedenen Gr\u00fcnden sinnvoll: Grunds\u00e4tzlich ist WebSphere f\u00fcr den Dateiupload nicht optimal geeignet, vor allem wenn es sich um gr\u00f6\u00dfere Dateien handelt. Auf dem Server entsteht dabei eine hohe Last. Beim Download gr\u00f6\u00dferer Videos kam es &#8230;<\/p>\n","protected":false},"author":5,"featured_media":7597,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[765],"tags":[850,946,795,947,785],"class_list":["post-7596","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hcl-connections","tag-hcl-connections-6-5","tag-ibm-http-server","tag-ihs","tag-virenscanner","tag-virus"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7596","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=7596"}],"version-history":[{"count":2,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7596\/revisions"}],"predecessor-version":[{"id":7599,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/7596\/revisions\/7599"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/7597"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=7596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=7596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=7596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}