Academy and Foundation unixmens | Your skills, Your future
2.29K subscribers
6.66K photos
1.37K videos
1.24K files
6.07K links
@unixmens_support
@yashar_esm
[email protected]
یک کانال علمی تکنولوژی
فلسفه متن باز-گنو/لینوکس-امنیت - اقتصاد
دیجیتال
Technology-driven -بیزینس های مبتنی بر تکنولوژی
Enterprise open source
ارایه دهنده راهکارهای ارتقای سازمانی - فردی - تیمی
Download Telegram
فعال‌سازی و مدیریت پروفایل‌های AppArmor:

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

# apt install apparmor apparmor-profiles apparmor-utils
[...]
# perl -pi -e 's,GRUB_CMDLINE_LINUX="(.*)"$,GRUB_CMDLINE_LINUX="$1 apparmor=1 security=apparmor",' /etc/default/grub
# update-grub

پس از راه‌اندازی مجدد سیستم، AppArmor عملیاتی بوده و می‌توان وضعیت آن را با استفاده از aa-status بررسی کرد:

# aa-status
apparmor module is loaded.
44 profiles are loaded.
9 profiles are in enforce mode.
/usr/bin/lxc-start
/usr/lib/chromium-browser/chromium-browser//browser_java
[...]
35 profiles are in complain mode.
/sbin/klogd
[...]
3 processes have profiles defined.
1 processes are in enforce mode.
/usr/sbin/libvirtd (1295)
2 processes are in complain mode.
/usr/sbin/avahi-daemon (941)
/usr/sbin/avahi-daemon (1000)
0 processes are unconfined but have a profile defined.

یادداشت پروفایل‌های بیشتر AppArmor
بسته apparmor-profiles شامل پروفایل‌هایی است که توسط جامعه کاربری AppArmor مدیریت می‌شوند. برای دریافت پروفایل‌های بیشتر می‌توانید بسته apparmor-profiles-extra را نصب کرده که شامل پروفایل‌های توسعه‌یافته توسط دبیان و اوبونتو می‌باشند.
حالت هر پروفایل می‌تواند با استفاده از فراخوانی‌های aa-enforce و aa-complain به وضعیت enforcing و complaining تغییر یابد که اینکار به عنوان پارامتر در مسیر اجرایی برنامه یا مسیر فایل خطی مشی امنیتی صورت می‌پذیرد. به علاوه، یک پروفایل می‌تواند با استفاده از aa-disable غیرفعال شده یا در حالت audit (برای ثبت فراخوانی‌های سیستمی مجاز) با استفاده از aa-audit قرار گیرد.

# aa-enforce /usr/sbin/avahi-daemon
Setting /usr/sbin/avahi-daemon to enforce mode.
# aa-complain /etc/apparmor.d/usr.bin.lxc-start
Setting /etc/apparmor.d/usr.bin.lxc-start to complain mode.
ایجاد یک پروفایل جدید
با اینکه ایجاد یک پروفایل AppArmor کار ساده‌ای است، اما اکثر برنامه‌ها چنین پروفایلی ندارند. این قسمت به شما نشان می‌دهد که چطور می‌توان یک پروفایل جدید را از ابتدا و با استفاده از برنامه هدف ایجاد کرد تا AppArmor با مانیتور کردن فراخوانی سیستمی به آن بتواند منابع مصرفی‌اش را تحت نظر قرار دهد.
مهمترین برنامه‌هایی که باید دسترسی محدود داشته باشند تحت شبکه بوده و آن‌هایی هستند که بیشتر هدف حملات راه‌دور قرار می‌گیرند. به همین دلیل است که AppArmor یک دستور متداول aa-unconfined را فراهم می‌کند تا فهرستی از برنامه‌های تحت شبکه با سوکت باز که پروفایل مشخصی ندارند بدست آید. با گزینه --paranoid شما فهرستی از تمام فرآیندهای تعریف نشده که حداقل یک ارتباط فعال شبکه را دارند دریافت می‌کنید.

# aa-unconfined
801 /sbin/dhclient not confined
890 /sbin/rpcbind not confined
899 /sbin/rpc.statd not confined
929 /usr/sbin/sshd not confined
941 /usr/sbin/avahi-daemon confined by '/usr/sbin/avahi-daemon (complain)'
988 /usr/sbin/minissdpd not confined
1276 /usr/sbin/exim4 not confined
1485 /usr/lib/erlang/erts-6.2/bin/epmd not confined
1751 /usr/lib/erlang/erts-6.2/bin/beam.smp not confined
19592 /usr/lib/dleyna-renderer/dleyna-renderer-service not confined

