আমি কীভাবে সনাক্ত করতে পারি যে কোন প্রক্রিয়াটি লিনাক্সে ইউডিপি ট্র্যাফিক তৈরি করছে?


39

আমার মেশিন ক্রমাগত udp dns ট্র্যাফিকের অনুরোধ করছে। আমার যা জানা দরকার তা হ'ল এই ট্র্যাফিক তৈরির প্রক্রিয়ার পিআইডি।

টিসিপি সংযোগের স্বাভাবিক উপায় হ'ল নেটস্প্যাট / এলএসফ ব্যবহার এবং পিডের সাথে সম্পর্কিত প্রক্রিয়াটি অর্জন করা।

ইউডিপি কি সংযোগটি হ'ল স্টেটলস, সুতরাং আমি যখন নেটস্ট্যাট / এলএসফ কল করি তখনই কেবল ইউডিপি সকেটটি খোলা থাকে এবং এটি ট্রাফিক প্রেরণ করে তবেই আমি এটি দেখতে পাব।

আমি চেষ্টা করেছি lsof -i UDPএবং এর সাথে চেষ্টা করেছি nestat -anpue, তবে আমি জানতে পারি না যে প্রক্রিয়াটি সেই অনুরোধটি করছে কারণ আমি ইউএসপি ট্র্যাফিক প্রেরণের সময় ঠিক lsof / netstat কল করতে হবে, যদি আমি ইউএসপি ডেটাগ্রাম প্রেরণের আগে / পরে এলএসফ / নেটস্ট্যাট কল করি খোলা UDP সকেট দেখতে অসম্ভব।

3/4 ইউডিপি প্যাকেট প্রেরণ করা হয় ঠিক তখনই নেটস্পট / এলএসফকে কল করুন IMPOSSIBLE।

কীভাবে আমি কুখ্যাত প্রক্রিয়াটি সনাক্ত করতে পারি? প্যাকেটের সামগ্রী থেকে প্রেরিত পিআইডি সনাক্ত করার চেষ্টা করার জন্য আমি ইতিমধ্যে ট্রাফিকটি পরিদর্শন করেছি, তবে ট্র্যাফিকের প্রবণতা থেকে এটি সনাক্ত করা সম্ভব নয়।

কেউ আমাকে সাহায্য করতে পারেন ?

আমি এই মেশিনে রুট আছি ফেডোরা 12 লিনাক্স শব্দ ডটকম.প্যান.ইলানান 2.6.32.16-141.fc12.x86_64 # 1 এসএমপি বুধ 7 জুলাই 04:49:59 ইউটিসি 2010 x86_64 x86_64 x86_64 জিএনইউ / লিনাক্স

উত্তর:


48

লিনাক্স অডিটিং সাহায্য করতে পারে। এটি ডেটাগ্রাম নেটওয়ার্ক সংযোগ তৈরির ক্ষেত্রে ব্যবহারকারী এবং প্রক্রিয়াগুলি অন্তত সনাক্ত করবে। ইউডিপি প্যাকেটগুলি ডেটাগ্রাম।

প্রথমে auditdআপনার প্ল্যাটফর্মের কাঠামোটি ইনস্টল করুন এবং নিশ্চিত করুন auditctl -lযে কোনও নিয়ম সংজ্ঞায়িত না করা সত্ত্বেও কিছু প্রত্যাবর্তন করবে।

তারপরে, সিস্টেম কলটি দেখতে একটি নিয়ম যুক্ত করুন socket()এবং পরে ( -k) সহজে খুঁজে পাওয়ার জন্য এটি ট্যাগ করুন । আমার ধরে নেওয়া দরকার যে আপনি একটি -৪-বিট আর্কিটেকচারে আছেন, তবে আপনি যদি না হন তবে আপনি তার b32জায়গায় প্রতিস্থাপন করতে পারেন b64

auditctl -a exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET

