Я хочу, чтобы определить, может ли данная программа выполнять вредоносные операции, такие как forking, interprocess piping, перенаправление ввода/вывода, обработка файлов и т. Д. На самом деле я разрабатываю программу, которая проверяет коды Java и не хочу, чтобы кодер вреден для моего система проверки кода в любом случае.
Какие пакеты я должен искать в коде для обеспечения этого?
Спасибо заранее!В java какие пакеты содержат команды уровня операционной системы?
ответ
Большая часть функциональности взаимодействия с ОС представлена в java.lang.Runtime
и java.lang.System
. Обратите внимание, что им не потребуется импорт, потому что они находятся в пакете java.lang
.
Но ... если вы просто анализируете код, почему бы вам не волновать, какие его вызовы? Возможно, вы должны смотреть на Java Security, а не на вызовы классов.
Вы должны подумать о проверке всех методов, помеченных как «родной».
Были ли ваши проверки во время компиляции или во время выполнения?
Если вы проверяете во время выполнения, вы можете использовать диспетчер безопасности с разрешениями. Посмотрите на Security Manager Tutorial. Существует широкий список разрешений. Вы можете запретить доступ к файлам, даже открытые кадры.
Что касается базовых классов, вы должны быть осторожны с
java.lang.Runtime
иjava.lang.System
,java.lang.ProcessBuilder
. Они создаютjava.lang.Process
. Такжеjava.io.File
,java.io.FileDescriptor
, возможно, даже сокеты иjava.nio.*
работают на OS/файловой системе.Я также запретил бы отражение,
java.lang.reflect.*
, а также некоторые методыjava.lang.Class
также отражающие. Загрузка классов по имени может обернуться вашими чеками. Некоторые классы вjava.beans.*
также используют отражение.В зависимости от ваших потребностей вы можете даже хотеть, чтобы код пользователя работал в sandbox. Но это может зайти слишком далеко для вас. Проверка использования класса (постоянный пул) может быть простым способом.
Как ранее указывал Колин Герберт,
native
также опасен. Но некоторые из них определенно необходимы, например, методыObject
.
Короткий ответ: java.lang. Я считаю, что это единственный пакет «из коробки», который включает классы, которые предоставляют вам доступ к функциям ОС. Ну, я предполагаю, что вы не включаете I/O в качестве «связанных с ОС». Если вы это сделаете, вам также придется включить java.io, javax.swing и пару других пакетов.
Более длинный ответ: программист может написать свои собственные функции JNI, которые взаимодействуют с ОС и помещают их в любой пакет, который ему нравится. Попытка определить это может быть довольно сложной задачей. Ну, я думаю, вы могли бы сказать, что любая «родная» функция автоматически подозревается.
+1 для обозначения отражения. Вы можете использовать отражение, чтобы вызвать методы, упомянутые вами в других классах. И есть другие классы, например, в 'java.beans', которые позволяют относительно свободно использовать отражение косвенно. –