در مثال پیش رو، تلاش می‌کنیم که یک پروفایل برای /sbin/dhclient ایجاد کنیم. برای این منظور از aa-genprof dhclient استفاده می‌کنیم. این دستور از شما دعوت می‌کند تا از برنامه در پنجره دیگری استفاده کنید و زمانی که به پایان رسید به aa-genprof بازگشته تا رویدادهای سیستمی مورد نظر AppArmor پیمایش شوند و از میان ‌آن‌ها قوانین دسترسی برنامه مشخص گردند. برای هر رویداد ثبت شده، یک یا چند پیشنهاد برای قانون مورد نظر ارائه می‌دهد که می‌توانید تایید یا به روش‌های دیگر آن‌ها را ویرایش کنید:

# aa-genprof dhclient
Writing updated profile for /sbin/dhclient.
Setting /sbin/dhclient to complain mode.

Before you begin, you may wish to check if a
profile already exists for the application you
wish to confine. See the following wiki page for
more information:
https://wiki.apparmor.net/index.php/Profiles

Please start the application to be profiled in
another window and exercise its functionality now.

Once completed, select the "Scan" option below in
order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.

Profiling: /sbin/dhclient

[(S)can system log for AppArmor events] / (F)inish
Reading log entries from /var/log/audit/audit.log.

Profile: /sbin/dhclient 1
Execute: /usr/lib/NetworkManager/nm-dhcp-helper
Severity: unknown