এটি তৈরি করতে আপনাকে ম্যান পৃষ্ঠাগুলি এবং শিরোনামের ফাইলগুলি বেছে নিতে হবে, তবে এটি যা ক্যাপচার করে তা মূলত এই সিস্টেম কল: socket(PF_INET, SOCK_DGRAM|X, Y)যেখানে তৃতীয় প্যারামিটারটি অনির্ধারিত তবে প্রায়শই শূন্য থাকে। PF_INET2 এবং SOCK_DGRAM2। টিসিপি সংযোগগুলি SOCK_STREAMসেট করবে যা ব্যবহার করবে a1=1। ( SOCK_DGRAMদ্বিতীয় প্যারামিটারটি সঙ্গে ORed হতে পারে SOCK_NONBLOCKবা SOCK_CLOEXEC, অত &=তুলনা।) -k SOCKETআমাদের শব্দ আমরা যখন নিরীক্ষা গ্রামাঞ্চলে ভ্রমণ পরে অনুসন্ধানের ব্যবহার করতে চান হয়। এটি যে কোনও কিছু হতে পারে তবে আমি এটি সহজ রাখতে চাই।

কয়েক মুহুর্ত এগিয়ে যান এবং নিরীক্ষণের পথচিহ্ন পর্যালোচনা করুন। বৈকল্পিকভাবে, আপনি নেটটিতে হোস্টকে পিন করে কয়েক প্যাকেট জোর করতে পারেন, যা একটি ডিএনএস লুকআপ ঘটায়, যা ইউডিপি ব্যবহার করে, যা আমাদের নিরীক্ষণের সতর্কতাটি ভ্রমণ করবে।

ausearch -i -ts today -k SOCKET

এবং নীচের অংশে অনুরূপ আউটপুট প্রদর্শিত হবে। আমি গুরুত্বপূর্ণ অংশটি হাইলাইট করার জন্য এটি সংক্ষেপে দিচ্ছি

type=SYSCALL ... arch=x86_64 syscall=socket success=yes exit=1 a0=2 a1=2 ... pid=14510 ... auid=zlagtime uid=zlagtime ... euid=zlagtime ... comm=ping exe=/usr/bin/ping key=SOCKET

উপরের আউটপুটে, আমরা দেখতে পাচ্ছি যে pingকমান্ডটি সকেটটি খোলার কারণ হয়েছিল। আমি strace -p 14510এখনও প্রক্রিয়া চালাতে পারে , যদি এটি এখনও চলমান ছিল। ppid(পিতা বা মাতা প্রক্রিয়া আইডি) এছাড়াও ক্ষেত্রে তালিকাভুক্ত করা হয় এটা একটি স্ক্রিপ্ট যে spawns সমস্যা ছেলে অনেক।

এখন, যদি আপনার কাছে প্রচুর ইউডিপি ট্র্যাফিক থাকে, তবে এটি যথেষ্ট ভাল হবে না এবং আপনাকে ওপি্রোফাইল বা সিস্টেমট্যাপের অবলম্বন করতে হবে , উভয়ই বর্তমানে আমার দক্ষতার বাইরে।

এটি সাধারণ ক্ষেত্রে সরু জিনিসগুলিকে সাহায্য করবে।

আপনি যখন কাজটি সম্পন্ন করেন, আপনি এটি তৈরি করতে ব্যবহৃত একই লাইনটি ব্যবহার করে নিরীক্ষণের নিয়মটি সরিয়ে ফেলুন, কেবল বিকল্পের -aসাথে বিকল্প করুন -d

auditctl -d exit,always -F arch=b64 -F a0=2 -F a1\&=2 -S socket -k SOCKET

আমি এটি চেষ্টা করব, তবে আমি মনে করি সঠিক উত্তর।
Boos

কমপক্ষে আমার জন্য, এটি iptables দ্বারা ট্র্যাফিক বাদ দেওয়া বাছাই করছে না।
2rs2ts


23

আপনি নেটস্যাট ব্যবহার করতে পারেন, তবে আপনার সঠিক পতাকাগুলি দরকার এবং এটি কেবল তখনই কাজ করে যদি ডেটা প্রেরণকারী প্রক্রিয়াটি এখনও বেঁচে থাকে। এটি এমন কিছু চিহ্নের সন্ধান পাবে না যা জীবনে সংক্ষেপে এসেছিল, ইউডিপি ট্রাফিক প্রেরণ করেছিল, পরে চলে গেছে। এটির জন্য স্থানীয় রুট সুবিধাদিও প্রয়োজন। বলেছিল:

