🐧 نحوه کنترل یکپارچگی پرونده در لینوکس با استفاده از Osquery – Squad Security Security

مفهوم اصلی استفاده از برنامه Osquery "انتزاع جدول" از بسیاری از جنبه های سیستم عامل مانند فرآیندها ، کاربران و غیره است.

داده ها در جداول ذخیره می شوند و می توانند با استفاده از نحو SQL بازیابی شوند. به طور مستقیم از طریق پوسته osqueryi یا با استفاده از Daemon osqueryd.

در این درس خواهیم دید که چگونه برنامه نصب ، نحوه انجام نمایش داده های اولیه و نحوه استفاده از FIM (نظارت بر تمامیت پرونده) را به عنوان بخشی از مدیریت سیستم لینوکس خود نصب کنید. [19659005] در این دست شما می آموزید:

  • نحوه نصب osquery
  • نحوه تهیه لیستی از جداول موجود
  • نحوه اجرای نمایش داده ها از پوسته osqueryi
  • نحوه استفاده از Daemon osqueryd برای کنترل یکپارچگی پرونده

نصب

ما دو مورد اصلی داریم گزینه های نصب osquery: اولین بار بارگیری بسته مناسب برای سیستم ما از وب سایت رسمی است ؛ [

دوم ، که معمولاً ترجیح داده می شود ، اضافه کردن مخزن osquery به منابع نرم افزاری ماست.

در اینجا به طور مختصر هر دو گزینه را در نظر می گیریم.

از طریق بسته

می توانید بسته های deb و rpm امضا شده یا تاربل های عمومی تر را از وب سایت رسمی Osquery بارگیری کنید.

ابتدا نسخه مورد نظر را برای نصب انتخاب می کنیم و سپس بسته را بارگیری می کنیم.


نکته: آخرین نسخه موجود را انتخاب کنید (4.1 .2 در زمان نوشتن).

به محض بارگیری بسته ، می توانیم آن را با استفاده از مدیر بسته خود نصب کنیم.

به عنوان مثال ، نصب نرم افزار بر روی سیستم فدورا (به شرط آنکه این بسته در فهرست کار فعلی ما باشد). ما باید اجرا کنیم:

 $ sudo dnf install ./osquery-4.1.2-1.l inux.x86_64.rpm 

با استفاده از مخزن

همچنین می توان rpm یا deb repository را در توزیع خود اضافه کرد.

اگر از توزیع مبتنی بر rpm استفاده می کنیم ، می توانیم دستورات زیر را برای انجام این کار اجرا کنیم: [19659020] $ curl -L https://pkg.osquery.io/rpm/GPG | سودو
/ etc / pki / rpm-gpg / RPM-GPG-KEY-Osquery
$ sudo yum-config-manager –add-repo https://pkg.osquery.io/rpm/osquery-s3-rpm.repo
$ sudo yum-config-manager – osquery-s3-rpm-repo
$ sudo yum install osquery

با استفاده از دستورات linux فوق ، کلید gpg استفاده شده برای امضای بسته ها را روی سیستم خود اضافه می کنیم ، سپس مخزن را اضافه می کنیم.

سرانجام ، ما بسته osquery را نصب می کنیم.

توجه داشته باشید که yum آخرین است. نسخه های Fedora و CentOS / RHEL فقط پیوندی نمادین به dnf است ، بنابراین وقتی اولین را صدا می کنیم ، دومی به جای آن استفاده می شود.

اگر به جای یک توزیع مبتنی بر Debian استفاده کنیم ، می توانیم با انجام این کار ، مخزن deb را به منابع برنامه خود اضافه کنیم:

 $ sudo apt-key Adv --keyserver keyserver.ubu ntu.com --recv-keys
1484120AC4E9F8A1A577AEEE97A80C63C9D8B80B
$ sudo add-apt-repository 'deb [arch=amd64] https://pkg.osquery.io/deb deb main'
$ sudo به روز رسانی مناسب
$ sudo apt-get osquery install 

به محض نصب بسته ، می توانیم به کاربرد اصلی نرم افزار نگاهی بیندازیم.

استفاده اولیه

Osquery به ما اجازه می دهد تا با استفاده از نحو ، جنبه های مختلف سیستم عامل را ردیابی کنیم. SQL ، مشابه نحو استفاده شده در پایگاه های داده sqlite.

نمایش داده شد در جداول اجرا می شود که جنبه های مختلف سیستم عامل مانند فرآیندها و خدمات را انتزاع می کند.

ما می توانیم نمایش داده شد مستقیماً با استفاده از تعاملی. . Bolochki osqueryi یا برنامه آنها را با استفاده از دیو osqueryd

این یک نمونه از پرس و جو به لیست تمام جداول موجود (لیست کامل از جداول با شرح همچنین می توانید در اینترنت یافت می شود) است:

 $ osqueryi
اسکار> جدول
  => acpi_tables
  => apt_source
  => arp_cache
  => atom_packages
  => augeas
  => مجاز
  => block_devices
  => carbon_black_info
  => حک شده
  => chrome_extensions
  => cpu_time
  => cpuid
  => crontab
  => حلقه
  => curl_certificate
  => deb_packages
  => device_file
  => device_hash
  => دستگاه
  => disk_encryption
  => dns_resolvers
 => docker_container_labels
  => docker_container_mounts
  => docker_container_networks
  => docker_container_ports
  => docker_container_ پردازش
  => docker_container_stats
  => docker_containers
  => docker_image_labels
  => docker_images
  => docker_info
  => docker_network_labels
  => docker_networks
  => docker_version
  => docker_volume_labels
  => docker_volumes 
  => ec2_instance_metadata
  => ec2_instance_tags
  => elf_dynamic
  => elf_info
  => elf_sections
  => elf_segment
  => elf_symbols
  => etc._hosts
  => etc._protocols
  => etc._service
  => پرونده
  => file_events
  => firefox_addons
  => گروه ها
  => hardware_events
  => هش
  => intel_me_info
  => رابط_آدرس
  => رابط_خبر
  => رابط_ipv6
  => iptables
  => kernel_info
  => kernel_integrity
  => kernel_modules
  => شناخته شده_هاست
  => آخر
  => listen_ports
  => lldp_ne همسایگان
  => load_aVER
  => logged_in_users
  => جادو
  => md_devices
  => md_drives
  => md_personalities
  => memor_array_mapped_addresses
  => حافظه_arrays
  => memor_device_mapped_adresses
  => Memory_devices
  => memor_error_info
  => memor_info
  => memor_map
  => سوار می شود
  => msr
  => npm_packages
  => oem_strings
  => opera_extensions
  => os_version
  => osquery_events
  => osquery_extensions
  => osquery_flags
  => osquery_info
  => osquery_packs
  => osquery_registry
  => osquery_schedule
  => pci_devices
  => platform_info
  => portage_keywords
  => portage_packages
  => portage_use
  => process_envs
  => process_events
  => process_file_events
  => process_memory_map
  => process_namespaces
  => process_open_files
  => process_open_sockets
  => پردازش
  => prometheus_metrics
  => python_packages
  => مسیرها
  => rpm_package_files
  => rpm_packages
  => selinux_events
  => سایه
  => shared_memory
  => shell_history
  => smart_drive_info
  => smbios_tables
  => socket_events
  => ssh_configs
  => sudoers
  => suid_bin
  => syslog_events
  => system_controls
  => system_info
  => زمان
  => ulimit_info
  => به موقع
  => usb_devices
  => user_events
  => کاربر_گروه
  => user_ssh_keys
  => کاربران
  => یارا
  => yara_events
  => yum_source 

وقتی دستور osqueryi را اجرا می کنیم ، وارد پوسته تعاملی می شویم ؛ و ، می توانیم درخواست ها و دستورالعمل های خود را بر این اساس ارسال کنیم.

در اینجا یک نمونه درخواست دیگر ، این بار لیستی از همه در حال اجرا است. پردازش pid و name .

درخواست در جدول اجرا شده است فرآیند (خروجی درخواست برای راحتی اصلاح شده است):

 osquery> SEIDCT pid، name FROM فرآیندهای؛
+ ------- + ------------------------------------ +
| pid | نام |
+ ------- + ------------------------------------ +
| 1 | systemd |
| 10 | rcu_sched |
| 10333 | kworker / u16: 5-Events_unbound |
| 10336 | kworker / 2: 0-Events |
| 11 | مهاجرت / 0 |
| 11002 | kworker / u16: 1-kcryptd / 253: 0 |
| 11165 | kworker / 1: 1-Events |
| 11200 | kworker / 1: 3-Events |
| 11227 | bash |
| 11368 | osqueryi |
| 11381 | kworker / 0: 0-events |
| 11395 | مطالب وب |
| 11437 | kworker / 0: 2-Events |
| 11461 | kworker / 3: 2-Events_power_efficient |
| 11508 | kworker / 2: 2 |
| 11509 | kworker / 0: 1-Events |
| 11510 | kworker / u16: 2-kcryptd / 253: 0 |
| 11530 | bash |
[...] |
+ ------- + ------------------------------------ + 

می توانید حتی جدولهای پیوست شده را با استفاده از عملگر JOIN پرس و جو کنید ، همانطور که در پایگاههای داده رابطه داریم.

در مثال زیر ، جدول را جستجو می کنیم ، همراه با کاربران از طریق ستون uid:

 osquery> SELECT process.pid ، process.name ، user.username از FROM فرآیندهای عضو شوید
کاربران ON process.uid = user.uid؛
+ ------- + ------------------------------- + --------- --------- +
| pid | نام | نام کاربری |
+ ------- + ------------------------------- + --------- --------- +
| 1 | systemd | ریشه |
| 10 | rcu_sched | ریشه |
| 11 | مهاجرت / 0 | ریشه |
| 11227 | bash | egdoc |
| 11368 | osqueryi | egdoc |
| 13 | cpuhp / 0 | ریشه |
| 14 | cpuhp / 1 | ریشه |
| 143 | kintegrityd | ریشه |
| 144 | kblockd | ریشه |
| 145 | blkcg_punt_bio | ریشه |
| 146 | tpm_dev_wq | ریشه |
| 147 | ata_sff | ریشه |
[...]
| 9130 | مطالب وب | egdoc |
| 9298 | مطالب وب | egdoc |
| 9463 | gvfsd-metadata | egdoc |
| 9497 | gvfsd-network | egdoc |
| 9518 | gvfsd-dnssd | egdoc |
+ ------- + ------------------------------- + --------- --------- + 

Monitor Monitority Integrity File (FIM)

تاکنون ، ما از اسهال در پوسته تعاملی استفاده کرده ایم: osqueryi.

برای استفاده از FIM (نظارت بر تمامیت پرونده) ، ما می خواهیم به جای آن

از طریق پرونده پیکربندی ، لیستی از پرونده هایی را که می خواهیم ردیابی کنیم ، فراهم می کنیم.

رویدادهایی مانند تغییر ویژگی های مربوط به پرونده ها و دایرکتوری های مشخص شده در جدول file_events ثبت می شوند. Daemon با استفاده از یک بازه زمانی مشخص ، پرس و جو در این جدول را آغاز می کند. گزارشات را هنگام شناسایی جدید وارد می کند.

بیایید نمونه ای از پیکربندی را مشاهده کنیم.

پیکربندی را پیکربندی کنید

پرونده پیکربندی اصلی برای اشباع /etc/osquery/osquery.conf است.

پرونده

پیکربندی با فرمت Json ارائه شده است.

فرض کنید می خواهیم همه پرونده ها و فهرست ها را در / موارد دیگر پیگیری کنیم ؛

در اینجا چگونگی پیکربندی برنامه:

 {
  "گزینه ها": {
    "disable_events": "false"
  ،
  "برنامه": {
    "file_events":
      "پرس و جو": "SELECT * FROM file_events؛" ،
      "فاصله": 300
    }
  ،
  "file_paths":
    "و غیره": [
      "/etc/%%"
    ] ،
  ،
} 

بیایید پیکربندی نشان داده شده در بالا را تحلیل کنیم.

اول از همه ، در بخش پارامترها ، disable_events را برای فعال کردن پرونده پرونده disable_events قرار می دهیم.

پس از آن ، ما [ برنامه را ایجاد کردیم: در داخل این بخش می توان درخواست های برنامه ریزی شده مختلفی را با نام شرح داد و ایجاد کردیم.

در مورد ما ، یک پرس و جو ایجاد کردیم که تمام ستون ها را از جدول file_events انتخاب می کند ، که باید هر 300 ثانیه (5 دقیقه) اجرا شود.

پس از برنامه ریزی پرس و جو ، ما file_paths ، که در آن پرونده ها را برای نظارت مشخص کردیم.

در این بخش ، هر کلید نام مجموعه پرونده هایی است که می خواهید ردیابی کنید (دسته بندی در ژارگون اسکار).

در این حالت ، کلید "و غیره" به لیستی اطلاق می شود که فقط دارای یک ورودی باشد ، /etc/٪٪.ociation19659061.06.2012 منظور از نماد٪ چیست؟

هنگام مشخص کردن مسیرهای پرونده ، می توانیم از کاراکترهای استاندارد (*) یا SQL استفاده کنیم. (٪)

اگر یک کارت ویزیت مشخص شده باشد ، کلیه پرونده ها و فهرست هایی را که در سطح مشخص شده وجود دارد ، انتخاب می کند.

اگر یک کارت ویزیت دوگانه مشخص شود ، به صورت بازگشتی همه پرونده ها و پوشه ها را انتخاب می کند.

به عنوان مثال ، عبارت / etc /٪ با تمام پرونده ها و پوشه ها در یک سطح مشابه در / و غیره مطابقت دارد ، در حالی که / etc / ٪٪ به صورت بازگشتی با کلیه پرونده ها و پوشه ها در /etc.►19659061 matches مطابقت دارد در صورت لزوم ، ما همچنین می توانیم برخی از پرونده ها را از مسیری را که ما با استفاده از بخش exclud_paths در پرونده پیکربندی مشخص کردیم.

در بخش ، ما فقط می توانیم به دسته بندی های تعریف شده در بخش file_paths مراجعه کنیم.

ما لیستی از پرونده ها را برای محرومیت ارائه می دهیم:

 "exclude_paths":
     "و غیره": [
        "/etc/aliases"
     ]
  } 

به عنوان نمونه ، ما پرونده / و غیره / نامهای مستعار را از این لیست خارج کردیم.

این همان است که پیکربندی نهایی ما به چه صورت است:
  "گزینه ها": {
    "disable_events": "false"
  ،
  "برنامه": {
    "file_events":
      "پرس و جو": "SELECT * FROM file_events؛" ،
      "فاصله": 20
    }
  ،
  "file_paths":
    "و غیره": [
“/etc/%%”
]
  ،
 "exclud_paths": {
     "و غیره": [
“/etc/aliases”
]
  }
}

شروع Daemon

با پیکربندی جدید ما ، می توانیم Daemon osqueryd را شروع کنیم:

 $ sudo systemctl start osqueryd 
برای اینکه Daemon به طور خودکار در بوت شروع شود ، ما باید اجرا کنیم:

 $ sudo systemctl osqueyd [19659083] وقتی Daemon در حال اجرا است ، می توانیم تنظیمات خود را بررسی کنیم. 

به عنوان نمونه ، مجوز پرونده / etc / fstab را از 644 به 600 تغییر خواهیم داد:

 $ sudo chmod 600 / etc / fstab 

اکنون می توانیم تأیید کنیم که تغییر پرونده با خواندن پرونده /var/log/osquery/osqueryd.results.logociation19659087] در اینجا آخرین سطر پرونده وجود دارد:

 {
   "name"  :  "file_events"  ، 
   "hostIdentifier" :  "fingolfin" ، 
   "calendarTime" :  "Mon Dec 30 19:57:31 2019 UTC" [19659092] ، 
   "unixTime" :  1577735851 ، 
   "epoch" :  0 ، 
   "counter" : [19659103] 0 ، 
   "logNumericsAsNbers" :  false ، 
   "ستون" :   {
     "عمل" : 19659091] "ATTRIBUTES_MODIFIED"  ، 
     "atime" :  "1577735683" ، 
     "category" :  "etc."  19659120] "ctime" :  "1577735841" ، 
     "gid" :  "0" ، 
     "hashed" : [19659091] "0" ، 
     "inode" :  "262147" ، 
     "md5" :  "" ، 
     ] "mode" :  "0600" ، 
     "mtime" :  "15773713 35 " ، 
    " sha1 ": " "، 
    " sha256 ": " "، 
    " size " :  "742" ، 
     "target_path" :  "/ etc / fstab" ، 
     "time" :  "1577735841"  ، 
     "action_id ": " 0 "، 
    " uid ": " 0 "[196590187]}  ، 
   "عمل" :  "" اضافه شد "
}  