(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish
P
Should AppArmor sanitise the environment when
switching profiles?

Sanitising environment is more secure,
but some applications depend on the presence
of LD_PRELOAD or LD_LIBRARY_PATH.

(Y)es / [(N)o]
Y
Writing updated profile for /usr/lib/NetworkManager/nm-dhcp-helper.
Complain-mode changes:
WARN: unknown capability: CAP_net_raw

Profile: /sbin/dhclient 2
Capability: net_raw
Severity: unknown

[(A)llow] / (D)eny / (I)gnore / Audi(t) / Abo(r)t / (F)inish
A
Adding capability net_raw to profile.

Profile: /sbin/dhclient 3
Path: /etc/nsswitch.conf
Mode: r
Severity: unknown

1 - #include <abstractions/apache2-common>
2 - #include <abstractions/libvirt-qemu>
3 - #include <abstractions/nameservice>
4 - #include <abstractions/totem>
[5 - /etc/nsswitch.conf]
[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore
3

Profile: /sbin/dhclient
Path: /etc/nsswitch.conf
Mode: r
Severity: unknown

1 - #include <abstractions/apache2-common>
2 - #include <abstractions/libvirt-qemu>
[3 - #include <abstractions/nameservice>]
4 - #include <abstractions/totem>
5 - /etc/nsswitch.conf
[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore
A
Adding #include <abstractions/nameservice> to profile.

Profile: /sbin/dhclient
Path: /proc/7252/net/dev
Mode: r
Severity: 6
1 - /proc/7252/net/dev
[2 - /proc/*/net/dev]
[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore
A
Adding /proc/*/net/dev r to profile

[...]
Profile: /sbin/dhclient 4
Path: /run/dhclient-eth0.pid
Mode: w
Severity: unknown

[1 - /run/dhclient-eth0.pid]
[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore
N

Enter new path: /run/dhclient*.pid

Profile: /sbin/dhclient
Path: /run/dhclient-eth0.pid
Mode: w
Severity: unknown

1 - /run/dhclient-eth0.pid
[2 - /run/dhclient*.pid]
[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore
A
Adding /run/dhclient*.pid w to profile

[...]
Profile: /usr/lib/NetworkManager/nm-dhcp-helper 5
Path: /proc/filesystems
Mode: r
Severity: 6

[1 - /proc/filesystems]
[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore
A
Adding /proc/filesystems r to profile

= Changed Local Profiles =

The following local profiles were changed. Would you like to save them?

[1 - /sbin/dhclient]
2 - /usr/lib/NetworkManager/nm-dhcp-helper
(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t
S
Writing updated profile for /sbin/dhclient.
Writing updated profile for /usr/lib/NetworkManager/nm-dhcp-helper.

Profiling: /sbin/dhclient

[(S)can system log for AppArmor events] / (F)inish
F
Setting /sbin/dhclient to enforce mode.
Setting /usr/lib/NetworkManager/nm-dhcp-helper to enforce mode.

Reloaded AppArmor profiles in enforce mode.

Please consider contributing your new profile!
See the following wiki page for more information:
https://wiki.apparmor.net/index.php/Profiles

Finished generating profile for /sbin/dhclient.

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

1 اولین رویداد تشخیص داده شده مربوط به اجرای برنامه دیگری است. در این مورد، شما چندین انتخاب دارید: می‌توانید برنامه را با پروفایل فرآیند والد آن (گزینه “Inherit”)، با پروفایل اختصاصی خود (گزینه‌های “Profile” و “Named”، که تنها در شیوه گزینش نام تفاوت دارند)، با پروفایل زیرمجموعه فرآیند والد آن (گزینه “Child”)، بدون پروفایل (گزینه “Unconfined”) اجرا کنید یا می‌توانید تصمیم بگیرید که برنامه اصلا اجرا نشود (گزینه “Deny”).
به یاد داشته باشید که در صورت انتخاب یک پروفایل اختصاصی و عدم وجود آن، این ابزار پروفایل جدید را برای شما ایجاد کرده و در همان قسمت قوانین پیشنهای را به شما ارائه می‌دهد.

2 در سطح کرنل، قدرت ویژه کاربر root به چندین “قابلیت” تقسیم می‌شود. زمانی که یک فراخوانی سیستمی نیازمند ... خاصی است، AppArmor تایید می‌کند آیا پروفایل به برنامه اجازه استفاده از چنین قابلیتی را می‌دهد یا خیر.

3 در اینجا برنامه به دنبال مجوزهای /etc/nsswitch.conf است. aa-genprof تشخیص داد که این مجوز توسط چندین “موجودیت” صادر شده و آن‌ها را به عنوان گزینه‌های جایگزین پیشنهاد می‌دهد. یک موجودیت مجموعه‌ای از قوانین دسترسی را فراهم می‌کند که این قوانین منابع مختلفی که معمولا با یکدیگر استفاده می‌شوند را گروه‌بندی می‌کنند. در این مورد بخصوص، فایل معمولا توسط nameservice مرتبط با توابع کتابخانه‌ای C قابل دسترسی است و برای انتخاب گزینه “#include <abstractions/nameservice>” عبارت “3” را وارد کرده و با درج “A” آن را تایید می‌کنیم.

4 برنامه قصد ایجاد فایل /run/dhclient-eth0.pid را دارد. اگر فقط اجازه ایجاد چنین فایل ویژه‌ای را بدهیم، برنامه زمانی که کاربر از آن در یک رابط شبکه دیگر استفاده کند کار نخواهد کرد. بنابراین با انتخاب “New” نام فایل را به عبارت متداول‌تر “/run/dhclient*.pid” قبل از اینکه توسط “Allow” ثبت شود تغییر می‌دهیم.
5 نکته اینکه این درخواست دسترسی قسمتی از پروفایل dhclient نبوده ولی در پروفایل جدید فراهم شده توسط /usr/lib/NetworkManager/nm-dhcp-helper در زمان اختصاص پروفایل ویژه به آن قرار دارد.
پس از بازرسی تمام رویدادهای ثبت شده، برنامه پیشنهاد می‌دهد که تمام پروفایل‌های ایجاد شده در زمان اجرا ذخیره‌سازی شوند. در این مورد، دو پروفایل داریم که به صورت همزمان با استفاده از “Save” می‌توانیم ذخیره‌سازی کنیم (اما امکان ذخیره‌سازی انفرادی آن‌ها نیز وجود دارد) قبل از اینکه برنامه را با “Finish” به پایان برسانیم.
ا aa-genprof در حقیقت به عنوان یک لایه انتزاعی برای aa-logprof عمل می‌کند: این ابزار یک پروفایل خالی ایجاد کرده، آن را در حالت complain قرار می‌دهد و با اجرای aa-logprof، که ابزاری برای بروزرسانی پروفایل است، محتویات آن را مبتنی با رویدادهای ثبت شده در سیستم برورزسانی می‌کند. بنابراین در زمان دیگری می‌توانید با اجرای این ابزار پروفایل خود را بهینه‌سازی کنید.
اگر می‌خواهید که پروفایل تولید شده کامل باشد، باید از برنامه به شیوه‌ای که توضیح داده شده است استفاده کنید. در مورد dhclient، یعنی آن را با استفاده از Network Manager، ifupdown یا manual اجرا کنید. در انتها، ممکن است فایل /etc/apparmor.d/sbin.dhclient مشابه به این را دریافت کنید:

# Last Modified: Tue Sep 8 21:40:02 2015
#include <tunables/global>

/sbin/dhclient {
#include <abstractions/base>
#include <abstractions/nameservice>

capability net_bind_service,
capability net_raw,

/bin/dash r,
/etc/dhcp/* r,
/etc/dhcp/dhclient-enter-hooks.d/* r,
/etc/dhcp/dhclient-exit-hooks.d/* r,
/etc/resolv.conf.* w,
/etc/samba/dhcp.conf.* w,
/proc/*/net/dev r,
/proc/filesystems r,
/run/dhclient*.pid w,
/sbin/dhclient mr,
/sbin/dhclient-script rCx,
/usr/lib/NetworkManager/nm-dhcp-helper Px,
/var/lib/NetworkManager/* r,
/var/lib/NetworkManager/*.lease rw,
/var/lib/dhcp/*.leases rw,

profile /sbin/dhclient-script flags=(complain) {
#include <abstractions/base>
#include <abstractions/bash>

/bin/dash rix,
/etc/dhcp/dhclient-enter-hooks.d/* r,
/etc/dhcp/dhclient-exit-hooks.d/* r,
/sbin/dhclient-script r,

}
}
با lsm های لینوکس آشنا شوید :
https://kernsec.org/wiki/index.php/Projects
:: Exec-Shield



ا Exec-Shield بر این اساس فعالیت می کند که حافظه اطلاعات را با حالت non-executable یا غیر قابل اجرا و حافظه برنامه ها را با حالت non-writeable یا غیر قابل نوشتن ٬ بر این نحو برچسب گذاری می نماید . هم چنین Exec-Shield آدرس هایی که قسمت های مختلف برنامه ها در آن جا قرار گرفته اند را به صورت تصادفی قرار می دهد . این ویژگی بسیاری از مشکلات امنیتی Buffer OverFlow را از بین می برد ٬ به این دلیل که بسیاری از کراکر ها نمی توانند حدس بزنند قسمت هایی که حالت اجرایی دارند در کدام قسمت حافظه قرار می گیرند . قابل ذکر است که Exec-Shield جهت سیستم های x86 است .



:: (PIE) Position Independent Executables



مانند Exec-Shield به حافظه اطلاعات اجازه می دهد که بطور تصادفی به محل های متفاوت جابجا گردند ٬ PIE به برنامه نویس ها اجازه می دهد که قسمت های اجرایی کد هایشان ٬ هر زمان که اجرا می گردند در قسمت های مختلف حافظه قرار بگیرند . با این حالت فرد نفوذگر نمی تواند حدس بزند که در کدام قسمت حافظه برنامه اجرا شده و امکان ایجاد اکسپلویت را خیلی دشوار و یا تقریبا غیر ممکن می سازد .



:: ELF ( Executable and Linkable Format )



یکسری تغییرات در کامپوننت فایل که ساختار آن را محافظت می نماید .



:: SELinux



ا SELinux در مشارکت با NSA و دیگر توسعه دهندگان نظیر Gentoo و Debian ایجاد شد . SELinux یا
ا Security Enhaced Linux ٬ کاربران و پروسه ها را با مشاهده همه اتفاقات سیستم محافظت می نماید ٬ از باز نمودن فایل گرفته تا استفاده از سوکت . کاربران می توانند SELinux مدنظر خود را با سیاست های دلخواه تعریف نمایند . به طور پیش فرض ٬ فدورا خود دارای سیاست امنیت ست که Daemon های شبکه را که دارای ضریب خطر بالا تری جهت نفوذ می باشند را محافظت می نماید .

به طور مثال ٬ وب سرور آپاچی در چهار حالت محافظت گردیده است : قسمت های اجرایی آپاچی ٬ httpd

هنگام کامپایل شدن توسط PIE و Exec-Shield محافظت گردیده است . فایل باینری اجرایی نیز توسط ELF محافظت شده است .
#security @unixmens
پارامتر هایی در etc/sysctl.conf برای امنیت : (exec shield توضیح داده شد )

# Turn on execshield

kernel.exec-shield=1

kernel.randomize_va_space=1

# Enable IP spoofing protection

net.ipv4.conf.all.rp_filter=1

# Disable IP source routing

net.ipv4.conf.all.accept_source_route=0

# Ignoring broadcasts request

net.ipv4.icmp_echo_ignore_broadcasts=1

net.ipv4.icmp_ignore_bogus_error_messages=1

# Make sure spoofed packets get logged

net.ipv4.conf.all.log_martians = 1
AppArmor:

AppArmor is a Mandatory Access Control (MAC) Linux Security Module (LSM) giving administrators the ability to restrict the permissions of applications (Apache, MySQL, CUPS, etc) via application profiles. These restrictions can greatly help in the event an application becomes compromised by limiting the resources accessible to the application. AppArmor has been included in the mainline Linux kernel since 2.6.36 and has been supported by Canonical since 2009. It is the LSM of choice for current Ubuntu Desktop and Server installations. Many believe that AppArmor is easier to configure compared to its LSM competitor, SELinux (which we will be covering later on). Below are the topics we are going to cover for AppArmor:

Installation
Checking AppArmor Status
Dissecting Application Profile Configurations
Changing Profile Modes of Operation
Enabling and Disabling AppArmor
Enabling and Disabling Application Profiles
Creating/Editing Application Profiles
Summary

Installation

Note: For this tutorial we will be using Ubuntu Server 16.10 which already includes AppArmor

AppArmor comes installed and enabled by default on both Server and Desktop distributions of the popular Linux flavor Ubuntu. To use AppArmors full functionality you should install the following packages:

sudo apt-get install apparmor-profiles
sudo apt-get install apparmor-utils

Installing the apparmor-profiles package installs predefined profiles. Profiles can be installed automatically when installing applications (if the application supports it) or manually. Installing the apparmor-utils package installs the utilities necessary to change the AppArmor execution mode, find the status of a profile, and create new profiles.
Checking AppArmor Status

The running status of AppArmor can be checked using the following command:

sudo apparmor_status

Your output should look similar to this:


acozzetta@ubuntu-server:~$ sudo apparmor_status
apparmor module is loaded.
12 profiles are loaded.
12 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/tcpdump
lxc-container-default
lxc-container-default-cgns
lxc-container-default-with-mounting
lxc-container-default-with-nesting
0 profiles are in complain mode.
1 processes have profiles defined.
1 processes are in enforce mode.
/sbin/dhclient (1430)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
People disagree with me. I just ignore them.
-- Linus Torvalds, regarding the use of C++ for the Linux kernel
اسکورم مجموعه‌ای از استانداردهای فنی برای محصولات نرم‌افزاری است که توسط گروه ای. دی. ال. توسعه داده شده است و این استاندارد به خوبی در تمام نرم‌افزاها اجرا می‌شود. یکی از مهم‌ترین مزایای آن، استفاده به‌صورت یکپارچه در تمام سامانه‌های مبتنی بر این استاندارد است. محتوایی که بر اساس اسکورم ایجاد شده قابل حمل و بادوام است، بنابراین خطر عدم توانایی اجرای محتوای قدیمی در سامانه‌های جدید کاهش می‌یابد. (what is scorm?, 2014)
اسکورم از سه زیر بخش تشکیل شده است:

• بخش دسته‌بندی محتوا : این بخش تعیین می‌کند که محتوا باید چگونه دسته‌بندی و توصیف شود و اصل آن بر ایکس. ام. ال. پایه‌گذاری شده است.
• بخش زمان اجرا : این بخش تعیین می‌کند که محتوا چگونه باید راه‌اندازی شود و چطور با سامانه‌های مدیریت یادگیری (LMSs) ارتباط برقرار کند.
• بخش ترتیب و توالی : این بخش تعیین می‌کند که یادگیرنده چگونه می‌تواند بین بخش‌ها حرکت کند. این قسمت توسط مجموعه‌ای از قوانین و ویژگی‌های نوشته شده در ایکس. ام. ال. تعریف شده است. (what is scorm?, 2014)

منبع: what is scorm?, 2014،
❇️شرکت #آمازون اعلام کرد تحت برنامه Upskiling 2025، هفتصد میلیون دلار برای آموزش 100 هزار کارمند خود در ایالات متحده در حوزه اتوماسیون به دلیل تغییرات حوزه فناوری و اطمینان از کارایی نیروهای خود در آینده هزینه خواهد کرد.

⭐️در حقیقت، اتوماسیون با ارائه امکانات نوین، فرصت های جدید شغلی برای کارمندان حوزه آیتی ایجاد می کند. اگرچه برخی از موقعیت های شغلی حذف می شوند، اما این تعداد در مقایسه با تعداد مشاغل ایجاد شده اندک می باشد.
منبع