এখানে আমি আমার স্থানীয় হোস্টে এনসিএটি শুরু করছি, ইউডিপি ট্র্যাফিক 2345 বন্দরটিতে (অস্তিত্বহীন) মেশিনে 10.11.12.13 এ পাঠিয়েছি:

[madhatta@risby]$ ncat -u 10.11.12.13 2345 < /dev/urandom

ট্র্যাফিক চলছে তা প্রমাণ করে এখানে কিছু টিসিপিডাম্প আউটপুট দেয়:

[root@risby ~]# tcpdump -n -n port 2345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:41:32.391750 IP 192.168.3.11.57550 > 10.11.12.13.2345: UDP, length 8192
12:41:32.399723 IP 192.168.3.11.57550 > 10.11.12.13.2345: UDP, length 8192
12:41:32.401817 IP 192.168.3.11.57550 > 10.11.12.13.2345: UDP, length 8192
12:41:32.407051 IP 192.168.3.11.57550 > 10.11.12.13.2345: UDP, length 8192
12:41:32.413492 IP 192.168.3.11.57550 > 10.11.12.13.2345: UDP, length 8192
12:41:32.417417 IP 192.168.3.11.57550 > 10.11.12.13.2345: UDP, length 8192

প্রক্রিয়া আইডি বিবরণ দেখতে -a পতাকা (পোর্ট বিশদ দেখতে) এবং নেট-স্পট সহ নেটস্প্যাট ব্যবহার করে এখানে দরকারী বিট । এটি -p পতাকাটির জন্য মূল সুবিধার দরকার:

[root@risby ~]# netstat -apn|grep -w 2345
udp        0      0 192.168.3.11:57550          10.11.12.13:2345            ESTABLISHED 9152/ncat     

আপনি দেখতে পাচ্ছেন, পিড 9152 নির্দিষ্ট দূরবর্তী হোস্টে 2345 পোর্টের জন্য সংযোগ উন্মুক্ত হিসাবে আঙ্গুলযুক্ত। নেটস্যাট সাহায্যের সাথে পিএস এর মাধ্যমেও চালায় এবং প্রক্রিয়াটির নামটিও আমাকে জানান ncat

আশা করি কিছুটা কাজে লাগবে।


সত্যিই দুর্দান্ত কাজ! : থাম্বআপ:
ThorstenS

2
যদিও একটা ধরা আছে। যদি কোনও শেল স্ক্রিপ্ট একটি সাব-প্রসেস তৈরি করে যা ডিএনএস লুকআপ করে এবং সেই প্রক্রিয়াটি দ্রুত প্রস্থান করে, এর ফলে সমস্যাটি দেখা দেয় তবে উত্স পোর্ট (উপরে 57550) সমস্ত সময় পরিবর্তন হবে। এই ক্ষেত্রে, কৌশলটি কাজ করবে না এবং আপনাকে আরও কঠোর পদক্ষেপ নিতে হবে। অতিরিক্তভাবে, আপনার নেটস্যাটটি এমনটি করা উচিত ছিল grep -w 57550কারণ একাধিক প্রক্রিয়া একই সার্ভারে ডিএনএস লুকআপ করত। আপনার পদ্ধতি তাদের পার্থক্য করবে না।
জেরোলাটাইম

1
আমি আপনার উভয় আপত্তি, জেরোলাগটাইমের সাথে একমত (তবে যাইহোক আপনার থরস্টেনস!
ম্যাডহ্যাটার

17

আমার ঠিক একই সমস্যা ছিল এবং দুর্ভাগ্যক্রমে auditdআমার পক্ষে খুব একটা করেনি।

আমার কিছু সার্ভার থেকে গুগল ডিএনএস অ্যাড্রেসগুলিতে যাওয়ার ট্র্যাফিক ছিল 8.8.8.8এবং 8.8.4.4। এখন, আমার নেটওয়ার্ক অ্যাডমিনের হালকা ওসিডি রয়েছে এবং তিনি আমাদের অভ্যন্তরীণ ডিএনএস ক্যাশে থাকায় তিনি সমস্ত অপ্রয়োজনীয় ট্র্যাফিক পরিষ্কার করতে চেয়েছিলেন। তিনি এই ক্যাশে সার্ভারগুলি বাদে সবার জন্য বহির্গমন পোর্ট 53 অক্ষম করতে চেয়েছিলেন।

সুতরাং, ব্যর্থ হওয়ার পরে auditctl, আমি খনন করি systemtap। আমি নিম্নলিখিত স্ক্রিপ্ট নিয়ে এসেছি:

# cat >> udp_detect_domain.stp <<EOF
probe udp.sendmsg {
  if ( dport == 53 && daddr == "8.8.8.8" ) {
    printf ("PID %5d (%s) sent UDP to %15s 53\n", pid(), execname(), daddr)
  }
}
EOF

তারপরে সহজভাবে চালান:

stap -v udp_detect_domain.stp

এই যে আউটপুট আমি পেয়েছি:

PID  3501 (python) sent UDP to  8.8.8.8 53
PID  3501 (python) sent UDP to  8.8.8.8 53
PID  3506 (python) sent UDP to  8.8.8.8 53

এটাই! resolv.confএই পিআইডি পরিবর্তন করার পরেও পরিবর্তনগুলি নেওয়া হয়নি।


আশাকরি এটা সাহায্য করবে :)