در پرونده ها ، ما به وضوح می بینیم که عمل ATTRIBUTES_MODIFIED (خط 10) در امتداد مسیر target_path" / etc / fstab "رخ داده است. (خط 23) ، که بخشی از رده "و غیره" است (خط 12).

توجه به این نکته ضروری است که اگر ما از پرونده file_events از پوسته osqueryi سوال کنیم ، خطوط را نمی بینیم ، زیرا Daemon osqueryd و osqueryi به طور متقابل نیستند

نتیجه گیری

در این درس به بررسی مفاهیم اساسی مرتبط با استفاده از برنامه اشباع پرداختیم که مفاهیم مختلف سیستم عامل را با استفاده از داده های جداول انتزاعی می کند که می توانیم با استفاده از نحو SQL از آنها پرس و جو کنیم.

دیدم که چگونه برنامه را نصب کنیم ، چگونه می توان پرس و جوهای اولیه را با استفاده از پوسته osqueryi انجام داد و در آخر ، نحوه پیکربندی نظارت بر پرونده را با استفاده از Daemon osqueryd انجام داد.

ما فقط روی سطح خراشیده ایم که این برنامه می تواند چه کاری انجام دهد

] ک مانند همیشه ، توصیه این است که برای دانش عمیق تر به اسناد پروژه مراجعه کنید.