5

এখানে স্ট্যাট ভার্সন ১.৮ এর পরে নেটফিল্টার প্রোব ব্যবহার করে একটি সিস্টেম ট্যাপ বিকল্প রয়েছে। এছাড়াও দেখুন man probe::netfilter.ip.local_out

# stap -e 'probe netfilter.ip.local_out {
  if (dport == 53) # or parametrize
      printf("%s[%d] %s:%d\n", execname(), pid(), daddr, dport)
}'
ping[24738] 192.168.1.10:53
ping[24738] 192.168.1.10:53
^C

4

আমি ডিএনএস অনুরোধগুলি দেখতে tcpdump বা wireshark এর মতো নেট-স্নিফার ব্যবহার করব। ক্যোয়ারির বিষয়বস্তুগুলি তাদের কী প্রোগ্রামটি জারি করছে সে সম্পর্কে ধারণা দিতে পারে।


ট্র্যাফিকের কোনও তথ্যই আমি স্রেফ দেখিনি।
বুস

কোন তথ্য নেই? খালি প্যাকেট? আমার অভিপ্রায়টি হ'ল, যদি কেউ আপডেট.জভা.সুন.কম বা আরএসএস.সিএন.এন.কম সমাধান করার চেষ্টা করে তবে আপনি এটিকে কার্যকরভাবে কিছু আবিষ্কার করতে পারেন।
রেডগ্রিটিব্রিক

অভ্যন্তরীণ প্রক্সি অনুসন্ধান ডিএনএস ক্যোয়ারী। এই মুহুর্তে আমি দেখতে পেয়েছি যে প্রক্রিয়াটি তবে টেকনিকগুলি সমাধান করার একটি সাধারণ সমস্যাটির জন্য প্রশ্নটি জীবিত থাকবে
বুস

lsof -i | awk '/ ইউডিপি /'
c4f4t0r

3

সচেতন থাকুন যে অডিটেক্টল ব্যবহার করার সময়, এনএসসিডি উদাহরণস্বরূপ ডিএনএস কোয়েরি করার সময় সকেট সিস্টেম কলটিতে কিছুটা আলাদা প্যারামিটার ব্যবহার করে:

socket(AF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP)

সুতরাং আপনি যে প্রশ্নগুলি উপরে উল্লিখিত ছিল সেগুলি ছাড়াও তা নিশ্চিত করার জন্য, আপনি যদি চান তবে একই নামের সাথে একটি অতিরিক্ত ফিল্টার যুক্ত করতে পারেন:

auditctl -a exit,always -F arch=b64 -F a0=2  -F a1=2050 -S socket -k SOCKET

এখানে 2050 হ'ল SOCK_DGRAM (2) এবং সোক_নাব্লক (2048) এর কিছুটা দিকের OR is

তারপরে অনুসন্ধানে একই কী সহ সেই দুটি ফিল্টারই পাওয়া যাবে SOCKET:

ausearch -i -ts today -k SOCKET

সকেট ধ্রুবকগুলির জন্য হেক্সের মানগুলি আমি এখানে পেয়েছি: https://golang.org/pkg/syscall/#pkg- কনস্ট্যান্টস

আমার মন্তব্য করার মতো কোনও খ্যাতি নেই বলে আমি এটি যুক্ত করেছি added

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.